Add Support for transcription state in the AnnotatedCallLog
Transcription state column is needed for voicemail transcriptions. This CL adds the support for it in the NUI so that it maybe used by the VM Tab.
Bug: 72491920
Test: Unit Tests
PiperOrigin-RevId: 184335015
Change-Id: I14a71890224216c957e0d6146af9dafaa1550865
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index fea3e91..c838737 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -55,7 +55,8 @@
+ (AnnotatedCallLog.TRANSCRIPTION + " integer, ")
+ (AnnotatedCallLog.VOICEMAIL_URI + " text, ")
+ (AnnotatedCallLog.CALL_TYPE + " integer not null, ")
- + (AnnotatedCallLog.NUMBER_ATTRIBUTES + " blob")
+ + (AnnotatedCallLog.NUMBER_ATTRIBUTES + " blob, ")
+ + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer")
+ ");";
/**
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index 4fee4e5..c181d75 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -17,7 +17,9 @@
package com.android.dialer.calllog.database.contract;
import android.net.Uri;
+import android.os.Build;
import android.provider.BaseColumns;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.android.dialer.constants.Constants;
import java.util.Arrays;
@@ -200,6 +202,15 @@
public static final String TRANSCRIPTION = "transcription";
/**
+ * See {@link VoicemailCompat.TRANSCRIPTION_STATE}
+ *
+ * <p>Only populated in {@link Build.VERSION_CODES.O} and above
+ *
+ * <p>TYPE: INTEGER
+ */
+ public static final String TRANSCRIPTION_STATE = "transcription_state";
+
+ /**
* See {@link android.provider.CallLog.Calls#VOICEMAIL_URI}.
*
* <p>TYPE: TEXT
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 24410ee..ee484d9 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -24,6 +24,8 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
import android.os.Handler;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
@@ -32,6 +34,7 @@
import android.support.annotation.ColorInt;
import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
import android.telecom.PhoneAccount;
@@ -49,6 +52,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
import com.android.dialer.storage.StorageComponent;
import com.android.dialer.telecom.TelecomUtil;
@@ -58,6 +62,7 @@
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -235,26 +240,7 @@
.getContentResolver()
.query(
Calls.CONTENT_URI_WITH_VOICEMAIL,
- new String[] {
- Calls._ID,
- Calls.DATE,
- Calls.LAST_MODIFIED, // TODO(a bug): Not available in M
- Calls.NUMBER,
- Calls.NUMBER_PRESENTATION,
- Calls.TYPE,
- Calls.COUNTRY_ISO,
- Calls.DURATION,
- Calls.DATA_USAGE,
- Calls.TRANSCRIPTION,
- Calls.VOICEMAIL_URI,
- Calls.IS_READ,
- Calls.NEW,
- Calls.GEOCODED_LOCATION,
- Calls.PHONE_ACCOUNT_COMPONENT_NAME,
- Calls.PHONE_ACCOUNT_ID,
- Calls.FEATURES,
- Calls.POST_DIAL_DIGITS // TODO(a bug): Not available in M
- },
+ getProjection(),
// TODO(a bug): LAST_MODIFIED not available on M
Calls.LAST_MODIFIED + " > ? AND " + Voicemails.DELETED + " = 0",
new String[] {String.valueOf(previousTimestampProcessed)},
@@ -358,6 +344,7 @@
contentValues.put(AnnotatedCallLog.DATA_USAGE, dataUsage);
contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
+ setTranscriptionState(cursor, contentValues);
if (existingAnnotatedCallLogIds.contains(id)) {
mutations.update(id, contentValues);
@@ -369,6 +356,53 @@
}
}
+ private void setTranscriptionState(Cursor cursor, ContentValues contentValues) {
+ if (VERSION.SDK_INT >= VERSION_CODES.O) {
+ int transcriptionStateColumn =
+ cursor.getColumnIndexOrThrow(VoicemailCompat.TRANSCRIPTION_STATE);
+ int transcriptionState = cursor.getInt(transcriptionStateColumn);
+ contentValues.put(VoicemailCompat.TRANSCRIPTION_STATE, transcriptionState);
+ }
+ }
+
+ private static final String[] PROJECTION_PRE_O =
+ new String[] {
+ Calls._ID,
+ Calls.DATE,
+ Calls.LAST_MODIFIED, // TODO(a bug): Not available in M
+ Calls.NUMBER,
+ Calls.NUMBER_PRESENTATION,
+ Calls.TYPE,
+ Calls.COUNTRY_ISO,
+ Calls.DURATION,
+ Calls.DATA_USAGE,
+ Calls.TRANSCRIPTION,
+ Calls.VOICEMAIL_URI,
+ Calls.IS_READ,
+ Calls.NEW,
+ Calls.GEOCODED_LOCATION,
+ Calls.PHONE_ACCOUNT_COMPONENT_NAME,
+ Calls.PHONE_ACCOUNT_ID,
+ Calls.FEATURES,
+ Calls.POST_DIAL_DIGITS // TODO(a bug): Not available in M
+ };
+
+ @RequiresApi(VERSION_CODES.O)
+ private static final String[] PROJECTION_O_AND_LATER;
+
+ static {
+ List<String> projectionList = new ArrayList<>(Arrays.asList(PROJECTION_PRE_O));
+ projectionList.add(VoicemailCompat.TRANSCRIPTION_STATE);
+ PROJECTION_O_AND_LATER = projectionList.toArray(new String[projectionList.size()]);
+ }
+
+ private String[] getProjection() {
+ if (VERSION.SDK_INT >= VERSION_CODES.O) {
+ return PROJECTION_O_AND_LATER;
+ }
+ return PROJECTION_PRE_O;
+ }
+
private void populatePhoneAccountLabelAndColor(
Context appContext,
ContentValues contentValues,
diff --git a/java/com/android/dialer/compat/android/provider/VoicemailCompat.java b/java/com/android/dialer/compat/android/provider/VoicemailCompat.java
index 02eebb3..35e0ea5 100644
--- a/java/com/android/dialer/compat/android/provider/VoicemailCompat.java
+++ b/java/com/android/dialer/compat/android/provider/VoicemailCompat.java
@@ -16,10 +16,10 @@
package com.android.dialer.compat.android.provider;
/**
- * Provide access to new API constants before they're publicly available
+ * Provide access to Voicemail Transcription API constants as they won't be publicly available.
*
- * <p>Copied from android.provider.VoicemailContract.Voicemails. These should become public in O-MR1
- * and these constants can be removed then.
+ * <p>Copied from android.provider.VoicemailContract.Voicemails. These do not plan to become public
+ * in O-MR1 or in the near future.
*/
public class VoicemailCompat {
diff --git a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
index 74d1b61..11e7888 100644
--- a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
+++ b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
@@ -45,6 +45,7 @@
AnnotatedCallLog.VOICEMAIL_URI,
AnnotatedCallLog.IS_READ,
AnnotatedCallLog.NUMBER_ATTRIBUTES,
+ AnnotatedCallLog.TRANSCRIPTION_STATE
};
// Indexes for VOICEMAIL_COLUMNS
@@ -59,6 +60,7 @@
private static final int VOICEMAIL_URI = 8;
private static final int IS_READ = 9;
private static final int NUMBER_ATTRIBUTES = 10;
+ private static final int TRANSCRIPTION_STATE = 11;
// TODO(zachh): Optimize indexes
VoicemailCursorLoader(Context context) {
@@ -105,6 +107,7 @@
.setCallType(cursor.getInt(CALL_TYPE))
.setIsRead(cursor.getInt(IS_READ))
.setNumberAttributes(numberAttributes)
+ .setTranscriptionState(cursor.getInt(TRANSCRIPTION_STATE))
.build();
}
diff --git a/java/com/android/dialer/voicemail/model/VoicemailEntry.java b/java/com/android/dialer/voicemail/model/VoicemailEntry.java
index f17a23e..5830fb1 100644
--- a/java/com/android/dialer/voicemail/model/VoicemailEntry.java
+++ b/java/com/android/dialer/voicemail/model/VoicemailEntry.java
@@ -20,6 +20,7 @@
import android.support.annotation.Nullable;
import com.android.dialer.DialerPhoneNumber;
import com.android.dialer.NumberAttributes;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.google.auto.value.AutoValue;
/** Data class containing the contents of a voicemail entry from the AnnotatedCallLog. */
@@ -34,7 +35,8 @@
.setNumberAttributes(NumberAttributes.getDefaultInstance())
.setDuration(0)
.setCallType(0)
- .setIsRead(0);
+ .setIsRead(0)
+ .setTranscriptionState(VoicemailCompat.TRANSCRIPTION_NOT_STARTED);
}
public abstract int id();
@@ -44,7 +46,6 @@
@NonNull
public abstract DialerPhoneNumber number();
-
@Nullable
public abstract String formattedNumber();
@@ -65,6 +66,8 @@
public abstract NumberAttributes numberAttributes();
+ public abstract int transcriptionState();
+
/** Builder for {@link VoicemailEntry}. */
@AutoValue.Builder
public abstract static class Builder {
@@ -91,6 +94,8 @@
public abstract Builder setNumberAttributes(NumberAttributes numberAttributes);
+ public abstract Builder setTranscriptionState(int transcriptionState);
+
public abstract VoicemailEntry build();
}
}