Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0676346e authored by Hyundo Moon's avatar Hyundo Moon Committed by Automerger Merge Worker
Browse files

Merge "Do not use MediaCommunicationManager below Android S" into sc-dev am: b7386552

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13735234

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I4f7fd42b199021794f07ca894413899dd245a833
parents d1007403 b7386552
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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",
}
+1 −1
Original line number Diff line number Diff line
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
+3 −0
Original line number Diff line number Diff line
@@ -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";
+29 −5
Original line number Diff line number Diff line
@@ -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);
        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 {
                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;