diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index a53fc35080018..2399e374540de 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -16,10 +16,6 @@ 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.annotation.CallbackExecutor; import android.annotation.IntDef; @@ -74,6 +70,7 @@ import com.android.internal.os.RuntimeInit; import com.android.internal.os.ZygoteInit; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DataClass; +import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.Parcelling; import com.android.internal.util.Preconditions; @@ -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 * @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(prefix = {"RUNTIME_APP_OPS_ACCESS__SAMPLING_STRATEGY__"}, value = { - RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__DEFAULT, - RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM, - RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED + @IntDef(prefix = {"SAMPLING_STRATEGY_"}, value = { + SAMPLING_STRATEGY_DEFAULT, + SAMPLING_STRATEGY_UNIFORM, + SAMPLING_STRATEGY_RARELY_USED }) public @interface SamplingStrategy {} diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 85f36aab0be75..45c3aebe8bd5e 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -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_RECORD_AUDIO; 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_CACHED; import static android.app.AppOpsManager.UID_STATE_FOREGROUND; @@ -60,8 +62,6 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static android.content.Intent.EXTRA_REPLACING; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; 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; @@ -5683,7 +5683,7 @@ public class AppOpsService extends IAppOpsService.Stub { if (mRarelyUsedPackages.contains(packageName)) { mRarelyUsedPackages.remove(packageName); if (ThreadLocalRandom.current().nextFloat() < 0.5f) { - mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED; + mSamplingStrategy = SAMPLING_STRATEGY_RARELY_USED; resampleAppOpForPackageLocked(packageName); } } @@ -5692,7 +5692,7 @@ public class AppOpsService extends IAppOpsService.Stub { /** Resamples package and appop to watch from the list provided. */ private void resamplePackageAndAppOpLocked(@NonNull List packageNames) { if (!packageNames.isEmpty()) { - mSamplingStrategy = RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM; + mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM; resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size()))); }