blob: 629c9f86454c3792ce283376ef314f4589d605f6 [file] [log] [blame]
// Copyright 2019 The Chromium 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 CHROMEOS_COMPONENTS_CAMERA_APP_UI_CAMERA_APP_HELPER_IMPL_H_
#define CHROMEOS_COMPONENTS_CAMERA_APP_UI_CAMERA_APP_HELPER_IMPL_H_
#include <vector>
#include "ash/public/cpp/screen_backlight.h"
#include "ash/public/cpp/tablet_mode_observer.h"
#include "base/macros.h"
#include "chromeos/components/camera_app_ui/camera_app_helper.mojom.h"
#include "chromeos/components/camera_app_ui/camera_app_ui.h"
#include "chromeos/components/camera_app_ui/camera_app_window_state_controller.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/aura/window.h"
#include "ui/display/display_observer.h"
#include "ui/display/screen.h"
namespace chromeos_camera {
class CameraAppHelperImpl : public ash::TabletModeObserver,
public ash::ScreenBacklightObserver,
public display::DisplayObserver,
public mojom::CameraAppHelper {
public:
using CameraResultCallback =
base::RepeatingCallback<void(uint32_t,
arc::mojom::CameraIntentAction,
const std::vector<uint8_t>&,
HandleCameraResultCallback)>;
using SendBroadcastCallback =
base::RepeatingCallback<void(bool, std::string)>;
using TabletModeMonitor = mojom::TabletModeMonitor;
using ScreenStateMonitor = mojom::ScreenStateMonitor;
using ExternalScreenMonitor = mojom::ExternalScreenMonitor;
using CameraUsageOwnershipMonitor = mojom::CameraUsageOwnershipMonitor;
CameraAppHelperImpl(chromeos::CameraAppUI* camera_app_ui,
CameraResultCallback camera_result_callback,
SendBroadcastCallback send_broadcast_callback,
aura::Window* window);
~CameraAppHelperImpl() override;
void Bind(mojo::PendingReceiver<mojom::CameraAppHelper> receiver);
// mojom::CameraAppHelper implementations.
void HandleCameraResult(uint32_t intent_id,
arc::mojom::CameraIntentAction action,
const std::vector<uint8_t>& data,
HandleCameraResultCallback callback) override;
void IsTabletMode(IsTabletModeCallback callback) override;
void StartPerfEventTrace(const std::string& event) override;
void StopPerfEventTrace(const std::string& event) override;
void SetTabletMonitor(mojo::PendingRemote<TabletModeMonitor> monitor,
SetTabletMonitorCallback callback) override;
void SetScreenStateMonitor(mojo::PendingRemote<ScreenStateMonitor> monitor,
SetScreenStateMonitorCallback callback) override;
void IsMetricsAndCrashReportingEnabled(
IsMetricsAndCrashReportingEnabledCallback callback) override;
void SetExternalScreenMonitor(
mojo::PendingRemote<ExternalScreenMonitor> monitor,
SetExternalScreenMonitorCallback callback) override;
void OpenFileInGallery(const std::string& name) override;
void OpenFeedbackDialog(const std::string& placeholder) override;
void SetCameraUsageMonitor(
mojo::PendingRemote<CameraUsageOwnershipMonitor> usage_monitor,
SetCameraUsageMonitorCallback callback) override;
void GetWindowStateController(
GetWindowStateControllerCallback callback) override;
void SendNewCaptureBroadcast(bool is_video, const std::string& name) override;
void MonitorFileDeletion(const std::string& name,
MonitorFileDeletionCallback callback) override;
private:
void CheckExternalScreenState();
// ash::TabletModeObserver overrides;
void OnTabletModeStarted() override;
void OnTabletModeEnded() override;
// ash::ScreenBacklightObserver overrides;
void OnScreenBacklightStateChanged(
ash::ScreenBacklightState screen_backlight_state) override;
// display::DisplayObserver overrides;
void OnDisplayAdded(const display::Display& new_display) override;
void OnDisplayRemoved(const display::Display& old_display) override;
// For platform app, we set |camera_app_ui_| to nullptr and should not use
// it. For SWA, since CameraAppUI owns CameraAppHelperImpl, it is safe to
// assume that the |camera_app_ui_| is always valid during the whole lifetime
// of CameraAppHelperImpl.
chromeos::CameraAppUI* camera_app_ui_;
CameraResultCallback camera_result_callback_;
SendBroadcastCallback send_broadcast_callback_;
bool has_external_screen_;
absl::optional<uint32_t> pending_intent_id_;
aura::Window* window_;
mojo::Remote<TabletModeMonitor> tablet_mode_monitor_;
mojo::Remote<ScreenStateMonitor> screen_state_monitor_;
mojo::Remote<ExternalScreenMonitor> external_screen_monitor_;
mojo::Receiver<chromeos_camera::mojom::CameraAppHelper> receiver_{this};
std::unique_ptr<chromeos::CameraAppWindowStateController>
window_state_controller_;
DISALLOW_COPY_AND_ASSIGN(CameraAppHelperImpl);
};
} // namespace chromeos_camera
#endif // CHROMEOS_COMPONENTS_CAMERA_APP_UI_CAMERA_APP_HELPER_IMPL_H_