blob: 5c0f86dff911f8c1d604b1c5ffbf32a32ab5ad2b [file] [log] [blame]
// Copyright 2019 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.
library fuchsia.accessibility;
enum SettingsManagerStatus {
OK = 0;
ERROR = 1;
};
/// Specifies color correction mode.
enum ColorCorrection {
// No color correction enabled.
DISABLED = 0;
// Color correction enabled for protoanomaly (red-green -- reduced sensitivity to red light).
CORRECT_PROTANOMALY = 1;
// Color correction enabled for deuteranomaly (red-green -- reduced sensitivy to green light).
CORRECT_DEUTERANOMALY = 2;
// Color correction enabled for tritanomaly (blue-yellow -- reduced sensitivity to blude light).
CORRECT_TRITANOMALY = 3;
};
/// Settings is used to represent all the Accessibility Settings along with Matrix
/// needed to apply Color Correction and Color Inversion.
/// This table will be used to transfer Settings information between different services to
/// either modify or get notified about Accessibility Settings.
table Settings {
/// When magnification_enabled == true, user can specify an area of the screen to be magnified.
/// Note that actually magnifying the region requires an addition input (gesture, button, etc.).
// TODO(FIDL-609): Default to false.
1: bool magnification_enabled;
/// Degree of magnification for magnified area.
// TODO(FIDL-609): Default to 1.0.
2: float32 magnification_zoom_factor;
/// When screen_reader_enabled == true, user can specify elements of the UI to be described
/// audibly.
/// Note that reading a particular element requires an additional input.
// TODO(FIDL-609): Default to false.
3: bool screen_reader_enabled;
/// When color_inversion_enabled == true, certain colors are inverted across the entire screen.
/// No additional user input is required for the inversion to take place once enabled.
/// Colors will continue to be inverted until color_inversion_enabled is set to false.
// TODO(FIDL-609): Default to false.
4: bool color_inversion_enabled;
/// When color_correction is set to DISABLED, colors are displayed normally.
/// When color_correction has a different value, colors are modified to correct for the specified
/// type of color-blindness.
/// No additional user input is required for correction to take place once enabled.
/// Correction will continue to occur until color_correction is set to DISABLED.
// TODO(FIDL-609), TODO(FIDL-486): Default to ColorCorrection.DISABLED.
5: ColorCorrection color_correction;
/// 3x3 Matrix in row-major form which will be used by the SettingsManager
/// client for applying Color Correction and Color Inversion. Display
/// adapter expects a 3x3 row major matrix and A11y manager stores the
/// matrix in the same format.
/// Color Adjustment matrix is used to modify onscreen colors for either
/// of Deuteranomaly, Protanomaly and Tritanomaly or it can be used for
/// performing Color Inversion.
6: array<float32>:9 color_adjustment_matrix;
};
/// SettingsManager will be implemented by Accessibility Manager.
/// The accessibility settings manager is an interface that allows other services to:
/// 1. register as a settings provider. In return, SettingsManager will provide an interface
/// to modify individual settings.
/// 2. register themselves to get notified whenever there is a change in Settings.
/// Ideally there should be just 1 Settings Provider and there can be multiple watchers.
/// "Settings Service" will be settings Provider for Accessibility. There could be multiple
/// settings watchers like Root Presenter, Flutter, Chrome, etc.
[Discoverable]
protocol SettingsManager {
// Register Accessibility settings provider to make modification to accessibility settings.
RegisterSettingProvider(request<SettingsProvider> settings_provider_request);
// Registers a watcher to observe changes in accessibility settings.
// When a watcher is registered by calling Watch(), SettingsManager will send all the
// Settings as part of registration.
Watch(SettingsWatcher watcher);
};
/// Interface to update Accessibility Settings. Various Accessibility Settings can be
/// modified individually.
protocol SettingsProvider {
// Enables or disables magnification depending on |magnification_enabled|.
// When |magnification_enabled| is different from the existing setting,
// the zoom factor is reset to 1.0.
SetMagnificationEnabled(bool magnification_enabled)
-> (SettingsManagerStatus status);
// Sets value of zoom factor, provided that magnification is enabled.
// Zoom factor must be > 1.0.
// Returns ERROR if zoom is disabled or if magnification_zoom_factor < 1.0.
SetMagnificationZoomFactor(float32 magnification_zoom_factor)
-> (SettingsManagerStatus status);
// Sets value of screen_reader_enabled, and returns OK.
SetScreenReaderEnabled(bool screen_reader_enabled)
-> (SettingsManagerStatus status);
// Sets value of color_inversion_enabled, and returns OK.
SetColorInversionEnabled(bool color_inversion_enabled)
-> (SettingsManagerStatus status);
// Sets value of color_correction, and returns OK.
SetColorCorrection(ColorCorrection color_correction)
-> (SettingsManagerStatus status);
};
/// SettingsWatcher is the client side interface that Settings Manager can
/// use to notify clients whenever Accessibility Settings change.
protocol SettingsWatcher {
// Called when accessibility settings elections change.
OnSettingsChange(Settings accessibility_settings);
};