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

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

Issue 1698933004: Make MediaSession a runtime-enabled feature on Desktop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: with flag Created 4 years, 10 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 "jni/MediaSessionDelegate_jni.h"
10
11 namespace content {
12
13 // static
14 bool MediaSessionDelegateAndroid::Register(JNIEnv* env) {
15 return RegisterNativesImpl(env);
16 }
17
18 MediaSessionDelegateAndroid::MediaSessionDelegateAndroid(
19 MediaSession* media_session)
20 : media_session_(media_session) {
21 }
22
23 void MediaSessionDelegateAndroid::Initialize() {
24 JNIEnv* env = base::android::AttachCurrentThread();
25 DCHECK(env);
26 j_media_session_delegate_.Reset(Java_MediaSessionDelegate_create(
27 env,
28 base::android::GetApplicationContext(),
29 reinterpret_cast<intptr_t>(this)));
30 }
31
32 bool MediaSessionDelegateAndroid::RequestAudioFocus(MediaSession::Type type) {
33 JNIEnv* env = base::android::AttachCurrentThread();
34 DCHECK(env);
35 return Java_MediaSessionDelegate_requestAudioFocus(
36 env, j_media_session_delegate_.obj(),
37 type == MediaSession::Type::Transient);
38 }
39
40 void MediaSessionDelegateAndroid::AbandonAudioFocus() {
41 JNIEnv* env = base::android::AttachCurrentThread();
42 DCHECK(env);
43 Java_MediaSessionDelegate_abandonAudioFocus(
44 env, j_media_session_delegate_.obj());
45 }
46
47 void MediaSessionDelegateAndroid::OnSuspend(
48 JNIEnv*, const JavaParamRef<jobject>&, jboolean temporary) {
49 // TODO(mlamouri): this check makes it so that if a MediaSession is paused and
50 // then loses audio focus, it will still stay in the Suspended state.
51 // See https://crbug.com/539998
52 if (!media_session_->IsActive())
53 return;
54
55 if (temporary) {
56 media_session_->Suspend(MediaSession::SuspendType::SYSTEM);
57 } else {
58 media_session_->Stop(MediaSession::SuspendType::SYSTEM);
59 }
60 }
61
62 void MediaSessionDelegateAndroid::OnResume(
63 JNIEnv*, const JavaParamRef<jobject>&) {
64 if (!media_session_->IsReallySuspended())
65 return;
66
67 media_session_->Resume(MediaSession::SuspendType::SYSTEM);
68 }
69
70 void MediaSessionDelegateAndroid::OnSetVolumeMultiplier(
71 JNIEnv*, jobject, jdouble volume_multiplier) {
72 media_session_->SetVolumeMultiplier(volume_multiplier);
73 }
74
75 void MediaSessionDelegateAndroid::RecordSessionDuck(
76 JNIEnv*, const JavaParamRef<jobject>&) {
77 media_session_->RecordSessionDuck();
78 }
79
80 // static
81 scoped_ptr<MediaSessionDelegate> MediaSessionDelegate::Create(
82 MediaSession* media_session) {
83 MediaSessionDelegateAndroid* delegate =
84 new MediaSessionDelegateAndroid(media_session);
85 delegate->Initialize();
86 return scoped_ptr<MediaSessionDelegate>(delegate);
87 }
88
89 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698