117 lines
3.9 KiB
Java
117 lines
3.9 KiB
Java
package androidx.media;
|
|
|
|
import android.content.Context;
|
|
import android.media.session.MediaSessionManager;
|
|
import android.os.Build;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.media.MediaSessionManagerImplApi28;
|
|
import androidx.media.MediaSessionManagerImplBase;
|
|
public final class MediaSessionManager {
|
|
public static final boolean DEBUG = Log.isLoggable("MediaSessionManager", 3);
|
|
public static final String TAG = "MediaSessionManager";
|
|
private static final Object sLock = new Object();
|
|
private static volatile MediaSessionManager sSessionManager;
|
|
public MediaSessionManagerImpl mImpl;
|
|
|
|
public interface MediaSessionManagerImpl {
|
|
Context getContext();
|
|
|
|
boolean isTrustedForMediaControl(RemoteUserInfoImpl remoteUserInfoImpl);
|
|
}
|
|
|
|
public static final class RemoteUserInfo {
|
|
public static final String LEGACY_CONTROLLER = "android.media.session.MediaController";
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static final int UNKNOWN_PID = -1;
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static final int UNKNOWN_UID = -1;
|
|
public RemoteUserInfoImpl mImpl;
|
|
|
|
@RequiresApi(28)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public RemoteUserInfo(MediaSessionManager.RemoteUserInfo remoteUserInfo) {
|
|
this.mImpl = new MediaSessionManagerImplApi28.RemoteUserInfoImplApi28(remoteUserInfo);
|
|
}
|
|
|
|
public RemoteUserInfo(@NonNull String str, int i, int i2) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
this.mImpl = new MediaSessionManagerImplApi28.RemoteUserInfoImplApi28(str, i, i2);
|
|
} else {
|
|
this.mImpl = new MediaSessionManagerImplBase.RemoteUserInfoImplBase(str, i, i2);
|
|
}
|
|
}
|
|
|
|
public boolean equals(@Nullable Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (!(obj instanceof RemoteUserInfo)) {
|
|
return false;
|
|
}
|
|
return this.mImpl.equals(((RemoteUserInfo) obj).mImpl);
|
|
}
|
|
|
|
@NonNull
|
|
public String getPackageName() {
|
|
return this.mImpl.getPackageName();
|
|
}
|
|
|
|
public int getPid() {
|
|
return this.mImpl.getPid();
|
|
}
|
|
|
|
public int getUid() {
|
|
return this.mImpl.getUid();
|
|
}
|
|
|
|
public int hashCode() {
|
|
return this.mImpl.hashCode();
|
|
}
|
|
}
|
|
|
|
public interface RemoteUserInfoImpl {
|
|
String getPackageName();
|
|
|
|
int getPid();
|
|
|
|
int getUid();
|
|
}
|
|
|
|
private MediaSessionManager(Context context) {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
this.mImpl = new MediaSessionManagerImplApi28(context);
|
|
} else {
|
|
this.mImpl = new MediaSessionManagerImplApi21(context);
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static MediaSessionManager getSessionManager(@NonNull Context context) {
|
|
MediaSessionManager mediaSessionManager;
|
|
if (context != null) {
|
|
synchronized (sLock) {
|
|
if (sSessionManager == null) {
|
|
sSessionManager = new MediaSessionManager(context.getApplicationContext());
|
|
}
|
|
mediaSessionManager = sSessionManager;
|
|
}
|
|
return mediaSessionManager;
|
|
}
|
|
throw new IllegalArgumentException("context cannot be null");
|
|
}
|
|
|
|
public Context getContext() {
|
|
return this.mImpl.getContext();
|
|
}
|
|
|
|
public boolean isTrustedForMediaControl(@NonNull RemoteUserInfo remoteUserInfo) {
|
|
if (remoteUserInfo != null) {
|
|
return this.mImpl.isTrustedForMediaControl(remoteUserInfo.mImpl);
|
|
}
|
|
throw new IllegalArgumentException("userInfo should not be null");
|
|
}
|
|
}
|