Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: content/browser/media/session/media_session_delegate_android.cc

Issue 2439483003: Link MediaSessionTabHelper with native MediaSession [CL is going to be split] (Closed)
Patch Set: Super rough, please give some initial feedbacks Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/media/session/media_session_delegate_android.h"
6
7 #include "base/android/context_utils.h"
8 #include "base/android/jni_android.h"
9 #include "content/common/android/media_metadata_android.h"
10 #include "content/browser/media/session/media_session.h"
11 #include "jni/MediaSessionDelegate_jni.h"
12
13 using base::android::JavaParamRef;
14
15 namespace content {
16
17 // static
18 bool MediaSessionDelegateAndroid::Register(JNIEnv* env) {
19 return RegisterNativesImpl(env);
20 }
21
22 // static
23 void MediaSessionDelegateAndroid::CreateAndRegister(
24 JNIEnv* env,
25 MediaSession* session,
26 const base::android::JavaParamRef<jobject>& j_delegate) {
27 MediaSessionDelegateAndroid* delegate =
28 new MediaSessionDelegateAndroid(session, j_delegate);
29 Java_MediaSessionDelegate_mediaSessionConnected(
30 env, j_delegate,
31 reinterpret_cast<intptr_t>(delegate));
32 }
33
34 MediaSessionDelegateAndroid::MediaSessionDelegateAndroid(
35 MediaSession* session,
36 const base::android::JavaParamRef<jobject>& j_delegate)
37 : MediaSessionObserver(session),
38 j_delegate_(j_delegate) {
39 LOG(INFO) << "MediaSessionDelegateAndroid()";
40 session->PassObserverOwnership(
boliu 2016/10/19 20:39:40 do this in CreateAndRegister, there is no bare poi
Zhiqiang Zhang (Slow) 2016/10/20 16:22:32 Done.
41 std::unique_ptr<MediaSessionDelegateAndroid>(this));
42 }
43
44 MediaSessionDelegateAndroid::~MediaSessionDelegateAndroid() {
45 MediaSessionDisconnected();
46 j_delegate_.Reset();
47 }
48
49 void MediaSessionDelegateAndroid::MediaSessionDisconnected() {
50 LOG(INFO) << "MediaSessionDisconnected()";
51 JNIEnv* env = base::android::AttachCurrentThread();
52 DCHECK(env);
53 if (!j_delegate_.is_null()) {
54 Java_MediaSessionDelegate_mediaSessionDisconnected(
55 env, j_delegate_);
56 }
57 }
58
59 void MediaSessionDelegateAndroid::MediaSessionStateChanged(
60 bool is_controllable, bool is_active) {
61 LOG(INFO) << "MediaSessionStateChanged()";
62 JNIEnv* env = base::android::AttachCurrentThread();
63 DCHECK(env);
64 if (!j_delegate_.is_null()) {
65 Java_MediaSessionDelegate_mediaSessionStateChanged(
66 env, j_delegate_,
67 is_controllable,
68 is_active);
69 }
70 }
71
72 void MediaSessionDelegateAndroid::MediaSessionMetadataChanged(
73 const base::Optional<MediaMetadata>& metadata) {
74 JNIEnv* env = base::android::AttachCurrentThread();
75 DCHECK(env);
76 if (!j_delegate_.is_null()) {
77 base::android::ScopedJavaLocalRef<jobject> j_metadata;
78 if (metadata.has_value()) {
79 j_metadata = MediaMetadataAndroid::CreateJavaObject(env, metadata.value()) ;
80 }
81 Java_MediaSessionDelegate_mediaSessionMetadataChanged(
82 env, j_delegate_, j_metadata);
83 }
84 }
85
86 void MediaSessionDelegateAndroid::ResumeMediaSession(
87 JNIEnv* env, const JavaParamRef<jobject>& obj) {
88 session()->Resume(MediaSession::SuspendType::UI);
89 }
90
91 void MediaSessionDelegateAndroid::SuspendMediaSession(
92 JNIEnv* env, const JavaParamRef<jobject>& obj) {
93 session()->Suspend(MediaSession::SuspendType::UI);
94 }
95
96 void MediaSessionDelegateAndroid::StopMediaSession(
97 JNIEnv* env, const JavaParamRef<jobject>& obj) {
98 session()->Stop(MediaSession::SuspendType::UI);
99 }
100
101 void MediaSessionDelegateAndroid::UnlinkMediaSession(
102 JNIEnv* env, const JavaParamRef<jobject>& obj) {
103 // Will destroy this and send `mediaSessionDisconnected` to Java.
104 session()->RemoveObserver(this);
105 }
106
107 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698