blob: a27b08777c0cb21feeea720ae10c5b843fa50f38 [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;
using fuchsia.ui.gfx;
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.).
1: bool magnification_enabled = false;
// Degree of magnification for magnified area.
2: float32 magnification_zoom_factor = 1.0;
// 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.
3: bool screen_reader_enabled = false;
// 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.
4: bool color_inversion_enabled = false;
// 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.
5: ColorCorrection color_correction = DISABLED;
// 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.
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);
};