Loading core/java/android/app/AppOpsManager.java +21 −8 Original line number Original line Diff line number Diff line Loading @@ -16,10 +16,6 @@ package android.app; package android.app; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; import android.Manifest; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.IntDef; Loading Loading @@ -74,6 +70,7 @@ import com.android.internal.os.RuntimeInit; import com.android.internal.os.ZygoteInit; import com.android.internal.os.ZygoteInit; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DataClass; import com.android.internal.util.DataClass; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.Parcelling; import com.android.internal.util.Parcelling; import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions; Loading Loading @@ -666,15 +663,31 @@ public class AppOpsManager { } } } } // These constants are redefined here to work around a metalava limitation/bug where // @IntDef is not able to see @hide symbols when they are hidden via package hiding: // frameworks/base/core/java/com/android/internal/package.html /** @hide */ public static final int SAMPLING_STRATEGY_DEFAULT = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT; /** @hide */ public static final int SAMPLING_STRATEGY_UNIFORM = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; /** @hide */ public static final int SAMPLING_STRATEGY_RARELY_USED = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; /** /** * Strategies used for message sampling * Strategies used for message sampling * @hide * @hide */ */ @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"RUNTIME_APP_OPS_ACCESS__SAMPLING_STRATEGY__"}, value = { @IntDef(prefix = {"SAMPLING_STRATEGY_"}, value = { RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT, SAMPLING_STRATEGY_DEFAULT, RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM, SAMPLING_STRATEGY_UNIFORM, RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED SAMPLING_STRATEGY_RARELY_USED }) }) public @interface SamplingStrategy {} public @interface SamplingStrategy {} Loading services/core/java/com/android/server/appop/AppOpsService.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,8 @@ import static android.app.AppOpsManager.OP_NONE; import static android.app.AppOpsManager.OP_PLAY_AUDIO; import static android.app.AppOpsManager.OP_PLAY_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OpEventProxyInfo; import static android.app.AppOpsManager.OpEventProxyInfo; import static android.app.AppOpsManager.SAMPLING_STRATEGY_RARELY_USED; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_CACHED; import static android.app.AppOpsManager.UID_STATE_CACHED; import static android.app.AppOpsManager.UID_STATE_FOREGROUND; import static android.app.AppOpsManager.UID_STATE_FOREGROUND; Loading @@ -60,8 +62,6 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static android.content.Intent.EXTRA_REPLACING; 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.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; Loading Loading @@ -5683,7 +5683,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (mRarelyUsedPackages.contains(packageName)) { if (mRarelyUsedPackages.contains(packageName)) { mRarelyUsedPackages.remove(packageName); mRarelyUsedPackages.remove(packageName); if (ThreadLocalRandom.current().nextFloat() < 0.5f) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; mSamplingStrategy = SAMPLING_STRATEGY_RARELY_USED; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName); } } } } Loading @@ -5692,7 +5692,7 @@ public class AppOpsService extends IAppOpsService.Stub { /** 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()) { mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM; resampleAppOpForPackageLocked(packageNames.get( resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size()))); ThreadLocalRandom.current().nextInt(packageNames.size()))); } } Loading Loading
core/java/android/app/AppOpsManager.java +21 −8 Original line number Original line Diff line number Diff line Loading @@ -16,10 +16,6 @@ package android.app; package android.app; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; import android.Manifest; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.IntDef; Loading Loading @@ -74,6 +70,7 @@ import com.android.internal.os.RuntimeInit; import com.android.internal.os.ZygoteInit; import com.android.internal.os.ZygoteInit; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DataClass; import com.android.internal.util.DataClass; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.Parcelling; import com.android.internal.util.Parcelling; import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions; Loading Loading @@ -666,15 +663,31 @@ public class AppOpsManager { } } } } // These constants are redefined here to work around a metalava limitation/bug where // @IntDef is not able to see @hide symbols when they are hidden via package hiding: // frameworks/base/core/java/com/android/internal/package.html /** @hide */ public static final int SAMPLING_STRATEGY_DEFAULT = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT; /** @hide */ public static final int SAMPLING_STRATEGY_UNIFORM = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; /** @hide */ public static final int SAMPLING_STRATEGY_RARELY_USED = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; /** /** * Strategies used for message sampling * Strategies used for message sampling * @hide * @hide */ */ @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"RUNTIME_APP_OPS_ACCESS__SAMPLING_STRATEGY__"}, value = { @IntDef(prefix = {"SAMPLING_STRATEGY_"}, value = { RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT, SAMPLING_STRATEGY_DEFAULT, RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM, SAMPLING_STRATEGY_UNIFORM, RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED SAMPLING_STRATEGY_RARELY_USED }) }) public @interface SamplingStrategy {} public @interface SamplingStrategy {} Loading
services/core/java/com/android/server/appop/AppOpsService.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,8 @@ import static android.app.AppOpsManager.OP_NONE; import static android.app.AppOpsManager.OP_PLAY_AUDIO; import static android.app.AppOpsManager.OP_PLAY_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OpEventProxyInfo; import static android.app.AppOpsManager.OpEventProxyInfo; import static android.app.AppOpsManager.SAMPLING_STRATEGY_RARELY_USED; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_CACHED; import static android.app.AppOpsManager.UID_STATE_CACHED; import static android.app.AppOpsManager.UID_STATE_FOREGROUND; import static android.app.AppOpsManager.UID_STATE_FOREGROUND; Loading @@ -60,8 +62,6 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static android.content.Intent.EXTRA_REPLACING; 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.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; import static android.util.StatsLogInternal.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; Loading Loading @@ -5683,7 +5683,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (mRarelyUsedPackages.contains(packageName)) { if (mRarelyUsedPackages.contains(packageName)) { mRarelyUsedPackages.remove(packageName); mRarelyUsedPackages.remove(packageName); if (ThreadLocalRandom.current().nextFloat() < 0.5f) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; mSamplingStrategy = SAMPLING_STRATEGY_RARELY_USED; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName); } } } } Loading @@ -5692,7 +5692,7 @@ public class AppOpsService extends IAppOpsService.Stub { /** 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()) { mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM; resampleAppOpForPackageLocked(packageNames.get( resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size()))); ThreadLocalRandom.current().nextInt(packageNames.size()))); } } Loading