Loading core/java/android/app/AppOpsManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -60,13 +60,16 @@ import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.LongSparseArray; import android.util.LongSparseLongArray; import android.util.Pools; import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -179,6 +182,8 @@ import java.util.function.Supplier; */ @SystemService(Context.APP_OPS_SERVICE) public class AppOpsManager { private static final String LOG_TAG = "AppOpsManager"; /** * This is a subtle behavior change to {@link #startWatchingMode}. * Loading Loading @@ -7517,6 +7522,7 @@ public class AppOpsManager { */ @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setUidMode(int code, int uid, @Mode int mode) { logAnySeriousModeChanges(code, uid, null, mode); try { mService.setUidMode(code, uid, mode); } catch (RemoteException e) { Loading @@ -7537,6 +7543,7 @@ public class AppOpsManager { @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setUidMode(@NonNull String appOp, int uid, @Mode int mode) { logAnySeriousModeChanges(strOpToOp(appOp), uid, null, mode); try { mService.setUidMode(AppOpsManager.strOpToOp(appOp), uid, mode); } catch (RemoteException e) { Loading Loading @@ -7572,11 +7579,32 @@ public class AppOpsManager { } } private void logAnySeriousModeChanges(int code, int uid, String packageName, @Mode int mode) { // TODO (b/280869337): Remove this once we have the required data. if (code != OP_RUN_ANY_IN_BACKGROUND || mode == MODE_ALLOWED) { return; } final StringBuilder log = new StringBuilder("Attempt to change RUN_ANY_IN_BACKGROUND to ") .append(modeToName(mode)) .append(" for uid: ") .append(UserHandle.formatUid(uid)) .append(" package: ") .append(packageName) .append(" by: ") .append(mContext.getOpPackageName()); if (Process.myUid() == Process.SYSTEM_UID) { Slog.wtfStack(LOG_TAG, log.toString()); } else { Log.w(LOG_TAG, log.toString()); } } /** @hide */ @UnsupportedAppUsage @TestApi @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setMode(int code, int uid, String packageName, @Mode int mode) { logAnySeriousModeChanges(code, uid, packageName, mode); try { mService.setMode(code, uid, packageName, mode); } catch (RemoteException e) { Loading @@ -7599,6 +7627,7 @@ public class AppOpsManager { @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setMode(@NonNull String op, int uid, @Nullable String packageName, @Mode int mode) { logAnySeriousModeChanges(strOpToOp(op), uid, packageName, mode); try { mService.setMode(strOpToOp(op), uid, packageName, mode); } catch (RemoteException e) { Loading services/core/java/com/android/server/appop/AppOpsService.java +17 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD; import static android.app.AppOpsManager.OP_RECORD_AUDIO_SANDBOXED; import static android.app.AppOpsManager.OP_RUN_ANY_IN_BACKGROUND; import static android.app.AppOpsManager.OP_VIBRATE; import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_FAILED; import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_STARTED; Loading Loading @@ -1769,6 +1770,11 @@ public class AppOpsService extends IAppOpsService.Stub { @Override public void setUidMode(int code, int uid, int mode) { setUidMode(code, uid, mode, null); if (code == OP_RUN_ANY_IN_BACKGROUND) { // TODO (b/280869337): Remove this once we have the required data. Slog.wtfStack(TAG, "setUidMode called for RUN_ANY_IN_BACKGROUND by uid: " + UserHandle.formatUid(Binder.getCallingUid())); } } private void setUidMode(int code, int uid, int mode, Loading Loading @@ -1944,6 +1950,17 @@ public class AppOpsService extends IAppOpsService.Stub { @Override public void setMode(int code, int uid, @NonNull String packageName, int mode) { setMode(code, uid, packageName, mode, null); final int callingUid = Binder.getCallingUid(); if (code == OP_RUN_ANY_IN_BACKGROUND && mode != MODE_ALLOWED) { // TODO (b/280869337): Remove this once we have the required data. final String callingPackage = ArrayUtils.firstOrNull(getPackagesForUid(callingUid)); Slog.wtfStack(TAG, "RUN_ANY_IN_BACKGROUND for package " + packageName + " changed to mode: " + modeToName(mode) + " via setMode. Calling package: " + callingPackage + ", calling uid: " + UserHandle.formatUid(callingUid) + ", calling pid: " + Binder.getCallingPid() + ", system pid: " + Process.myPid()); } } void setMode(int code, int uid, @NonNull String packageName, int mode, Loading Loading
core/java/android/app/AppOpsManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -60,13 +60,16 @@ import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.LongSparseArray; import android.util.LongSparseLongArray; import android.util.Pools; import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -179,6 +182,8 @@ import java.util.function.Supplier; */ @SystemService(Context.APP_OPS_SERVICE) public class AppOpsManager { private static final String LOG_TAG = "AppOpsManager"; /** * This is a subtle behavior change to {@link #startWatchingMode}. * Loading Loading @@ -7517,6 +7522,7 @@ public class AppOpsManager { */ @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setUidMode(int code, int uid, @Mode int mode) { logAnySeriousModeChanges(code, uid, null, mode); try { mService.setUidMode(code, uid, mode); } catch (RemoteException e) { Loading @@ -7537,6 +7543,7 @@ public class AppOpsManager { @SystemApi @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setUidMode(@NonNull String appOp, int uid, @Mode int mode) { logAnySeriousModeChanges(strOpToOp(appOp), uid, null, mode); try { mService.setUidMode(AppOpsManager.strOpToOp(appOp), uid, mode); } catch (RemoteException e) { Loading Loading @@ -7572,11 +7579,32 @@ public class AppOpsManager { } } private void logAnySeriousModeChanges(int code, int uid, String packageName, @Mode int mode) { // TODO (b/280869337): Remove this once we have the required data. if (code != OP_RUN_ANY_IN_BACKGROUND || mode == MODE_ALLOWED) { return; } final StringBuilder log = new StringBuilder("Attempt to change RUN_ANY_IN_BACKGROUND to ") .append(modeToName(mode)) .append(" for uid: ") .append(UserHandle.formatUid(uid)) .append(" package: ") .append(packageName) .append(" by: ") .append(mContext.getOpPackageName()); if (Process.myUid() == Process.SYSTEM_UID) { Slog.wtfStack(LOG_TAG, log.toString()); } else { Log.w(LOG_TAG, log.toString()); } } /** @hide */ @UnsupportedAppUsage @TestApi @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setMode(int code, int uid, String packageName, @Mode int mode) { logAnySeriousModeChanges(code, uid, packageName, mode); try { mService.setMode(code, uid, packageName, mode); } catch (RemoteException e) { Loading @@ -7599,6 +7627,7 @@ public class AppOpsManager { @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setMode(@NonNull String op, int uid, @Nullable String packageName, @Mode int mode) { logAnySeriousModeChanges(strOpToOp(op), uid, packageName, mode); try { mService.setMode(strOpToOp(op), uid, packageName, mode); } catch (RemoteException e) { Loading
services/core/java/com/android/server/appop/AppOpsService.java +17 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD; import static android.app.AppOpsManager.OP_RECORD_AUDIO_SANDBOXED; import static android.app.AppOpsManager.OP_RUN_ANY_IN_BACKGROUND; import static android.app.AppOpsManager.OP_VIBRATE; import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_FAILED; import static android.app.AppOpsManager.OnOpStartedListener.START_TYPE_STARTED; Loading Loading @@ -1769,6 +1770,11 @@ public class AppOpsService extends IAppOpsService.Stub { @Override public void setUidMode(int code, int uid, int mode) { setUidMode(code, uid, mode, null); if (code == OP_RUN_ANY_IN_BACKGROUND) { // TODO (b/280869337): Remove this once we have the required data. Slog.wtfStack(TAG, "setUidMode called for RUN_ANY_IN_BACKGROUND by uid: " + UserHandle.formatUid(Binder.getCallingUid())); } } private void setUidMode(int code, int uid, int mode, Loading Loading @@ -1944,6 +1950,17 @@ public class AppOpsService extends IAppOpsService.Stub { @Override public void setMode(int code, int uid, @NonNull String packageName, int mode) { setMode(code, uid, packageName, mode, null); final int callingUid = Binder.getCallingUid(); if (code == OP_RUN_ANY_IN_BACKGROUND && mode != MODE_ALLOWED) { // TODO (b/280869337): Remove this once we have the required data. final String callingPackage = ArrayUtils.firstOrNull(getPackagesForUid(callingUid)); Slog.wtfStack(TAG, "RUN_ANY_IN_BACKGROUND for package " + packageName + " changed to mode: " + modeToName(mode) + " via setMode. Calling package: " + callingPackage + ", calling uid: " + UserHandle.formatUid(callingUid) + ", calling pid: " + Binder.getCallingPid() + ", system pid: " + Process.myPid()); } } void setMode(int code, int uid, @NonNull String packageName, int mode, Loading