Handle concurrently deleted rows in all updateSmartDialDatabase cursors
Bug: 73074317
Test: Not possible, see above
PiperOrigin-RevId: 184893521
Change-Id: Iecb99c658dafa98a2518202c14e67c4494983090
diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index 8431a90..efff11e 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -375,7 +375,9 @@
do {
if (deletedContactCursor.isNull(DeleteContactQuery.DELETED_CONTACT_ID)) {
- LogUtil.i("DialerDatabaseHelper.removeDeletedContacts", "null contact id, skipping row");
+ LogUtil.i(
+ "DialerDatabaseHelper.removeDeletedContacts",
+ "contact_id column null. Row was deleted during iteration, skipping");
continue;
}
@@ -455,6 +457,13 @@
try {
updatedContactCursor.moveToPosition(-1);
while (updatedContactCursor.moveToNext()) {
+ if (updatedContactCursor.isNull(UpdatedContactQuery.UPDATED_CONTACT_ID)) {
+ LogUtil.i(
+ "DialerDatabaseHelper.removeUpdatedContacts",
+ "contact_id column null. Row was deleted during iteration, skipping");
+ continue;
+ }
+
final Long contactId = updatedContactCursor.getLong(UpdatedContactQuery.UPDATED_CONTACT_ID);
db.delete(Tables.SMARTDIAL_TABLE, SmartDialDbColumns.CONTACT_ID + "=" + contactId, null);
@@ -529,6 +538,13 @@
while (updatedContactCursor.moveToNext()) {
insert.clearBindings();
+ if (updatedContactCursor.isNull(PhoneQuery.PHONE_ID)) {
+ LogUtil.i(
+ "DialerDatabaseHelper.insertUpdatedContactsAndNumberPrefix",
+ "_id column null. Row was deleted during iteration, skipping");
+ continue;
+ }
+
// Handle string columns which can possibly be null first. In the case of certain
// null columns (due to malformed rows possibly inserted by third-party apps
// or sync adapters), skip the phone number row.
@@ -607,6 +623,13 @@
final SQLiteStatement insert = db.compileStatement(sqlInsert);
while (nameCursor.moveToNext()) {
+ if (nameCursor.isNull(columnIndexContactId)) {
+ LogUtil.i(
+ "DialerDatabaseHelper.insertNamePrefixes",
+ "contact_id column null. Row was deleted during iteration, skipping");
+ continue;
+ }
+
/** Computes a list of prefixes of a given contact name. */
final ArrayList<String> namePrefixes =
SmartDialPrefix.generateNamePrefixes(context, nameCursor.getString(columnIndexName));