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