Hide from the world that ssaid is in a dedicated table
Test: manual
bug:37793918
Change-Id: I7c7405c7bd192d528f1f87095a03a2d21953dbc8
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 4b304b2..14e2a85 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -1142,28 +1142,55 @@
} finally {
Binder.restoreCallingIdentity(token);
}
+
+ final SettingsState ssaidSettings = mSettingsRegistry.getSettingsLocked(
+ SETTINGS_TYPE_SSAID, owningUserId);
+
if (instantSsaid != null) {
// Use the stored value if it is still valid.
if (ssaid != null && instantSsaid.equals(ssaid.getValue())) {
- return ssaid;
+ return mascaradeSsaidSetting(ssaidSettings, ssaid);
}
// The value has changed, update the stored value.
- final SettingsState ssaidSettings = mSettingsRegistry.getSettingsLocked(
- SETTINGS_TYPE_SSAID, owningUserId);
final boolean success = ssaidSettings.insertSettingLocked(name, instantSsaid, null,
true, callingPkg.packageName);
if (!success) {
throw new IllegalStateException("Failed to update instant app android id");
}
- return mSettingsRegistry.getSettingLocked(SETTINGS_TYPE_SSAID, owningUserId, name);
+ Setting setting = mSettingsRegistry.getSettingLocked(SETTINGS_TYPE_SSAID,
+ owningUserId, name);
+ return mascaradeSsaidSetting(ssaidSettings, setting);
}
// Lazy initialize ssaid if not yet present in ssaid table.
if (ssaid == null || ssaid.isNull() || ssaid.getValue() == null) {
- return mSettingsRegistry.generateSsaidLocked(callingPkg, owningUserId);
+ Setting setting = mSettingsRegistry.generateSsaidLocked(callingPkg, owningUserId);
+ return mascaradeSsaidSetting(ssaidSettings, setting);
}
- return ssaid;
+ return mascaradeSsaidSetting(ssaidSettings, ssaid);
+ }
+
+ private Setting mascaradeSsaidSetting(SettingsState settingsState, Setting ssaidSetting) {
+ // SSAID settings are located in a dedicated table for internal bookkeeping
+ // but for the world they reside in the secure table, so adjust the key here.
+ // We have a special name when looking it up but want the world to see it as
+ // "android_id".
+ if (ssaidSetting != null) {
+ return settingsState.new Setting(ssaidSetting) {
+ @Override
+ public int getKey() {
+ final int userId = getUserIdFromKey(super.getKey());
+ return makeKey(SETTINGS_TYPE_SECURE, userId);
+ }
+
+ @Override
+ public String getName() {
+ return Settings.Secure.ANDROID_ID;
+ }
+ };
+ }
+ return null;
}
private boolean insertSecureSetting(String name, String value, String tag,
@@ -1173,7 +1200,6 @@
+ ", " + tag + ", " + makeDefault + ", " + requestingUserId
+ ", " + forceNotify + ")");
}
-
return mutateSecureSetting(name, value, tag, makeDefault, requestingUserId,
MUTATION_OPERATION_INSERT, forceNotify, 0);
}
@@ -1879,6 +1905,7 @@
Bundle result = new Bundle();
result.putString(Settings.NameValueTable.VALUE,
!setting.isNull() ? setting.getValue() : null);
+
mSettingsRegistry.mGenerationRegistry.addGenerationData(result, setting.getKey());
return result;
}