| // 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 CHROME_BROWSER_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_ |
| #define CHROME_BROWSER_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_ |
| |
| #include "base/android/jni_weak_ref.h" |
| #include "base/android/scoped_java_ref.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/timer/timer.h" |
| #include "content/public/browser/overlay_window.h" |
| #include "third_party/blink/public/mojom/mediasession/media_session.mojom.h" |
| #include "ui/android/window_android.h" |
| #include "ui/android/window_android_observer.h" |
| #include "ui/gfx/geometry/size.h" |
| |
| namespace cc { |
| class SurfaceLayer; |
| } // namespace cc |
| |
| namespace thin_webview { |
| namespace android { |
| class CompositorView; |
| } // namespace android |
| } // namespace thin_webview |
| |
| class OverlayWindowAndroid : public content::VideoOverlayWindow, |
| public ui::WindowAndroidObserver { |
| public: |
| explicit OverlayWindowAndroid( |
| content::VideoPictureInPictureWindowController* controller); |
| ~OverlayWindowAndroid() override; |
| |
| void OnActivityStart( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& obj, |
| const base::android::JavaParamRef<jobject>& jwindow_android); |
| void Destroy(JNIEnv* env); |
| void TogglePlayPause(JNIEnv* env, bool toggleOn); |
| void NextTrack(JNIEnv* env); |
| void PreviousTrack(JNIEnv* env); |
| void ToggleMicrophone(JNIEnv* env, bool toggleOn); |
| void ToggleCamera(JNIEnv* env, bool toggleOn); |
| void HangUp(JNIEnv* env); |
| void CompositorViewCreated( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& compositor_view); |
| void OnViewSizeChanged(JNIEnv* env, jint width, jint height); |
| void OnBackToTab(JNIEnv* env); |
| |
| // ui::WindowAndroidObserver implementation. |
| void OnCompositingDidCommit() override {} |
| void OnRootWindowVisibilityChanged(bool visible) override {} |
| void OnAttachCompositor() override; |
| void OnDetachCompositor() override; |
| void OnAnimate(base::TimeTicks frame_begin_time) override {} |
| void OnActivityStopped() override; |
| void OnActivityStarted() override {} |
| |
| // OverlayWindow implementation. |
| bool IsActive() override; |
| void Close() override; |
| void ShowInactive() override {} |
| void Hide() override; |
| bool IsVisible() override; |
| bool IsAlwaysOnTop() override; |
| gfx::Rect GetBounds() override; |
| void UpdateNaturalSize(const gfx::Size& natural_size) override; |
| |
| // VideoOverlayWindow implementation |
| void SetPlaybackState(PlaybackState playback_state) override; |
| void SetPlayPauseButtonVisibility(bool is_visible) override; |
| void SetSkipAdButtonVisibility(bool is_visible) override {} |
| void SetNextTrackButtonVisibility(bool is_visible) override; |
| void SetPreviousTrackButtonVisibility(bool is_visible) override; |
| void SetMicrophoneMuted(bool muted) override; |
| void SetCameraState(bool turned_on) override; |
| void SetToggleMicrophoneButtonVisibility(bool is_visible) override; |
| void SetToggleCameraButtonVisibility(bool is_visible) override; |
| void SetHangUpButtonVisibility(bool is_visible) override; |
| void SetSurfaceId(const viz::SurfaceId& surface_id) override; |
| cc::Layer* GetLayerForTesting() override; |
| |
| private: |
| // Notify PictureInPictureActivity that visible actions have changed. |
| void MaybeNotifyVisibleActionsChanged(); |
| |
| // Maybe update visible actions. Returns true if update happened. |
| void MaybeUpdateVisibleAction( |
| const media_session::mojom::MediaSessionAction& action, |
| bool is_visible); |
| void CloseInternal(); |
| |
| // A weak reference to Java PictureInPictureActivity object. |
| JavaObjectWeakGlobalRef java_ref_; |
| raw_ptr<ui::WindowAndroid> window_android_; |
| raw_ptr<thin_webview::android::CompositorView> compositor_view_; |
| scoped_refptr<cc::SurfaceLayer> surface_layer_; |
| gfx::Rect bounds_; |
| gfx::Size video_size_; |
| |
| PlaybackState playback_state_ = PlaybackState::kEndOfVideo; |
| std::unordered_set<int> visible_actions_; |
| |
| bool microphone_muted_ = false; |
| bool camera_on_ = false; |
| |
| std::unique_ptr<base::OneShotTimer> update_action_timer_; |
| |
| raw_ptr<content::VideoPictureInPictureWindowController> controller_; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_ |