[SetUi] Add Accessibility Settings App
Tests: Manual
Change-Id: Ib1eaf54367599f2f063018ee72093b16b41ef736
diff --git a/bin/accessibility_settings/BUILD.gn b/bin/accessibility_settings/BUILD.gn
new file mode 100644
index 0000000..e526334
--- /dev/null
+++ b/bin/accessibility_settings/BUILD.gn
@@ -0,0 +1,30 @@
+# Copyright 2018 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//topaz/runtime/flutter_runner/flutter_app.gni")
+
+flutter_app("accessibility_settings") {
+ main_dart = "lib/main.dart"
+
+ manifest = "pubspec.yaml"
+
+ sources = [
+ "src/accessibility_settings.dart",
+ "src/accessibility_settings_model.dart",
+ ]
+
+ meta = [
+ {
+ path = rebase_path("meta/accessibility_settings.cmx")
+ dest = "accessibility_settings.cmx"
+ },
+ ]
+
+ deps = [
+ "//third_party/dart-pkg/git/flutter/packages/flutter",
+ "//topaz/lib/settings:lib.settings",
+ "//topaz/public/dart/widgets:lib.widgets",
+ "//topaz/public/lib/app/dart",
+ ]
+}
diff --git a/bin/accessibility_settings/analysis_options.yaml b/bin/accessibility_settings/analysis_options.yaml
new file mode 100644
index 0000000..5ad6dd5
--- /dev/null
+++ b/bin/accessibility_settings/analysis_options.yaml
@@ -0,0 +1,5 @@
+# Copyright 2018 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+include: ../analysis_options.yaml
diff --git a/bin/accessibility_settings/lib/main.dart b/bin/accessibility_settings/lib/main.dart
new file mode 100644
index 0000000..be935d2
--- /dev/null
+++ b/bin/accessibility_settings/lib/main.dart
@@ -0,0 +1,20 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+import 'package:lib.widgets/model.dart';
+
+import 'src/accessibility_settings.dart';
+import 'src/accessibility_settings_model.dart';
+
+void main() {
+ final AccessibilitySettingsModel model = AccessibilitySettingsModel();
+ final Providers providers = Providers()..provideValue(model);
+ final Widget app = ProviderNode(
+ providers: providers,
+ child: MaterialApp(home: AccessibilitySettings()),
+ );
+
+ runApp(app);
+}
diff --git a/bin/accessibility_settings/lib/src/accessibility_settings.dart b/bin/accessibility_settings/lib/src/accessibility_settings.dart
new file mode 100644
index 0000000..9aefc57
--- /dev/null
+++ b/bin/accessibility_settings/lib/src/accessibility_settings.dart
@@ -0,0 +1,69 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/widgets.dart';
+import 'package:flutter/material.dart';
+import 'package:lib.settings/widgets.dart';
+import 'package:lib.widgets/model.dart';
+
+import 'accessibility_settings_model.dart';
+
+class AccessibilitySettings extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) => Provide<AccessibilitySettingsModel>(
+ builder: (
+ BuildContext context,
+ Widget child,
+ AccessibilitySettingsModel model,
+ ) =>
+ LayoutBuilder(
+ builder: (BuildContext context, BoxConstraints constraints) =>
+ Material(
+ child: _buildAccessibilitySettingPage(
+ // TODO: Replace the scale value with a proper solution.
+ constraints.maxHeight > 360.0 ? 1.0 : 0.5,
+ model))));
+
+ SettingsPage _buildAccessibilitySettingPage(
+ double scale, AccessibilitySettingsModel model) {
+ final screenReaderSetting = SettingsSwitchTile(
+ scale: scale,
+ state: model.screenReaderEnabled.value,
+ text: 'Screen Reader',
+ onSwitch: (value) => model.screenReaderEnabled.value = value,
+ );
+
+ final colorInversionSetting = SettingsSwitchTile(
+ scale: scale,
+ state: model.colorInversionEnabled.value,
+ text: 'Color Inversion',
+ onSwitch: (value) => model.colorInversionEnabled.value = value,
+ );
+
+ final magnificationSetting = SettingsSwitchTile(
+ scale: scale,
+ state: model.magnificationEnabled.value,
+ text: 'Magnification',
+ onSwitch: (value) => model.magnificationEnabled.value = value,
+ );
+
+ final magnificationZoomSetting = SettingsText(
+ scale: scale,
+ text: 'Magnification zoom: ${model.magnificationZoom.value}%');
+
+ return SettingsPage(scale: scale, sections: [
+ SettingsSection(
+ title: 'Accessibility Settings',
+ scale: scale,
+ child: SettingsItemList(
+ items: [
+ screenReaderSetting,
+ colorInversionSetting,
+ magnificationSetting,
+ magnificationZoomSetting
+ ],
+ ))
+ ]);
+ }
+}
diff --git a/bin/accessibility_settings/lib/src/accessibility_settings_model.dart b/bin/accessibility_settings/lib/src/accessibility_settings_model.dart
new file mode 100644
index 0000000..0a78670
--- /dev/null
+++ b/bin/accessibility_settings/lib/src/accessibility_settings_model.dart
@@ -0,0 +1,23 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/foundation.dart';
+import 'package:lib.widgets/model.dart';
+
+class AccessibilitySettingsModel extends Model {
+ final ValueNotifier<bool> screenReaderEnabled = ValueNotifier<bool>(false);
+
+ final ValueNotifier<bool> colorInversionEnabled = ValueNotifier<bool>(false);
+
+ final ValueNotifier<bool> magnificationEnabled = ValueNotifier<bool>(false);
+
+ final ValueNotifier<int> magnificationZoom = ValueNotifier<int>(100);
+
+ AccessibilitySettingsModel() {
+ screenReaderEnabled.addListener(notifyListeners);
+ colorInversionEnabled.addListener(notifyListeners);
+ magnificationEnabled.addListener(notifyListeners);
+ magnificationZoom.addListener(notifyListeners);
+ }
+}
diff --git a/bin/accessibility_settings/meta/accessibility_settings.cmx b/bin/accessibility_settings/meta/accessibility_settings.cmx
new file mode 100644
index 0000000..8198d4a
--- /dev/null
+++ b/bin/accessibility_settings/meta/accessibility_settings.cmx
@@ -0,0 +1,15 @@
+{
+ "program": {
+ "data": "data/accessibility_settings"
+ },
+ "sandbox": {
+ "services": [
+ "fuchsia.fonts.Provider",
+ "fuchsia.modular.Clipboard",
+ "fuchsia.modular.ContextWriter",
+ "fuchsia.sys.Environment",
+ "fuchsia.ui.scenic.Scenic",
+ "fuchsia.ui.viewsv1.ViewManager"
+ ]
+ }
+}
diff --git a/bin/accessibility_settings/pubspec.yaml b/bin/accessibility_settings/pubspec.yaml
new file mode 100644
index 0000000..e14b110
--- /dev/null
+++ b/bin/accessibility_settings/pubspec.yaml
@@ -0,0 +1,5 @@
+# Copyright 2018 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+name: accessibility_settings
\ No newline at end of file
diff --git a/packages/prod/accessibility_settings b/packages/prod/accessibility_settings
new file mode 100644
index 0000000..c129d43
--- /dev/null
+++ b/packages/prod/accessibility_settings
@@ -0,0 +1,5 @@
+{
+ "packages": [
+ "//topaz/bin/accessibility_settings"
+ ]
+}
diff --git a/packages/prod/all b/packages/prod/all
index a0edd90..085daa6 100644
--- a/packages/prod/all
+++ b/packages/prod/all
@@ -1,5 +1,6 @@
{
"imports": [
+ "topaz/packages/prod/accessibility_settings",
"topaz/packages/prod/bluetooth_settings",
"topaz/packages/prod/chromium",
"topaz/packages/prod/device_settings",