When transcription setting is enabled, retranscribe voicemails

When transcription toggle is turned off, we delete all local transcriptions. However when it is turned back on, we should re-transcribe all those( previously transcribed, then deleted) voicemails again.

Bug: 74033229
Test: N/A
PiperOrigin-RevId: 190640972
Change-Id: Iaaf324e74c7630852daeb314f34c2c3095fe3196
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index b0881c9..187ded9 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -125,6 +125,11 @@
   @Override
   public boolean isVoicemailTranscriptionAvailable(
       Context context, PhoneAccountHandle phoneAccountHandle) {
+    if (phoneAccountHandle == null) {
+      LogUtil.i(
+          "VoicemailClientImpl.isVoicemailTranscriptionAvailable", "phone account handle is null");
+    }
+
     if (!BuildCompat.isAtLeastO()) {
       LogUtil.i(
           "VoicemailClientImpl.isVoicemailTranscriptionAvailable", "not running on O or later");
@@ -198,6 +203,9 @@
         "transcription must be available before enabling/disabling it");
     VisualVoicemailSettingsUtil.setVoicemailTranscriptionEnabled(
         context, phoneAccountHandle, enabled);
+    if (enabled) {
+      TranscriptionBackfillService.scheduleTask(context, phoneAccountHandle);
+    }
   }
 
   @Override
diff --git a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
index e7248c4..3acf60d 100644
--- a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
+++ b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
@@ -23,9 +23,11 @@
 import android.support.annotation.VisibleForTesting;
 import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
+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.compat.android.provider.VoicemailCompat;
 import com.android.voicemail.VoicemailComponent;
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
 import com.android.voicemail.impl.VisualVoicemailPreferences;
@@ -130,6 +132,7 @@
 
   public static boolean isEnabled(Context context, PhoneAccountHandle phoneAccount) {
     if (phoneAccount == null) {
+      LogUtil.i("VisualVoicemailSettingsUtil.isEnabled", "phone account is null");
       return false;
     }
 
@@ -213,9 +216,10 @@
 
     @Override
     public Void doInBackground(Void unused) {
-
       ContentValues contentValues = new ContentValues();
-      contentValues.put(Voicemails.TRANSCRIPTION, "");
+      contentValues.putNull(Voicemails.TRANSCRIPTION);
+      contentValues.put(
+          VoicemailCompat.TRANSCRIPTION_STATE, VoicemailCompat.TRANSCRIPTION_NOT_STARTED);
 
       Selection selection =
           Selection.builder()
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java b/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java
index 8161e71..8fc40ee 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Bundle;
 import android.support.annotation.WorkerThread;
 import android.support.v4.app.JobIntentService;
 import android.support.v4.os.BuildCompat;
@@ -66,6 +67,10 @@
   protected void onHandleWork(Intent intent) {
     LogUtil.enterBlock("TranscriptionBackfillService.onHandleWork");
 
+    Bundle bundle = intent.getExtras();
+    final PhoneAccountHandle account =
+        (PhoneAccountHandle) bundle.get(TranscriptionService.EXTRA_ACCOUNT_HANDLE);
+
     TranscriptionDbHelper dbHelper = new TranscriptionDbHelper(this);
     List<Uri> untranscribed = dbHelper.getUntranscribedVoicemails();
     LogUtil.i(
@@ -75,7 +80,7 @@
     for (Uri uri : untranscribed) {
       ThreadUtil.postOnUiThread(
           () -> {
-            TranscriptionService.scheduleNewVoicemailTranscriptionJob(this, uri, null, false);
+            TranscriptionService.scheduleNewVoicemailTranscriptionJob(this, uri, account, false);
           });
     }
   }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
index 24c07cc..6ffb848 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
@@ -87,7 +87,14 @@
     Assert.isWorkerThread();
     List<Uri> untranscribed = new ArrayList<>();
     String whereClause =
-        Voicemails.TRANSCRIPTION + " is NULL AND " + VoicemailCompat.TRANSCRIPTION_STATE + "=?";
+        "("
+            + Voicemails.TRANSCRIPTION
+            + " is NULL OR "
+            + Voicemails.TRANSCRIPTION
+            + " = '')"
+            + " AND "
+            + VoicemailCompat.TRANSCRIPTION_STATE
+            + "=?";
     String[] whereArgs = {String.valueOf(VoicemailCompat.TRANSCRIPTION_NOT_STARTED)};
     try (Cursor cursor = contentResolver.query(uri, PROJECTION, whereClause, whereArgs, null)) {
       if (cursor == null) {