1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
// Copyright 2019 The Chromium Authors
// 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 "base/unguessable_token.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::slim {
class SurfaceLayer;
}
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;
static OverlayWindowAndroid* OnActivityStart(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& token,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& jwindow_android);
void DestroyStartedByJava(JNIEnv* env);
void TogglePlayPause(JNIEnv* env, bool toggleOn);
void NextTrack(JNIEnv* env);
void PreviousTrack(JNIEnv* env);
void NextSlide(JNIEnv* env);
void PreviousSlide(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 OnRootWindowVisibilityChanged(bool visible) override {}
void OnAttachCompositor() override;
void OnDetachCompositor() override;
void OnAnimate(base::TimeTicks frame_begin_time) override {}
void OnActivityStopped() override;
void OnActivityStarted() override {}
// VideoOverlayWindow implementation.
bool IsActive() const override;
void Close() override;
void ShowInactive() override {}
void Hide() override;
bool IsVisible() const override;
gfx::Rect GetBounds() override;
void UpdateNaturalSize(const gfx::Size& natural_size) override;
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 SetNextSlideButtonVisibility(bool is_visible) override;
void SetPreviousSlideButtonVisibility(bool is_visible) override;
void SetMediaPosition(const media_session::MediaPosition&) override {}
void SetSourceTitle(const std::u16string& source_title) override {}
void SetFaviconImages(
const std::vector<media_session::MediaImage>& images) override {}
void SetSurfaceId(const viz::SurfaceId& surface_id) override;
void Initialize(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& jwindow_android);
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();
base::UnguessableToken token_{base::UnguessableToken::Create()};
JavaObjectWeakGlobalRef java_ref_;
raw_ptr<ui::WindowAndroid> window_android_;
raw_ptr<thin_webview::android::CompositorView> compositor_view_;
scoped_refptr<cc::slim::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_
|