110 lines
4.9 KiB
Java
110 lines
4.9 KiB
Java
package androidx.media;
|
|
|
|
import android.content.ComponentName;
|
|
import android.content.ContentResolver;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.provider.Settings;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.core.util.ObjectsCompat;
|
|
import androidx.media.MediaSessionManager;
|
|
import c.d.b.a.a;
|
|
public class MediaSessionManagerImplBase implements MediaSessionManager.MediaSessionManagerImpl {
|
|
private static final boolean DEBUG = MediaSessionManager.DEBUG;
|
|
private static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
|
|
private static final String PERMISSION_MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
|
|
private static final String PERMISSION_STATUS_BAR_SERVICE = "android.permission.STATUS_BAR_SERVICE";
|
|
private static final String TAG = "MediaSessionManager";
|
|
public ContentResolver mContentResolver;
|
|
public Context mContext;
|
|
|
|
public static class RemoteUserInfoImplBase implements MediaSessionManager.RemoteUserInfoImpl {
|
|
private String mPackageName;
|
|
private int mPid;
|
|
private int mUid;
|
|
|
|
public RemoteUserInfoImplBase(String str, int i, int i2) {
|
|
this.mPackageName = str;
|
|
this.mPid = i;
|
|
this.mUid = i2;
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (!(obj instanceof RemoteUserInfoImplBase)) {
|
|
return false;
|
|
}
|
|
RemoteUserInfoImplBase remoteUserInfoImplBase = (RemoteUserInfoImplBase) obj;
|
|
return (this.mPid < 0 || remoteUserInfoImplBase.mPid < 0) ? TextUtils.equals(this.mPackageName, remoteUserInfoImplBase.mPackageName) && this.mUid == remoteUserInfoImplBase.mUid : TextUtils.equals(this.mPackageName, remoteUserInfoImplBase.mPackageName) && this.mPid == remoteUserInfoImplBase.mPid && this.mUid == remoteUserInfoImplBase.mUid;
|
|
}
|
|
|
|
@Override // androidx.media.MediaSessionManager.RemoteUserInfoImpl
|
|
public String getPackageName() {
|
|
return this.mPackageName;
|
|
}
|
|
|
|
@Override // androidx.media.MediaSessionManager.RemoteUserInfoImpl
|
|
public int getPid() {
|
|
return this.mPid;
|
|
}
|
|
|
|
@Override // androidx.media.MediaSessionManager.RemoteUserInfoImpl
|
|
public int getUid() {
|
|
return this.mUid;
|
|
}
|
|
|
|
public int hashCode() {
|
|
return ObjectsCompat.hash(this.mPackageName, Integer.valueOf(this.mUid));
|
|
}
|
|
}
|
|
|
|
public MediaSessionManagerImplBase(Context context) {
|
|
this.mContext = context;
|
|
this.mContentResolver = context.getContentResolver();
|
|
}
|
|
|
|
private boolean isPermissionGranted(MediaSessionManager.RemoteUserInfoImpl remoteUserInfoImpl, String str) {
|
|
return remoteUserInfoImpl.getPid() < 0 ? this.mContext.getPackageManager().checkPermission(str, remoteUserInfoImpl.getPackageName()) == 0 : this.mContext.checkPermission(str, remoteUserInfoImpl.getPid(), remoteUserInfoImpl.getUid()) == 0;
|
|
}
|
|
|
|
@Override // androidx.media.MediaSessionManager.MediaSessionManagerImpl
|
|
public Context getContext() {
|
|
return this.mContext;
|
|
}
|
|
|
|
public boolean isEnabledNotificationListener(@NonNull MediaSessionManager.RemoteUserInfoImpl remoteUserInfoImpl) {
|
|
String[] split;
|
|
String string = Settings.Secure.getString(this.mContentResolver, "enabled_notification_listeners");
|
|
if (string != null) {
|
|
for (String str : string.split(":")) {
|
|
ComponentName unflattenFromString = ComponentName.unflattenFromString(str);
|
|
if (unflattenFromString != null && unflattenFromString.getPackageName().equals(remoteUserInfoImpl.getPackageName())) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override // androidx.media.MediaSessionManager.MediaSessionManagerImpl
|
|
public boolean isTrustedForMediaControl(@NonNull MediaSessionManager.RemoteUserInfoImpl remoteUserInfoImpl) {
|
|
try {
|
|
if (this.mContext.getPackageManager().getApplicationInfo(remoteUserInfoImpl.getPackageName(), 0) == null) {
|
|
return false;
|
|
}
|
|
return isPermissionGranted(remoteUserInfoImpl, "android.permission.STATUS_BAR_SERVICE") || isPermissionGranted(remoteUserInfoImpl, "android.permission.MEDIA_CONTENT_CONTROL") || remoteUserInfoImpl.getUid() == 1000 || isEnabledNotificationListener(remoteUserInfoImpl);
|
|
} catch (PackageManager.NameNotFoundException unused) {
|
|
if (DEBUG) {
|
|
StringBuilder L = a.L("Package ");
|
|
L.append(remoteUserInfoImpl.getPackageName());
|
|
L.append(" doesn't exist");
|
|
Log.d("MediaSessionManager", L.toString());
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|