Loading services/core/java/com/android/server/appop/AppOpsService.java +19 −10 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.appop; package com.android.server.appop; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; Loading Loading @@ -66,11 +71,6 @@ import static android.content.Intent.EXTRA_REPLACING; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static java.lang.Long.max; import static java.lang.Long.max; Loading Loading @@ -1776,8 +1776,7 @@ public class AppOpsService extends IAppOpsService.Stub { mHandler.postDelayed(new Runnable() { mHandler.postDelayed(new Runnable() { @Override @Override public void run() { public void run() { List<String> packageNames = getPackageNamesForSampling(); List<String> packageNames = getPackageListAndResample(); resamplePackageAndAppOpLocked(packageNames); initializeRarelyUsedPackagesList(new ArraySet<>(packageNames)); initializeRarelyUsedPackagesList(new ArraySet<>(packageNames)); } } }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS); }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS); Loading Loading @@ -5967,11 +5966,13 @@ public class AppOpsService extends IAppOpsService.Stub { mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, Binder.getCallingPid(), Binder.getCallingUid(), null); Binder.getCallingPid(), Binder.getCallingUid(), null); RuntimeAppOpAccessMessage result; RuntimeAppOpAccessMessage result; List<String> packageNames = getPackageNamesForSampling(); synchronized (this) { synchronized (this) { result = mCollectedRuntimePermissionMessage; result = mCollectedRuntimePermissionMessage; resamplePackageAndAppOpLocked(packageNames); mCollectedRuntimePermissionMessage = null; } } mHandler.sendMessage(PooledLambda.obtainMessage( AppOpsService::getPackageListAndResample, this)); return result; return result; } } Loading @@ -5995,6 +5996,15 @@ public class AppOpsService extends IAppOpsService.Stub { } } } } /** Obtains package list and resamples package and appop to watch. */ private List<String> getPackageListAndResample() { List<String> packageNames = getPackageNamesForSampling(); synchronized (this) { resamplePackageAndAppOpLocked(packageNames); } return packageNames; } /** Resamples package and appop to watch from the list provided. */ /** Resamples package and appop to watch from the list provided. */ private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { if (!packageNames.isEmpty()) { if (!packageNames.isEmpty()) { Loading @@ -6010,7 +6020,6 @@ public class AppOpsService extends IAppOpsService.Stub { mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mAcceptableLeftDistance = _NUM_OP; mAcceptableLeftDistance = _NUM_OP; mSampledPackage = packageName; mSampledPackage = packageName; mCollectedRuntimePermissionMessage = null; } } /** /** Loading Loading
services/core/java/com/android/server/appop/AppOpsService.java +19 −10 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.appop; package com.android.server.appop; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; Loading Loading @@ -66,11 +71,6 @@ import static android.content.Intent.EXTRA_REPLACING; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static java.lang.Long.max; import static java.lang.Long.max; Loading Loading @@ -1776,8 +1776,7 @@ public class AppOpsService extends IAppOpsService.Stub { mHandler.postDelayed(new Runnable() { mHandler.postDelayed(new Runnable() { @Override @Override public void run() { public void run() { List<String> packageNames = getPackageNamesForSampling(); List<String> packageNames = getPackageListAndResample(); resamplePackageAndAppOpLocked(packageNames); initializeRarelyUsedPackagesList(new ArraySet<>(packageNames)); initializeRarelyUsedPackagesList(new ArraySet<>(packageNames)); } } }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS); }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS); Loading Loading @@ -5967,11 +5966,13 @@ public class AppOpsService extends IAppOpsService.Stub { mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, Binder.getCallingPid(), Binder.getCallingUid(), null); Binder.getCallingPid(), Binder.getCallingUid(), null); RuntimeAppOpAccessMessage result; RuntimeAppOpAccessMessage result; List<String> packageNames = getPackageNamesForSampling(); synchronized (this) { synchronized (this) { result = mCollectedRuntimePermissionMessage; result = mCollectedRuntimePermissionMessage; resamplePackageAndAppOpLocked(packageNames); mCollectedRuntimePermissionMessage = null; } } mHandler.sendMessage(PooledLambda.obtainMessage( AppOpsService::getPackageListAndResample, this)); return result; return result; } } Loading @@ -5995,6 +5996,15 @@ public class AppOpsService extends IAppOpsService.Stub { } } } } /** Obtains package list and resamples package and appop to watch. */ private List<String> getPackageListAndResample() { List<String> packageNames = getPackageNamesForSampling(); synchronized (this) { resamplePackageAndAppOpLocked(packageNames); } return packageNames; } /** Resamples package and appop to watch from the list provided. */ /** Resamples package and appop to watch from the list provided. */ private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { if (!packageNames.isEmpty()) { if (!packageNames.isEmpty()) { Loading @@ -6010,7 +6020,6 @@ public class AppOpsService extends IAppOpsService.Stub { mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mAcceptableLeftDistance = _NUM_OP; mAcceptableLeftDistance = _NUM_OP; mSampledPackage = packageName; mSampledPackage = packageName; mCollectedRuntimePermissionMessage = null; } } /** /** Loading