Adding dialer specific transcription error codes

These new states will be used to show descriptive failure messages to the user.

Also moved the VoicemailCompat class to avoid duplicate code.

Bug: 37340510
Test: none
PiperOrigin-RevId: 167314611
Change-Id: I618d7f196ea2b0161cbd33479553cae3521328d7
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 61129a7..6540b6f 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -70,6 +70,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.AsyncTaskExecutor;
 import com.android.dialer.common.concurrent.AsyncTaskExecutors;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -907,7 +908,7 @@
     final int transcriptionState =
         (VERSION.SDK_INT >= VERSION_CODES.O)
             ? cursor.getInt(CallLogQuery.TRANSCRIPTION_STATE)
-            : PhoneCallDetailsHelper.TRANSCRIPTION_NOT_STARTED;
+            : VoicemailCompat.TRANSCRIPTION_NOT_STARTED;
     final PhoneCallDetails details =
         new PhoneCallDetails(number, numberPresentation, postDialDigits);
     details.viaNumber = viaNumber;
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index c1a00e5..a6e8f10 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -31,6 +31,7 @@
 import com.android.dialer.app.R;
 import com.android.dialer.app.calllog.calllogcache.CallLogCache;
 import com.android.dialer.calllogutils.PhoneCallDetails;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
 import com.android.dialer.logging.ContactSource;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
@@ -45,13 +46,6 @@
   /** The maximum number of icons will be shown to represent the call types in a group. */
   private static final int MAX_CALL_TYPE_ICONS = 3;
 
-  // TODO(mdooley): remove when these api's become public
-  // Copied from android.provider.VoicemailContract
-  static final int TRANSCRIPTION_NOT_STARTED = 0;
-  static final int TRANSCRIPTION_IN_PROGRESS = 1;
-  static final int TRANSCRIPTION_FAILED = 2;
-  static final int TRANSCRIPTION_AVAILABLE = 3;
-
   private final Context mContext;
   private final Resources mResources;
   private final CallLogCache mCallLogCache;
@@ -159,12 +153,13 @@
         // Set the branding text if the voicemail was transcribed by google
         // TODO(mdooley): the transcription state is only set by the google transcription code,
         // but a better solution would be to check the SOURCE_PACKAGE
-        showTranscriptBranding = details.transcriptionState == TRANSCRIPTION_AVAILABLE;
+        showTranscriptBranding =
+            details.transcriptionState == VoicemailCompat.TRANSCRIPTION_AVAILABLE;
       } else {
-        if (details.transcriptionState == TRANSCRIPTION_IN_PROGRESS) {
+        if (details.transcriptionState == VoicemailCompat.TRANSCRIPTION_IN_PROGRESS) {
           views.voicemailTranscriptionView.setText(
               mResources.getString(R.string.voicemail_transcription_in_progress));
-        } else if (details.transcriptionState == TRANSCRIPTION_FAILED) {
+        } else if (details.transcriptionState == VoicemailCompat.TRANSCRIPTION_FAILED) {
           views.voicemailTranscriptionView.setText(
               mResources.getString(R.string.voicemail_transcription_failed));
         }
diff --git a/java/com/android/voicemail/impl/transcribe/VoicemailCompat.java b/java/com/android/dialer/compat/android/provider/VoicemailCompat.java
similarity index 73%
rename from java/com/android/voicemail/impl/transcribe/VoicemailCompat.java
rename to java/com/android/dialer/compat/android/provider/VoicemailCompat.java
index c6e30c6..175ea5d 100644
--- a/java/com/android/voicemail/impl/transcribe/VoicemailCompat.java
+++ b/java/com/android/dialer/compat/android/provider/VoicemailCompat.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License
  */
-package com.android.voicemail.impl.transcribe;
+package com.android.dialer.compat.android.provider;
 
 /**
  * Provide access to new API constants before they're publicly available
@@ -47,7 +47,7 @@
 
   /**
    * Value of {@link #TRANSCRIPTION_STATE} when the voicemail transcription has been attempted and
-   * failed.
+   * failed for an unspecified reason.
    */
   public static final int TRANSCRIPTION_FAILED = 2;
 
@@ -56,4 +56,20 @@
    * result has been stored in the {@link #TRANSCRIPTION} column.
    */
   public static final int TRANSCRIPTION_AVAILABLE = 3;
+
+  /**
+   * Value of {@link #TRANSCRIPTION_STATE} when the voicemail transcription has been attempted and
+   * failed because no speech was detected.
+   *
+   * <p>Internal dialer use only, not part of the public SDK.
+   */
+  public static final int TRANSCRIPTION_FAILED_NO_SPEECH_DETECTED = -1;
+
+  /**
+   * Value of {@link #TRANSCRIPTION_STATE} when the voicemail transcription has been attempted and
+   * failed because the language was not supported.
+   *
+   * <p>Internal dialer use only, not part of the public SDK.
+   */
+  public static final int TRANSCRIPTION_FAILED_LANGUAGE_NOT_SUPPORTED = -2;
 }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
index 9d3c2e4..a9a3722 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
@@ -30,6 +30,7 @@
 import android.util.Pair;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java b/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
index b5f29da..fbab076 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
@@ -22,6 +22,7 @@
 import android.text.TextUtils;
 import android.util.Pair;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.compat.android.provider.VoicemailCompat;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.voicemail.impl.VvmLog;
@@ -124,24 +125,29 @@
     } else {
       VvmLog.i(TAG, "transcribeVoicemail, transcription unsuccessful, " + status);
       switch (status) {
+        case FAILED_NO_SPEECH_DETECTED:
+          updateTranscriptionAndState(
+              transcript, VoicemailCompat.TRANSCRIPTION_FAILED_NO_SPEECH_DETECTED);
+          Logger.get(context)
+              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_NO_SPEECH_DETECTED);
+          break;
         case FAILED_LANGUAGE_NOT_SUPPORTED:
+          updateTranscriptionAndState(
+              transcript, VoicemailCompat.TRANSCRIPTION_FAILED_LANGUAGE_NOT_SUPPORTED);
           Logger.get(context)
               .logImpression(
                   DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_LANGUAGE_NOT_SUPPORTED);
           break;
-        case FAILED_NO_SPEECH_DETECTED:
-          Logger.get(context)
-              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_NO_SPEECH_DETECTED);
-          break;
         case EXPIRED:
+          updateTranscriptionAndState(transcript, VoicemailCompat.TRANSCRIPTION_FAILED);
           Logger.get(context)
               .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_EXPIRED);
           break;
         default:
+          updateTranscriptionAndState(transcript, VoicemailCompat.TRANSCRIPTION_FAILED);
           Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_EMPTY);
           break;
       }
-      updateTranscriptionAndState(transcript, VoicemailCompat.TRANSCRIPTION_FAILED);
     }
   }