// 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;

alias OngoingActivityId = uint32;

/// The Tracker protocol collects evidence of user activity and uses this
/// evidence to set the system's activity state.
@available(deprecated=10, removed=11)
closed protocol Tracker {
    /// Reports a discrete activity such as a keystroke.
    /// `event_time` is in nanoseconds in the `CLOCK_MONOTONIC` time base.
    @available(
            deprecated=9,
            removed=10,
            note="Instead, use `fuchsia.input.interaction.observation.Aggregator`")
    strict ReportDiscreteActivity(struct {
        activity DiscreteActivity;
        event_time zx.Time;
    }) -> ();

    /// Reports the start of an ongoing activity such as media playback.
    /// `activity_id` is a unique identifier which is expected to be later
    /// passed to EndOngoingActivity.
    /// `start_time` is in nanoseconds in the `CLOCK_MONOTONIC` time base.
    @available(
            deprecated=9,
            removed=10,
            note="Instead, use `fuchsia.input.interaction.observation.Aggregator`")
    strict StartOngoingActivity(struct {
        activity_id OngoingActivityId;
        activity OngoingActivity;
        start_time zx.Time;
    }) -> ();

    /// Reports the end of an ongoing activity such as media playback.
    /// `activity_id` is the nonce which was passed into StartOngoingActivity.
    /// `end_time` is in nanoseconds in the `CLOCK_MONOTONIC` time base.
    @available(
            deprecated=9,
            removed=10,
            note="Instead, use `fuchsia.input.interaction.observation.Aggregator`")
    strict EndOngoingActivity(struct {
        activity_id OngoingActivityId;
        end_time zx.Time;
    }) -> ();
};
