// 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.ui.activity;

using zx;

/// The Provider protocol offers a subscription interface through
/// which clients can watch for changes in the system's activity state.
[Discoverable]
protocol Provider {
    /// Subscribe to changes in the system's state.
    /// The server will always invoke listener.OnStateChanged at least once with
    /// the initial state, and after that invoke listener.OnStateChanged
    /// whenever the system's state changes.
    WatchState(Listener listener);
};

/// The Listener protocol subscribes to changes in the system's activity
/// state. Clients which care about the activity state of the system are
/// expected to implement this protocol and subscribe via Provider.WatchState.
protocol Listener {
    /// Callback that is invoked whenever the system state changes.
    /// The Listener is expected to acknowledge each call explicitly and will
    /// not receive new state until this acknowledgement is done.
    OnStateChanged(State state, zx.time transition_time) -> ();
};
