Attempt to work around sqlite database cursor window issue
Bug: 72320869
Test: DialerDatabaseHelperTest
PiperOrigin-RevId: 182964251
Change-Id: Ie6539ce27bcbd97b093a47e1f5882770fc345e59
diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index bc70fa4..18c6134 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -41,6 +41,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutor.Worker;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
+import com.android.dialer.common.database.Selection;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
import com.android.dialer.smartdial.util.SmartDialNameMatcher;
import com.android.dialer.smartdial.util.SmartDialPrefix;
@@ -351,24 +352,40 @@
* other apps since last update.
*
* @param db Database to operate on.
- * @param deletedContactCursor Cursor containing rows of deleted contacts
+ * @param lastUpdatedTimeMillis the last time at which an update to the smart dial database was
+ * run.
*/
- @VisibleForTesting
- void removeDeletedContacts(SQLiteDatabase db, Cursor deletedContactCursor) {
+ private void removeDeletedContacts(SQLiteDatabase db, String lastUpdatedTimeMillis) {
+ Cursor deletedContactCursor = getDeletedContactCursor(lastUpdatedTimeMillis);
+
if (deletedContactCursor == null) {
return;
}
db.beginTransaction();
try {
- while (deletedContactCursor.moveToNext()) {
- final Long deleteContactId =
- deletedContactCursor.getLong(DeleteContactQuery.DELETED_CONTACT_ID);
- db.delete(
- Tables.SMARTDIAL_TABLE, SmartDialDbColumns.CONTACT_ID + "=" + deleteContactId, null);
- db.delete(Tables.PREFIX_TABLE, PrefixColumns.CONTACT_ID + "=" + deleteContactId, null);
+ if (!deletedContactCursor.moveToFirst()) {
+ return;
}
+ do {
+ Long deleteContactId = deletedContactCursor.getLong(DeleteContactQuery.DELETED_CONTACT_ID);
+
+ Selection smartDialSelection =
+ Selection.column(SmartDialDbColumns.CONTACT_ID).is("=", deleteContactId);
+ db.delete(
+ Tables.SMARTDIAL_TABLE,
+ smartDialSelection.getSelection(),
+ smartDialSelection.getSelectionArgs());
+
+ Selection prefixSelection =
+ Selection.column(PrefixColumns.CONTACT_ID).is("=", deleteContactId);
+ db.delete(
+ Tables.PREFIX_TABLE,
+ prefixSelection.getSelection(),
+ prefixSelection.getSelectionArgs());
+ } while (deletedContactCursor.moveToNext());
+
db.setTransactionSuccessful();
} finally {
deletedContactCursor.close();
@@ -633,7 +650,7 @@
}
/** Removes contacts that have been deleted. */
- removeDeletedContacts(db, getDeletedContactCursor(lastUpdateMillis));
+ removeDeletedContacts(db, lastUpdateMillis);
removePotentiallyCorruptedContacts(db, lastUpdateMillis);
if (DEBUG) {