blob: 463559b740ffc7b8a175f2c6ebd123cd71f31b6e [file] [log] [blame]
import 'package:fidl/fidl.dart';
import 'package:fidl_fuchsia_setui/fidl.dart';
import 'connectivity_controller.dart';
import 'intl_controller.dart';
import 'network_controller.dart';
import 'setui_setting_controller.dart';
import 'timezone_controller.dart';
class LocalSetUiService implements SetUiService {
Map<SettingType, SetUiSettingController> controllers = {};
final SetUiSettingControllerCreator creator;
final SetUiListenerProxyBinder proxyBinder;
LocalSetUiService(
{this.creator = SetUiSettingControllerCreator.instance,
this.proxyBinder = _bindListenerProxy});
@override
void listen(
SettingType settingType, InterfaceHandle<SettingListener> listener) {
_getController(settingType).addListener(proxyBinder(listener));
}
@override
void update(
SettingsObject value, void Function(UpdateResponse response) callback) {
// TODO: Remove this method and replace with mutate.
}
@override
void mutate(SettingType settingType, Mutation mutation,
void Function(MutationResponse response) callback) {
interactiveMutate(settingType, mutation, null /*handles*/, callback);
}
@override
void interactiveMutate(
SettingType settingType,
Mutation mutation,
MutationHandles handles,
void Function(MutationResponse response) callback) {
_getController(settingType).mutate(mutation, handles: handles).then((code) {
callback(MutationResponse(returnCode: code));
});
}
SetUiSettingController _getController(SettingType type) =>
controllers.putIfAbsent(type, () => creator.createController(type));
}
class SetUiSettingControllerCreator {
static const SetUiSettingControllerCreator instance =
SetUiSettingControllerCreator();
const SetUiSettingControllerCreator();
SetUiSettingController createController(SettingType type) {
switch (type) {
case SettingType.timeZone:
return TimeZoneController();
case SettingType.wireless:
return NetworkController();
case SettingType.connectivity:
return ConnectivityController();
case SettingType.intl:
return IntlSettingsController();
default:
throw UnimplementedError('No controller for the given type!');
}
}
}
SettingListenerProxy _bindListenerProxy(
InterfaceHandle<SettingListener> listener) {
final proxy = SettingListenerProxy();
proxy.ctrl.bind(listener);
return proxy;
}
typedef SetUiListenerProxyBinder = SettingListenerProxy Function(
InterfaceHandle<SettingListener> listener);