summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRishabh Singh <rishabhsing@google.com>2022-09-27 00:34:33 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-09-27 00:34:33 +0000
commit501fcc43b34164bd34f1c448fe3b9a3934e2b35d (patch)
tree3f17fe483c30509b817733d41fdf95a4f9f3a419
parent3ab5213596a11e8d5c4ca279820bb39f42139483 (diff)
parent136c6d7bf4543a301b503a785f4c55fc4936591f (diff)
downloadAdServices-501fcc43b34164bd34f1c448fe3b9a3934e2b35d.tar.gz
Merge "Api to erase keys from sandbox" into tm-mainline-prod
-rw-r--r--sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java19
-rw-r--r--sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java22
-rw-r--r--sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java6
-rw-r--r--sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java12
4 files changed, 58 insertions, 1 deletions
diff --git a/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java b/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java
index 44bba284de..acb24d29d6 100644
--- a/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java
+++ b/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java
@@ -107,7 +107,24 @@ public class SharedPreferencesSyncManager {
public void removeSharedPreferencesSyncKeys(@NonNull Set<String> keys) {
synchronized (mLock) {
mKeysToSync.removeAll(keys);
- // TODO(b/19742283): removed keys need to be erased from sandbox.
+
+ final ArrayList<SharedPreferencesKey> keysWithTypeBeingRemoved = new ArrayList<>();
+
+ for (final String key : keys) {
+ keysWithTypeBeingRemoved.add(
+ new SharedPreferencesKey(key, SharedPreferencesKey.KEY_TYPE_STRING));
+ }
+ final SharedPreferencesUpdate update =
+ new SharedPreferencesUpdate(keysWithTypeBeingRemoved, new Bundle());
+ try {
+ mService.syncDataFromClient(
+ mContext.getPackageName(),
+ /*timeAppCalledSystemServer=*/ System.currentTimeMillis(),
+ update,
+ mCallback);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Couldn't connect to SdkSandboxManagerService: " + e.getMessage());
+ }
}
}
diff --git a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java
index 9fcf6f7498..a358a542de 100644
--- a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java
+++ b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java
@@ -204,6 +204,28 @@ public class SdkSandboxStorageTestApp {
assertThat(syncedValueInSandbox).isEqualTo(BULK_SYNC_VALUE);
}
+ @Test
+ public void testSharedPreferences_SyncRemoveKeys() throws Exception {
+ loadSdk();
+
+ // Write to default shared preference
+ final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);
+ pref.edit().putString(KEY_TO_SYNC, BULK_SYNC_VALUE).commit();
+
+ // Start syncing keys
+ mSdkSandboxManager.addSyncedSharedPreferencesKeys(Set.of(KEY_TO_SYNC));
+
+ // Remove the key
+ mSdkSandboxManager.removeSyncedSharedPreferencesKeys(Set.of(KEY_TO_SYNC));
+
+ // Allow some time for data to sync
+ Thread.sleep(1000);
+
+ // Verify key has been removed from the sandbox
+ final String syncedValueInSandbox = mSdk.getSyncedSharedPreferencesString(KEY_TO_SYNC);
+ assertThat(syncedValueInSandbox).isEmpty();
+ }
+
private static void assertDirIsNotAccessible(String path) {
// Trying to access a file that does not exist in that directory, it should return
// permission denied not file not found.
diff --git a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java
index a71b11e966..a105b6b234 100644
--- a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java
+++ b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java
@@ -1059,6 +1059,12 @@ public final class SdkSandboxStorageHostTest extends BaseHostJUnit4Test {
runPhase("testSharedPreferences_SyncStartedBeforeLoadingSdk");
}
+ @Test
+ public void testSharedPreferences_SyncRemoveKeys() throws Exception {
+ installPackage(TEST_APP_STORAGE_APK);
+ runPhase("testSharedPreferences_SyncRemoveKeys");
+ }
+
private String getAppDataPath(int userId, String packageName, boolean isCeData) {
return getAppDataPath(/*volumeUuid=*/ null, userId, packageName, isCeData);
}
diff --git a/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java b/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java
index 65c034abb4..0426b34367 100644
--- a/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java
+++ b/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java
@@ -122,6 +122,18 @@ public class SharedPreferencesSyncManagerUnitTest {
}
@Test
+ public void test_removeKeys_updateSentForRemoval() throws Exception {
+ mSyncManager.addSharedPreferencesSyncKeys(KEYS_TO_SYNC);
+
+ // Remove key
+ mSyncManager.removeSharedPreferencesSyncKeys(Set.of(KEY_TO_UPDATE));
+
+ final SharedPreferencesUpdate update = mSdkSandboxManagerService.getLastUpdate();
+ assertThat(update.getData().keySet()).doesNotContain(Set.of(KEY_TO_UPDATE));
+ assertThat(update.getKeysInUpdate()).containsExactly(KEY_WITH_TYPE_TO_UPDATE);
+ }
+
+ @Test
public void test_bulkSync_syncSpecifiedKeys() throws Exception {
// Populate default shared preference with test data
populateDefaultSharedPreference(TEST_DATA);