From b2b77b3b4154c37b5caf39990332d00c9e9122c7 Mon Sep 17 00:00:00 2001 From: mdooley Date: Thu, 7 Sep 2017 16:28:09 -0700 Subject: Updating voicemail notifications for transcription, part 2 Changing voicemail notifications to match the latest mocks, (replacing the 'Voicemail' title with what was the notification content, and putting the voicemail status or transcription in the notification content). The notifications will be updated in a following cl. screen shot: https://drive.google.com/open?id=0B9o_KvtLkcuIbDdjaTNHTFFZLW9YZEo1SG5scDR6SzloaWc4 Bug: 37340510 Test: manual PiperOrigin-RevId: 167928866 Change-Id: I81492f7fbf1cc398401a948e036854d6a8ff878b --- .../calllog/CallLogNotificationsQueryHelper.java | 30 ++++++++++-- .../dialer/app/calllog/MissedCallNotifier.java | 4 +- .../app/calllog/VisualVoicemailNotifier.java | 55 +++++++++++++++++----- .../android/dialer/logging/dialer_impression.proto | 7 ++- 4 files changed, 75 insertions(+), 21 deletions(-) (limited to 'java') diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java index c749b65ba..649a6639d 100644 --- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java +++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java @@ -24,7 +24,7 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; -import android.os.Build.VERSION_CODES; +import android.os.Build; import android.provider.CallLog.Calls; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -35,14 +35,17 @@ import android.text.TextUtils; import com.android.dialer.app.R; import com.android.dialer.calllogutils.PhoneNumberDisplayUtil; import com.android.dialer.common.LogUtil; +import com.android.dialer.compat.android.provider.VoicemailCompat; import com.android.dialer.location.GeoUtil; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.util.PermissionsUtil; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** Helper class operating on call log notifications. */ +@TargetApi(Build.VERSION_CODES.M) public class CallLogNotificationsQueryHelper { private final Context mContext; @@ -230,6 +233,7 @@ public class CallLogNotificationsQueryHelper { public final String transcription; public final String countryIso; public final long dateMs; + public final int transcriptionState; public NewCall( Uri callsUri, @@ -240,7 +244,8 @@ public class CallLogNotificationsQueryHelper { String accountId, String transcription, String countryIso, - long dateMs) { + long dateMs, + int transcriptionState) { this.callsUri = callsUri; this.voicemailUri = voicemailUri; this.number = number; @@ -250,6 +255,7 @@ public class CallLogNotificationsQueryHelper { this.transcription = transcription; this.countryIso = countryIso; this.dateMs = dateMs; + this.transcriptionState = transcriptionState; } } @@ -270,6 +276,16 @@ public class CallLogNotificationsQueryHelper { Calls.COUNTRY_ISO, Calls.DATE }; + + private static final String[] PROJECTION_O; + + static { + List list = new ArrayList<>(); + list.addAll(Arrays.asList(PROJECTION)); + list.add(VoicemailCompat.TRANSCRIPTION_STATE); + PROJECTION_O = list.toArray(new String[list.size()]); + } + private static final int ID_COLUMN_INDEX = 0; private static final int NUMBER_COLUMN_INDEX = 1; private static final int VOICEMAIL_URI_COLUMN_INDEX = 2; @@ -279,6 +295,7 @@ public class CallLogNotificationsQueryHelper { private static final int TRANSCRIPTION_COLUMN_INDEX = 6; private static final int COUNTRY_ISO_COLUMN_INDEX = 7; private static final int DATE_COLUMN_INDEX = 8; + private static final int TRANSCRIPTION_STATE_COLUMN_INDEX = 9; private final ContentResolver mContentResolver; private final Context mContext; @@ -290,7 +307,7 @@ public class CallLogNotificationsQueryHelper { @Override @Nullable - @TargetApi(VERSION_CODES.M) + @TargetApi(Build.VERSION_CODES.M) public List query(int type) { if (!PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_CALL_LOG)) { LogUtil.w( @@ -309,7 +326,7 @@ public class CallLogNotificationsQueryHelper { try (Cursor cursor = mContentResolver.query( Calls.CONTENT_URI_WITH_VOICEMAIL, - PROJECTION, + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) ? PROJECTION_O : PROJECTION, selection, selectionArgs, Calls.DEFAULT_SORT_ORDER)) { @@ -345,7 +362,10 @@ public class CallLogNotificationsQueryHelper { cursor.getString(PHONE_ACCOUNT_ID_COLUMN_INDEX), cursor.getString(TRANSCRIPTION_COLUMN_INDEX), cursor.getString(COUNTRY_ISO_COLUMN_INDEX), - cursor.getLong(DATE_COLUMN_INDEX)); + cursor.getLong(DATE_COLUMN_INDEX), + Build.VERSION.SDK_INT >= Build.VERSION_CODES.O + ? cursor.getInt(TRANSCRIPTION_STATE_COLUMN_INDEX) + : VoicemailCompat.TRANSCRIPTION_NOT_STARTED); } } } diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java index b363b5ab6..de766191a 100644 --- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java +++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java @@ -47,6 +47,7 @@ import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor.Worker; +import com.android.dialer.compat.android.provider.VoicemailCompat; import com.android.dialer.notification.DialerNotificationManager; import com.android.dialer.notification.NotificationChannelId; import com.android.dialer.notification.NotificationManagerUtils; @@ -153,7 +154,8 @@ public class MissedCallNotifier implements Worker, Void> { null, null, null, - System.currentTimeMillis()); + System.currentTimeMillis(), + VoicemailCompat.TRANSCRIPTION_NOT_STARTED); // TODO: look up caller ID that is not in contacts. ContactInfo contactInfo = diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java index cbadfd317..27963491d 100644 --- a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java +++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java @@ -27,7 +27,6 @@ import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.os.BuildCompat; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; @@ -39,6 +38,7 @@ import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall; import com.android.dialer.app.contactinfo.ContactPhotoLoader; import com.android.dialer.app.list.DialtactsPagerAdapter; import com.android.dialer.common.LogUtil; +import com.android.dialer.compat.android.provider.VoicemailCompat; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.notification.DialerNotificationManager; @@ -84,7 +84,7 @@ final class VisualVoicemailNotifier { .setGroupSummary(true) .setContentIntent(newVoicemailIntent(context, null)); - if (BuildCompat.isAtLeastO()) { + if (VERSION.SDK_INT >= VERSION_CODES.O) { groupSummary.setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN); PhoneAccountHandle handle = getAccountForCall(context, newCalls.get(0)); groupSummary.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle)); @@ -136,7 +136,7 @@ final class VisualVoicemailNotifier { .setAutoCancel(true); } - private static Notification createNotificationForVoicemail( + static Notification createNotificationForVoicemail( @NonNull Context context, @NonNull NewCall voicemail, @NonNull Map contactInfos) { @@ -146,10 +146,6 @@ final class VisualVoicemailNotifier { Notification.Builder builder = createNotificationBuilder(context) .setContentTitle( - context - .getResources() - .getQuantityString(R.plurals.notification_voicemail_title, 1, 1)) - .setContentText( ContactDisplayUtils.getTtsSpannedPhoneNumber( context.getResources(), R.string.notification_new_voicemail_ticker, @@ -158,13 +154,51 @@ final class VisualVoicemailNotifier { .setSound(getVoicemailRingtoneUri(context, handle)) .setDefaults(getNotificationDefaultFlags(context, handle)); + if (!TextUtils.isEmpty(voicemail.transcription)) { + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION); + builder.setContentText(voicemail.transcription); + } else { + switch (voicemail.transcriptionState) { + case VoicemailCompat.TRANSCRIPTION_IN_PROGRESS: + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_IN_PROGRESS); + builder.setContentText(context.getString(R.string.voicemail_transcription_in_progress)); + break; + case VoicemailCompat.TRANSCRIPTION_FAILED_NO_SPEECH_DETECTED: + Logger.get(context) + .logImpression( + DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION_FAILURE); + builder.setContentText( + context.getString(R.string.voicemail_transcription_failed_no_speech)); + break; + case VoicemailCompat.TRANSCRIPTION_FAILED_LANGUAGE_NOT_SUPPORTED: + Logger.get(context) + .logImpression( + DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION_FAILURE); + builder.setContentText( + context.getString(R.string.voicemail_transcription_failed_language_not_supported)); + break; + case VoicemailCompat.TRANSCRIPTION_FAILED: + Logger.get(context) + .logImpression( + DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION_FAILURE); + builder.setContentText(context.getString(R.string.voicemail_transcription_failed)); + break; + default: + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_NO_TRANSCRIPTION); + break; + } + } + if (voicemail.voicemailUri != null) { builder.setDeleteIntent( CallLogNotificationsService.createMarkSingleNewVoicemailAsOldIntent( context, voicemail.voicemailUri)); } - if (BuildCompat.isAtLeastO()) { + if (VERSION.SDK_INT >= VERSION_CODES.O) { builder.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle)); } @@ -173,11 +207,6 @@ final class VisualVoicemailNotifier { if (photoIcon != null) { builder.setLargeIcon(photoIcon); } - if (!TextUtils.isEmpty(voicemail.transcription)) { - Logger.get(context) - .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION); - builder.setStyle(new Notification.BigTextStyle().bigText(voicemail.transcription)); - } builder.setContentIntent(newVoicemailIntent(context, voicemail)); Logger.get(context).logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED); return builder.build(); diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto index 94af6c3fd..154460ccb 100644 --- a/java/com/android/dialer/logging/dialer_impression.proto +++ b/java/com/android/dialer/logging/dialer_impression.proto @@ -532,7 +532,10 @@ message DialerImpression { IN_CALL_DIALPAD_CLOSE_BUTTON_PRESSED = 1267; // More voicemail transcription impressions - VVM_TRANSCRIPTION_JOB_STOPPED = 1268; - VVM_TRANSCRIPTION_TASK_CANCELLED = 1269; + VVM_NOTIFICATION_CREATED_WITH_IN_PROGRESS = 1268; + VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION_FAILURE = 1269; + VVM_NOTIFICATION_CREATED_WITH_NO_TRANSCRIPTION = 1270; + VVM_TRANSCRIPTION_JOB_STOPPED = 1271; + VVM_TRANSCRIPTION_TASK_CANCELLED = 1272; } } -- cgit v1.2.3