diff options
4 files changed, 35 insertions, 7 deletions
diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp index b18a22b408f5..1d6f20dd4b27 100644 --- a/apex/media/framework/Android.bp +++ b/apex/media/framework/Android.bp @@ -47,6 +47,7 @@ java_library { static_libs: [ "exoplayer2-extractor", "mediatranscoding_aidl_interface-java", + "modules-annotation-minsdk", "modules-utils-build", ], jarjar_rules: "jarjar_rules.txt", @@ -108,7 +109,7 @@ filegroup { filegroup { name: "mediaparser-srcs", srcs: [ - "java/android/media/MediaParser.java" + "java/android/media/MediaParser.java", ], path: "java", } diff --git a/apex/media/framework/jarjar_rules.txt b/apex/media/framework/jarjar_rules.txt index eb71fddc05cb..91489dcee0a1 100644 --- a/apex/media/framework/jarjar_rules.txt +++ b/apex/media/framework/jarjar_rules.txt @@ -1,2 +1,2 @@ -rule com.android.modules.utils.** android.media.internal.utils.@1 +rule com.android.modules.** android.media.internal.@1 rule com.google.android.exoplayer2.** android.media.internal.exo.@1 diff --git a/apex/media/framework/java/android/media/MediaCommunicationManager.java b/apex/media/framework/java/android/media/MediaCommunicationManager.java index 9ec25fe48a2e..f39bcfb267bf 100644 --- a/apex/media/framework/java/android/media/MediaCommunicationManager.java +++ b/apex/media/framework/java/android/media/MediaCommunicationManager.java @@ -27,12 +27,14 @@ import android.annotation.SystemService; import android.content.Context; import android.media.session.MediaSession; import android.media.session.MediaSessionManager; +import android.os.Build; import android.os.RemoteException; import android.os.UserHandle; import android.service.media.MediaBrowserService; import android.util.Log; import com.android.internal.annotations.GuardedBy; +import com.android.modules.annotation.MinSdk; import com.android.modules.utils.build.SdkLevel; import java.util.Collections; @@ -45,6 +47,7 @@ import java.util.concurrent.Executor; * Provides support for interacting with {@link android.media.MediaSession2 MediaSession2s} * that applications have published to express their ongoing media playback state. */ +@MinSdk(Build.VERSION_CODES.S) @SystemService(Context.MEDIA_COMMUNICATION_SERVICE) public class MediaCommunicationManager { private static final String TAG = "MediaCommunicationManager"; diff --git a/apex/media/framework/java/android/media/MediaSession2.java b/apex/media/framework/java/android/media/MediaSession2.java index 6397ba3996f3..7697359e7caf 100644 --- a/apex/media/framework/java/android/media/MediaSession2.java +++ b/apex/media/framework/java/android/media/MediaSession2.java @@ -32,6 +32,7 @@ import android.annotation.Nullable; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.media.session.MediaSessionManager; import android.media.session.MediaSessionManager.RemoteUserInfo; import android.os.BadParcelableException; import android.os.Bundle; @@ -43,6 +44,8 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; +import com.android.modules.utils.build.SdkLevel; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -86,6 +89,7 @@ public class MediaSession2 implements AutoCloseable { private final String mSessionId; private final PendingIntent mSessionActivity; private final Session2Token mSessionToken; + private final MediaSessionManager mMediaSessionManager; private final MediaCommunicationManager mCommunicationManager; private final Handler mResultHandler; @@ -114,7 +118,13 @@ public class MediaSession2 implements AutoCloseable { mSessionStub = new Session2Link(this); mSessionToken = new Session2Token(Process.myUid(), TYPE_SESSION, context.getPackageName(), mSessionStub, tokenExtras); - mCommunicationManager = mContext.getSystemService(MediaCommunicationManager.class); + if (SdkLevel.isAtLeastS()) { + mCommunicationManager = mContext.getSystemService(MediaCommunicationManager.class); + mMediaSessionManager = null; + } else { + mMediaSessionManager = mContext.getSystemService(MediaSessionManager.class); + mCommunicationManager = null; + } // NOTE: mResultHandler uses main looper, so this MUST NOT be blocked. mResultHandler = new Handler(context.getMainLooper()); mClosed = false; @@ -315,6 +325,14 @@ public class MediaSession2 implements AutoCloseable { return mCallback; } + boolean isTrustedForMediaControl(RemoteUserInfo remoteUserInfo) { + if (SdkLevel.isAtLeastS()) { + return mCommunicationManager.isTrustedForMediaControl(remoteUserInfo); + } else { + return mMediaSessionManager.isTrustedForMediaControl(remoteUserInfo); + } + } + void setForegroundServiceEventCallback(ForegroundServiceEventCallback callback) { synchronized (mLock) { if (mForegroundServiceEventCallback == callback) { @@ -350,7 +368,7 @@ public class MediaSession2 implements AutoCloseable { final ControllerInfo controllerInfo = new ControllerInfo( remoteUserInfo, - mCommunicationManager.isTrustedForMediaControl(remoteUserInfo), + isTrustedForMediaControl(remoteUserInfo), controller, connectionHints); mCallbackExecutor.execute(() -> { @@ -606,9 +624,15 @@ public class MediaSession2 implements AutoCloseable { // Notify framework about the newly create session after the constructor is finished. // Otherwise, framework may access the session before the initialization is finished. try { - MediaCommunicationManager manager = - mContext.getSystemService(MediaCommunicationManager.class); - manager.notifySession2Created(session2.getToken()); + if (SdkLevel.isAtLeastS()) { + MediaCommunicationManager manager = + mContext.getSystemService(MediaCommunicationManager.class); + manager.notifySession2Created(session2.getToken()); + } else { + MediaSessionManager manager = + mContext.getSystemService(MediaSessionManager.class); + manager.notifySession2Created(session2.getToken()); + } } catch (Exception e) { session2.close(); throw e; |