aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunho Shin <hhshin@google.com>2022-04-14 01:11:30 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-14 01:11:30 +0000
commit0f98277028e8bef7ed3f0a38645bdf5a5911926a (patch)
tree1a85a480854a8db98e6243a390679761854e071f
parentd0b577941c0f655d094b627cbe523ff2d532a8c2 (diff)
parent148dbf8421e68f5ce03d6077a455dbff7d374907 (diff)
downloadims-0f98277028e8bef7ed3f0a38645bdf5a5911926a.tar.gz
Merge "After saving the capability information in the EAB DB, the invalid data is immediately deleted from the EAB DB." am: d9f22e0d8f am: 4f956cc5a8 am: 148dbf8421
Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/2058852 Change-Id: Iab71d55369cd795fef825a06a860af32abee2b2a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java49
-rw-r--r--tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java31
2 files changed, 58 insertions, 22 deletions
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
index 1750385b..aaab0a9f 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
@@ -128,6 +128,7 @@ public class EabControllerImpl implements EabController {
// Pick up changes to CarrierConfig and run any applicable cleanup tasks associated with
// that configuration.
mCapabilityCleanupRunnable.run();
+ cleanupOrphanedRows();
if (!mIsSetDestroyedFlag) {
mEabBulkCapabilityUpdater.onCarrierConfigChanged();
}
@@ -270,7 +271,7 @@ public class EabControllerImpl implements EabController {
c.close();
}
}
-
+ cleanupOrphanedRows();
mEabBulkCapabilityUpdater.updateExpiredTimeAlert();
if (mHandler.hasCallbacks(mCapabilityCleanupRunnable)) {
@@ -280,6 +281,25 @@ public class EabControllerImpl implements EabController {
CLEAN_UP_LEGACY_CAPABILITY_DELAY_MILLI_SEC);
}
+ /**
+ * Cleanup the entry of common table that can't map to presence or option table
+ */
+ @VisibleForTesting
+ public void cleanupOrphanedRows() {
+ String presenceSelection =
+ " (SELECT " + EabProvider.PresenceTupleColumns.EAB_COMMON_ID +
+ " FROM " + EAB_PRESENCE_TUPLE_TABLE_NAME + ") ";
+ String optionSelection =
+ " (SELECT " + EabProvider.OptionsColumns.EAB_COMMON_ID +
+ " FROM " + EAB_OPTIONS_TABLE_NAME + ") ";
+
+ mContext.getContentResolver().delete(
+ EabProvider.COMMON_URI,
+ EabProvider.EabCommonColumns._ID + " NOT IN " + presenceSelection +
+ " AND " + EabProvider.EabCommonColumns._ID+ " NOT IN " + optionSelection,
+ null);
+ }
+
private List<EabCapabilityResult> generateDestroyedResult(List<Uri> contactUri) {
List<EabCapabilityResult> destroyedResult = new ArrayList<>();
for (Uri uri : contactUri) {
@@ -392,8 +412,12 @@ public class EabControllerImpl implements EabController {
RcsUceCapabilityBuilderWrapper builderWrapper) {
if (builderWrapper.getMechanism() == CAPABILITY_MECHANISM_PRESENCE) {
PresenceBuilder builder = builderWrapper.getPresenceBuilder();
- if (builder != null) {
- builder.addCapabilityTuple(createPresenceTuple(contactUri, cursor));
+ if (builder == null) {
+ return;
+ }
+ RcsContactPresenceTuple presenceTuple = createPresenceTuple(contactUri, cursor);
+ if (presenceTuple != null) {
+ builder.addCapabilityTuple(presenceTuple);
}
} else {
OptionsBuilder builder = builderWrapper.getOptionsBuilder();
@@ -799,7 +823,6 @@ public class EabControllerImpl implements EabController {
cleanupCapabilities(rcsCapabilitiesExpiredTime, getRcsCommonIdList());
cleanupCapabilities(nonRcsCapabilitiesExpiredTime, getNonRcsCommonIdList());
- cleanupOrphanedRows();
}
private void cleanupCapabilities(long rcsCapabilitiesExpiredTime, List<Integer> commonIdList) {
@@ -867,24 +890,6 @@ public class EabControllerImpl implements EabController {
return list;
}
- /**
- * Cleanup the entry of common table that can't map to presence or option table
- */
- private void cleanupOrphanedRows() {
- String presenceSelection =
- " (SELECT " + EabProvider.PresenceTupleColumns.EAB_COMMON_ID +
- " FROM " + EAB_PRESENCE_TUPLE_TABLE_NAME + ") ";
- String optionSelection =
- " (SELECT " + EabProvider.OptionsColumns.EAB_COMMON_ID +
- " FROM " + EAB_OPTIONS_TABLE_NAME + ") ";
-
- mContext.getContentResolver().delete(
- EabProvider.COMMON_URI,
- EabProvider.EabCommonColumns._ID + " NOT IN " + presenceSelection +
- " AND " + EabProvider.EabCommonColumns._ID+ " NOT IN " + optionSelection,
- null);
- }
-
private String getStringValue(Cursor cursor, String column) {
return cursor.getString(cursor.getColumnIndex(column));
}
diff --git a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
index f855d061..0040dc9e 100644
--- a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
+++ b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
@@ -210,6 +210,34 @@ public class EabControllerTest extends ImsTestBase {
@Test
@SmallTest
+ public void testSaveCapabilityAndCleanupInvalidDataInCommonTable() throws InterruptedException {
+ // Insert invalid data in common table
+ ContentValues data = new ContentValues();
+ data.put(EabProvider.EabCommonColumns.EAB_CONTACT_ID, -1);
+ data.put(EabProvider.EabCommonColumns.MECHANISM, CAPABILITY_MECHANISM_PRESENCE);
+ data.put(EabProvider.EabCommonColumns.REQUEST_RESULT, REQUEST_RESULT_FOUND);
+ data.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, -1);
+ mContext.getContentResolver().insert(COMMON_URI, data);
+
+ List<RcsContactUceCapability> contactList = new ArrayList<>();
+ contactList.add(createPresenceCapability());
+ mEabControllerSub1.saveCapabilities(contactList);
+
+ mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS);
+
+ // Verify the entry that cannot map to presence/option table has been removed
+ Cursor cursor = mContext.getContentResolver().query(COMMON_URI, null, null, null, null);
+ while(cursor.moveToNext()) {
+ int contactId = cursor.getInt(
+ cursor.getColumnIndex(EabProvider.EabCommonColumns.EAB_CONTACT_ID));
+ if (contactId == -1) {
+ fail("Invalid data didn't been cleared");
+ }
+ }
+ }
+
+ @Test
+ @SmallTest
public void testCleanupInvalidDataInCommonTable() throws InterruptedException {
// Insert invalid data in common table
ContentValues data = new ContentValues();
@@ -219,6 +247,7 @@ public class EabControllerTest extends ImsTestBase {
data.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, -1);
mContext.getContentResolver().insert(COMMON_URI, data);
+ mEabControllerSub1.cleanupOrphanedRows();
mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable);
mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS);
@@ -252,6 +281,7 @@ public class EabControllerTest extends ImsTestBase {
expiredDate.getTime().getTime() / 1000);
mContext.getContentResolver().insert(PRESENCE_URI, data);
+ mEabControllerSub1.cleanupOrphanedRows();
mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable);
mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS);
@@ -285,6 +315,7 @@ public class EabControllerTest extends ImsTestBase {
expiredDate.getTime().getTime() / 1000);
mContext.getContentResolver().insert(OPTIONS_URI, data);
+ mEabControllerSub1.cleanupOrphanedRows();
mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable);
mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS);