OLD | NEW |
---|---|
(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 | |
OLD | NEW |