Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f982770 authored by Hyunho Shin's avatar Hyunho Shin Committed by Automerger Merge Worker
Browse files

Merge "After saving the capability information in the EAB DB, the invalid data...

Merge "After saving the capability information in the EAB DB, the invalid data is immediately deleted from the EAB DB." am: d9f22e0d am: 4f956cc5 am: 148dbf84

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/2058852



Change-Id: Iab71d55369cd795fef825a06a860af32abee2b2a
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d0b57794 148dbf84
Loading
Loading
Loading
Loading
+27 −22
Original line number Diff line number Diff line
@@ -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));
    }
+31 −0
Original line number Diff line number Diff line
@@ -208,6 +208,34 @@ public class EabControllerTest extends ImsTestBase {
                mEabControllerSub1.getCapabilities(contactUriList).get(0).getStatus());
    }

    @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 {
@@ -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);