Add column for call mapping id to AnnotatedCallLog database.
This will ensure call mapping used by RTT etc. won't break when migrating to
new way to generate the call mapping id since they are stored in the database
already.
Bug: 77717594
Test: unit tests
PiperOrigin-RevId: 195132562
Change-Id: Ieb52489b19b37ac2701967eb570a96457ceed4c0
diff --git a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
index c22ec73..a7e1771 100644
--- a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
+++ b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
@@ -42,7 +42,8 @@
AnnotatedCallLog.TIMESTAMP,
AnnotatedCallLog.DURATION,
AnnotatedCallLog.DATA_USAGE,
- AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME
+ AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME,
+ AnnotatedCallLog.CALL_MAPPING_ID
};
// Indexes for COLUMNS_FOR_CALL_DETAILS
@@ -53,6 +54,7 @@
private static final int DURATION = 4;
private static final int DATA_USAGE = 5;
private static final int PHONE_ACCOUNT_COMPONENT_NAME = 6;
+ private static final int CALL_MAPPING_ID = 7;
CallDetailsCursorLoader(Context context, CoalescedIds coalescedIds) {
super(
@@ -140,9 +142,7 @@
.setDate(cursor.getLong(TIMESTAMP))
.setDuration(cursor.getLong(DURATION))
.setDataUsage(cursor.getLong(DATA_USAGE))
-
- .setCallMappingId(String.valueOf(cursor.getLong(TIMESTAMP)));
-
+ .setCallMappingId(cursor.getString(CALL_MAPPING_ID));
String phoneAccountComponentName = cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME);
entry.setIsDuoCall(
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 61f7deb..32f303f 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -45,7 +45,7 @@
@ApplicationContext Context appContext,
@AnnotatedCallLogMaxRows int maxRows,
@BackgroundExecutor ListeningExecutorService backgroundExecutor) {
- super(appContext, FILENAME, null, 1);
+ super(appContext, FILENAME, null, 2);
this.appContext = appContext;
this.maxRows = maxRows;
@@ -75,9 +75,24 @@
+ (AnnotatedCallLog.NUMBER_ATTRIBUTES + " blob, ")
+ (AnnotatedCallLog.IS_VOICEMAIL_CALL + " integer, ")
+ (AnnotatedCallLog.VOICEMAIL_CALL_TAG + " text, ")
- + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer")
+ + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer, ")
+ + (AnnotatedCallLog.CALL_MAPPING_ID + " text")
+ ");";
+ private static final String ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN =
+ "alter table "
+ + AnnotatedCallLog.TABLE
+ + " add column "
+ + AnnotatedCallLog.CALL_MAPPING_ID
+ + " text;";
+ private static final String UPDATE_CALL_MAPPING_ID_COLUMN =
+ "update "
+ + AnnotatedCallLog.TABLE
+ + " set "
+ + AnnotatedCallLog.CALL_MAPPING_ID
+ + " = "
+ + AnnotatedCallLog.TIMESTAMP;
+
/**
* Deletes all but the first maxRows rows (by timestamp, excluding voicemails) to keep the table a
* manageable size.
@@ -143,7 +158,12 @@
}
@Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ if (oldVersion == 1 && newVersion == 2) {
+ db.execSQL(ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN);
+ db.execSQL(UPDATE_CALL_MAPPING_ID_COLUMN);
+ }
+ }
/** Closes the database and deletes it. */
public ListenableFuture<Void> delete() {
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index 5e4e4af..ee888d1 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -221,6 +221,17 @@
* <p>TYPE: TEXT
*/
public static final String VOICEMAIL_URI = "voicemail_uri";
+
+ /**
+ * An unique id to associate this call log row to a {@link android.telecom.Call}.
+ *
+ * <p>For pre-Q device, this is same as {@link TIMESTAMP}.
+ *
+ * <p>For Q+ device, this will be copied from {@link android.provider.CallLog.Calls}.
+ *
+ * <p>Type: TEXT
+ */
+ public static final String CALL_MAPPING_ID = "call_mapping_id";
}
/**
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 661b249..fb18e89 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -367,6 +367,9 @@
contentValues.put(AnnotatedCallLog.DATA_USAGE, dataUsage);
contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
+
+ contentValues.put(AnnotatedCallLog.CALL_MAPPING_ID, String.valueOf(date));
+
setTranscriptionState(cursor, contentValues);
if (existingAnnotatedCallLogIds.contains(id)) {