Loading services/core/java/com/android/server/AppOpsService.java +24 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server; package com.android.server; import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED; import java.io.File; import java.io.File; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileInputStream; Loading Loading @@ -882,6 +884,11 @@ public class AppOpsService extends IAppOpsService.Stub { @Override @Override public int checkAudioOperation(int code, int usage, int uid, String packageName) { public int checkAudioOperation(int code, int usage, int uid, String packageName) { if (isApplicationSuspended(packageName, uid)) { Log.i(TAG, "Audio disabled for suspended package=" + packageName + " for uid=" + uid); return AppOpsManager.MODE_IGNORED; } synchronized (this) { synchronized (this) { final int mode = checkRestrictionLocked(code, usage, uid, packageName); final int mode = checkRestrictionLocked(code, usage, uid, packageName); if (mode != AppOpsManager.MODE_ALLOWED) { if (mode != AppOpsManager.MODE_ALLOWED) { Loading @@ -891,6 +898,23 @@ public class AppOpsService extends IAppOpsService.Stub { return checkOperation(code, uid, packageName); return checkOperation(code, uid, packageName); } } private boolean isApplicationSuspended(String pkg, int uid) { int userId = UserHandle.getUserId(uid); ApplicationInfo ai; try { ai = AppGlobals.getPackageManager().getApplicationInfo(pkg, 0, userId); if (ai == null) { Log.w(TAG, "No application info for package " + pkg + " and user " + userId); return false; } } catch (RemoteException re) { throw new SecurityException("Could not talk to package manager service"); } return ((ai.flags & FLAG_SUSPENDED) != 0); } private int checkRestrictionLocked(int code, int usage, int uid, String packageName) { private int checkRestrictionLocked(int code, int usage, int uid, String packageName) { final SparseArray<Restriction> usageRestrictions = mAudioRestrictions.get(code); final SparseArray<Restriction> usageRestrictions = mAudioRestrictions.get(code); if (usageRestrictions != null) { if (usageRestrictions != null) { Loading Loading
services/core/java/com/android/server/AppOpsService.java +24 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server; package com.android.server; import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED; import java.io.File; import java.io.File; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileInputStream; Loading Loading @@ -882,6 +884,11 @@ public class AppOpsService extends IAppOpsService.Stub { @Override @Override public int checkAudioOperation(int code, int usage, int uid, String packageName) { public int checkAudioOperation(int code, int usage, int uid, String packageName) { if (isApplicationSuspended(packageName, uid)) { Log.i(TAG, "Audio disabled for suspended package=" + packageName + " for uid=" + uid); return AppOpsManager.MODE_IGNORED; } synchronized (this) { synchronized (this) { final int mode = checkRestrictionLocked(code, usage, uid, packageName); final int mode = checkRestrictionLocked(code, usage, uid, packageName); if (mode != AppOpsManager.MODE_ALLOWED) { if (mode != AppOpsManager.MODE_ALLOWED) { Loading @@ -891,6 +898,23 @@ public class AppOpsService extends IAppOpsService.Stub { return checkOperation(code, uid, packageName); return checkOperation(code, uid, packageName); } } private boolean isApplicationSuspended(String pkg, int uid) { int userId = UserHandle.getUserId(uid); ApplicationInfo ai; try { ai = AppGlobals.getPackageManager().getApplicationInfo(pkg, 0, userId); if (ai == null) { Log.w(TAG, "No application info for package " + pkg + " and user " + userId); return false; } } catch (RemoteException re) { throw new SecurityException("Could not talk to package manager service"); } return ((ai.flags & FLAG_SUSPENDED) != 0); } private int checkRestrictionLocked(int code, int usage, int uid, String packageName) { private int checkRestrictionLocked(int code, int usage, int uid, String packageName) { final SparseArray<Restriction> usageRestrictions = mAudioRestrictions.get(code); final SparseArray<Restriction> usageRestrictions = mAudioRestrictions.get(code); if (usageRestrictions != null) { if (usageRestrictions != null) { Loading