Chromium Code Reviews| 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 |