Add app_compat flags for hidden api logging
Remove the global settings hidden_api_access_log_sampling_rate and
hidden_api_access_statslog_sampling_rate and replace them with DeviceConfig
values under the app_compat namespace.
Test: m
Test: cts-tradefed run cts-dev -m CtsStatsdHostTestCases -t \
android.cts.statsd.atom.UidAtomTests#testHiddenApiUsed
Bug: 119217680
Bug: 115322973
Change-Id: I7d3257f572e57b9471883e90789e0ac97a1de483
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index b8174e6..f774766 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -13477,24 +13477,6 @@
"hidden_api_blacklist_exemptions";
/**
- * Sampling rate for hidden API access event logs with libmetricslogger, as an integer in
- * the range 0 to 0x10000 inclusive.
- *
- * @hide
- */
- public static final String HIDDEN_API_ACCESS_LOG_SAMPLING_RATE =
- "hidden_api_access_log_sampling_rate";
-
- /**
- * Sampling rate for hidden API access event logging with statslog, as an integer in the
- * range 0 to 0x10000 inclusive.
- *
- * @hide
- */
- public static final String HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE =
- "hidden_api_access_statslog_sampling_rate";
-
- /**
* Hidden API enforcement policy for apps.
*
* Values correspond to @{@link
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 7322a54..1648508 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -287,8 +287,6 @@
Settings.Global.HDMI_CONTROL_ENABLED,
Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
- Settings.Global.HIDDEN_API_ACCESS_LOG_SAMPLING_RATE,
- Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE,
Settings.Global.HIDDEN_API_POLICY,
Settings.Global.HIDE_ERROR_DIALOGS,
Settings.Global.HTTP_PROXY,
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 8225476..d37797c 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -271,6 +271,7 @@
import android.os.WorkSource;
import android.os.storage.IStorageManager;
import android.os.storage.StorageManager;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.sysprop.VoldProperties;
import android.text.TextUtils;
@@ -2141,7 +2142,8 @@
* Encapsulates global settings related to hidden API enforcement behaviour, including tracking
* the latest value via a content observer.
*/
- static class HiddenApiSettings extends ContentObserver {
+ static class HiddenApiSettings extends ContentObserver
+ implements DeviceConfig.OnPropertiesChangedListener {
private final Context mContext;
private boolean mBlacklistDisabled;
@@ -2151,6 +2153,45 @@
private int mStatslogSampleRate = -1;
@HiddenApiEnforcementPolicy private int mPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT;
+ /**
+ * Sampling rate for hidden API access event logs with libmetricslogger, as an integer in
+ * the range 0 to 0x10000 inclusive.
+ *
+ * @hide
+ */
+ public static final String HIDDEN_API_ACCESS_LOG_SAMPLING_RATE =
+ "hidden_api_access_log_sampling_rate";
+
+ /**
+ * Sampling rate for hidden API access event logging with statslog, as an integer in the
+ * range 0 to 0x10000 inclusive.
+ *
+ * @hide
+ */
+ public static final String HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE =
+ "hidden_api_access_statslog_sampling_rate";
+
+ public void onPropertiesChanged(DeviceConfig.Properties properties) {
+ int logSampleRate = properties.getInt(HIDDEN_API_ACCESS_LOG_SAMPLING_RATE, 0x0);
+ if (logSampleRate < 0 || logSampleRate > 0x10000) {
+ logSampleRate = -1;
+ }
+ if (logSampleRate != -1 && logSampleRate != mLogSampleRate) {
+ mLogSampleRate = logSampleRate;
+ ZYGOTE_PROCESS.setHiddenApiAccessLogSampleRate(mLogSampleRate);
+ }
+
+ int statslogSampleRate =
+ properties.getInt(HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE, 0);
+ if (statslogSampleRate < 0 || statslogSampleRate > 0x10000) {
+ statslogSampleRate = -1;
+ }
+ if (statslogSampleRate != -1 && statslogSampleRate != mStatslogSampleRate) {
+ mStatslogSampleRate = statslogSampleRate;
+ ZYGOTE_PROCESS.setHiddenApiAccessStatslogSampleRate(mStatslogSampleRate);
+ }
+ }
+
public HiddenApiSettings(Handler handler, Context context) {
super(handler);
mContext = context;
@@ -2162,18 +2203,11 @@
false,
this);
mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.HIDDEN_API_ACCESS_LOG_SAMPLING_RATE),
- false,
- this);
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(
- Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE),
- false,
- this);
- mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.HIDDEN_API_POLICY),
false,
this);
+ DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_APP_COMPAT,
+ mContext.getMainExecutor(), this);
update();
}
@@ -2197,24 +2231,6 @@
mExemptions = Collections.emptyList();
}
}
- int logSampleRate = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.HIDDEN_API_ACCESS_LOG_SAMPLING_RATE, 0x200);
- if (logSampleRate < 0 || logSampleRate > 0x10000) {
- logSampleRate = -1;
- }
- if (logSampleRate != -1 && logSampleRate != mLogSampleRate) {
- mLogSampleRate = logSampleRate;
- ZYGOTE_PROCESS.setHiddenApiAccessLogSampleRate(mLogSampleRate);
- }
- int statslogSampleRate = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE, 0);
- if (statslogSampleRate < 0 || statslogSampleRate > 0x10000) {
- statslogSampleRate = -1;
- }
- if (statslogSampleRate != -1 && statslogSampleRate != mStatslogSampleRate) {
- mStatslogSampleRate = statslogSampleRate;
- ZYGOTE_PROCESS.setHiddenApiAccessStatslogSampleRate(mStatslogSampleRate);
- }
mPolicy = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY);
}