blob: 6a02a2e3928d40cdbbecee5e4a2c2028064fee36 [file] [log] [blame]
// Copyright 2020 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.gesture;
// Evolution. This listener protocol is expected to be exclusively consumed by
// clients in a single out-of-tree repository, so the evolution burden (e.g.,
// adding enums or methods) is expected to be minimal.
/// Maximum size of a returned utterance.
const uint64 MAX_UTTERANCE_SIZE = 16384;
/// Gestures types that accessibility offers to a UI component for listening.
enum Type {
/// A three-finger swipe up.
THREE_FINGER_SWIPE_UP = 1;
/// A three-finger swipe down.
THREE_FINGER_SWIPE_DOWN = 2;
/// A three-finger swipe right.
THREE_FINGER_SWIPE_RIGHT = 3;
/// A three-finger swipe left.
THREE_FINGER_SWIPE_LEFT = 4;
};
/// An interface to listen for accessibility gestures.
///
/// Accessibility services offer a set of gestures defined in Type above, which
/// can be targeted by a system UI.
/// Generally, in a touch screen system, there is a set of system-wide gestures
/// which can be performed anywhere, triggering an action that changes some
/// state of the UI.
/// For example, some can offer a way to close an application and go back to
/// their home screen, while others can offer a way to bring a list of running
/// applications that users can choose from.
/// Because those gestures can conflict with assistive technology gestures,
/// accessibility services offer some alternative ones which can be bound to the
/// UI actions.
protocol Listener {
/// When accessibility services detect a gesture, the listener is informed
/// of which gesture was performed. The listener has the chance to handle
/// the gesture, setting the result in |handled|. In addition, an
/// |utterance| is also passed back to accessibility, with a custom message
/// to be spoken. The message is expected to be localized, matching the
/// same locale that the UI component is displaying its content.
/// If the utterance is empty, it is assumed that no spoken output is
/// necessary to describe the result of the action.
OnGesture(Type gesture_type) -> (bool handled, string:MAX_UTTERANCE_SIZE? utterance);
};
/// An interface for registering a listener of accessibility gestures.
[Discoverable]
protocol ListenerRegistry {
/// A UI registers itself to start listening for accessibility gestures
/// through `listener`.
/// Only one listener can be registered at a time.
/// This registry honors the last Register() call, and a previous listener
/// is closed.
/// In case of any failure, the channel of the listener is closed with an
/// epitaph.
Register(Listener listener) -> ();
};