| // 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. |
| |
| #ifndef SRC_SYS_ACTIVITY_ACTIVITY_TRACKER_CONNECTION_H_ |
| #define SRC_SYS_ACTIVITY_ACTIVITY_TRACKER_CONNECTION_H_ |
| |
| #include <fuchsia/ui/activity/cpp/fidl.h> |
| #include <inttypes.h> |
| #include <lib/fidl/cpp/binding.h> |
| #include <lib/zx/time.h> |
| #include <zircon/types.h> |
| |
| #include <set> |
| |
| #include "src/lib/fxl/macros.h" |
| #include "src/sys/activity/common.h" |
| #include "src/sys/activity/state_machine_driver.h" |
| |
| namespace activity { |
| |
| // ActivityTrackerConnection is the server-side implementation of the |
| // activity service's Tracker FIDL interface. |
| // |
| // One instance of ActivityTrackerConnection is created to manage the |
| // connection with a single client. |
| class ActivityTrackerConnection : public fuchsia::ui::activity::Tracker { |
| public: |
| ActivityTrackerConnection(StateMachineDriver* state_machine_driver, |
| async_dispatcher_t* dispatcher, |
| fidl::InterfaceRequest<fuchsia::ui::activity::Tracker> request); |
| ~ActivityTrackerConnection(); |
| |
| // Cleans up any resources owned by the instance, including terminating all ongoing activities. |
| void Stop(); |
| |
| void set_error_handler(fit::function<void(zx_status_t)> callback) { |
| binding_.set_error_handler(std::move(callback)); |
| } |
| |
| // fuchsia::ui::activity::Tracker API |
| virtual void ReportDiscreteActivity(fuchsia::ui::activity::DiscreteActivity activity, |
| zx_time_t time, ReportDiscreteActivityCallback callback); |
| virtual void StartOngoingActivity(OngoingActivityId id, |
| fuchsia::ui::activity::OngoingActivity activity, zx_time_t time, |
| StartOngoingActivityCallback callback); |
| virtual void EndOngoingActivity(OngoingActivityId id, zx_time_t time, |
| EndOngoingActivityCallback callback); |
| |
| private: |
| zx::time last_activity_time_; |
| |
| StateMachineDriver* const state_machine_driver_; |
| |
| async_dispatcher_t* const dispatcher_; |
| |
| std::set<OngoingActivityId> ongoing_activities_; |
| |
| fidl::Binding<fuchsia::ui::activity::Tracker> binding_; |
| |
| FXL_DISALLOW_COPY_ASSIGN_AND_MOVE(ActivityTrackerConnection); |
| }; |
| |
| } // namespace activity |
| |
| #endif // SRC_SYS_ACTIVITY_ACTIVITY_TRACKER_CONNECTION_H_ |