diff options
Diffstat (limited to 'java')
9 files changed, 113 insertions, 14 deletions
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java index 4966d7fba..b1edd064d 100644 --- a/java/com/android/dialer/app/calllog/CallLogAdapter.java +++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java @@ -907,6 +907,10 @@ public class CallLogAdapter extends GroupingListAdapter (VERSION.SDK_INT >= VERSION_CODES.N) ? cursor.getString(CallLogQuery.VIA_NUMBER) : ""; final int numberPresentation = cursor.getInt(CallLogQuery.NUMBER_PRESENTATION); final ContactInfo cachedContactInfo = ContactInfoHelper.getContactInfo(cursor); + final int transcriptionState = + (VERSION.SDK_INT >= VERSION_CODES.O) + ? cursor.getInt(CallLogQuery.TRANSCRIPTION_STATE) + : PhoneCallDetailsHelper.TRANSCRIPTION_NOT_STARTED; final PhoneCallDetails details = new PhoneCallDetails(number, numberPresentation, postDialDigits); details.viaNumber = viaNumber; @@ -916,6 +920,7 @@ public class CallLogAdapter extends GroupingListAdapter details.features = getCallFeatures(cursor, count); details.geocode = cursor.getString(CallLogQuery.GEOCODED_LOCATION); details.transcription = cursor.getString(CallLogQuery.TRANSCRIPTION); + details.transcriptionState = transcriptionState; details.callTypes = getCallTypes(cursor, count); details.accountComponentName = cursor.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME); diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 02433f5bb..5cf33cab2 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -769,12 +769,20 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder return; } - final TextView view = phoneCallDetailsViews.voicemailTranscriptionView; - if (!isExpanded || TextUtils.isEmpty(view.getText())) { - view.setVisibility(View.GONE); + TextView transcriptView = phoneCallDetailsViews.voicemailTranscriptionView; + TextView transcriptBrandingView = phoneCallDetailsViews.voicemailTranscriptionBrandingView; + if (!isExpanded || TextUtils.isEmpty(transcriptView.getText())) { + Assert.checkArgument(TextUtils.isEmpty(transcriptBrandingView.getText())); + transcriptView.setVisibility(View.GONE); + transcriptBrandingView.setVisibility(View.GONE); return; } - view.setVisibility(View.VISIBLE); + transcriptView.setVisibility(View.VISIBLE); + if (TextUtils.isEmpty(transcriptBrandingView.getText())) { + phoneCallDetailsViews.voicemailTranscriptionBrandingView.setVisibility(View.GONE); + } else { + phoneCallDetailsViews.voicemailTranscriptionBrandingView.setVisibility(View.VISIBLE); + } } public void updatePhoto() { diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java index 0c720775a..6ece95ccd 100644 --- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java +++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java @@ -45,6 +45,13 @@ public class PhoneCallDetailsHelper { /** 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_AVALIABLE = 3; + private final Context mContext; private final Resources mResources; private final CallLogCache mCallLogCache; @@ -145,14 +152,38 @@ public class PhoneCallDetailsHelper { if (isVoicemail) { int relevantLinkTypes = Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS; views.voicemailTranscriptionView.setAutoLinkMask(relevantLinkTypes); - views.voicemailTranscriptionView.setText( - TextUtils.isEmpty(details.transcription) ? null : details.transcription); + boolean showTranscriptBranding = false; + if (!TextUtils.isEmpty(details.transcription)) { + views.voicemailTranscriptionView.setText(details.transcription); + + // 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_AVALIABLE; + } else { + if (details.transcriptionState == TRANSCRIPTION_IN_PROGRESS) { + views.voicemailTranscriptionView.setText( + mResources.getString(R.string.voicemail_transcription_in_progress)); + showTranscriptBranding = true; + } else if (details.transcriptionState == TRANSCRIPTION_FAILED) { + views.voicemailTranscriptionView.setText( + mResources.getString(R.string.voicemail_transcription_failed)); + } + } + + if (showTranscriptBranding) { + views.voicemailTranscriptionBrandingView.setText( + mResources.getString(R.string.voicemail_transcription_branding_text)); + } else { + views.voicemailTranscriptionBrandingView.setText(""); + } } // Bold if not read Typeface typeface = details.isRead ? Typeface.SANS_SERIF : Typeface.DEFAULT_BOLD; views.nameView.setTypeface(typeface); views.voicemailTranscriptionView.setTypeface(typeface); + views.voicemailTranscriptionBrandingView.setTypeface(typeface); views.callLocationAndDate.setTypeface(typeface); views.callLocationAndDate.setTextColor( ContextCompat.getColor( diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java index e2e27a179..283603170 100644 --- a/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java +++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java @@ -30,6 +30,7 @@ public final class PhoneCallDetailsViews { public final CallTypeIconsView callTypeIcons; public final TextView callLocationAndDate; public final TextView voicemailTranscriptionView; + public final TextView voicemailTranscriptionBrandingView; public final TextView callAccountLabel; private PhoneCallDetailsViews( @@ -38,12 +39,14 @@ public final class PhoneCallDetailsViews { CallTypeIconsView callTypeIcons, TextView callLocationAndDate, TextView voicemailTranscriptionView, + TextView voicemailTranscriptionBrandingView, TextView callAccountLabel) { this.nameView = nameView; this.callTypeView = callTypeView; this.callTypeIcons = callTypeIcons; this.callLocationAndDate = callLocationAndDate; this.voicemailTranscriptionView = voicemailTranscriptionView; + this.voicemailTranscriptionBrandingView = voicemailTranscriptionBrandingView; this.callAccountLabel = callAccountLabel; } @@ -61,6 +64,7 @@ public final class PhoneCallDetailsViews { (CallTypeIconsView) view.findViewById(R.id.call_type_icons), (TextView) view.findViewById(R.id.call_location_and_date), (TextView) view.findViewById(R.id.voicemail_transcription), + (TextView) view.findViewById(R.id.voicemail_transcription_branding), (TextView) view.findViewById(R.id.call_account_label)); } @@ -71,6 +75,7 @@ public final class PhoneCallDetailsViews { new CallTypeIconsView(context), new TextView(context), new TextView(context), + new TextView(context), new TextView(context)); } } diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item.xml b/java/com/android/dialer/app/res/layout/call_log_list_item.xml index afb50ffba..fd31fc2fc 100644 --- a/java/com/android/dialer/app/res/layout/call_log_list_item.xml +++ b/java/com/android/dialer/app/res/layout/call_log_list_item.xml @@ -148,17 +148,35 @@ android:visibility="gone" android:singleLine="true"/> - <TextView - android:id="@+id/voicemail_transcription" + <LinearLayout + android:id="@+id/transcription" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/call_log_icon_margin" - android:textColor="@color/call_log_voicemail_transcript_color" - android:textSize="@dimen/call_log_voicemail_transcription_text_size" - android:ellipsize="marquee" - android:visibility="gone" - android:singleLine="false" - android:maxLines="10"/> + android:orientation="vertical"> + + <TextView + android:id="@+id/voicemail_transcription_branding" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/call_log_voicemail_transcript_branding_color" + android:textSize="@dimen/call_log_voicemail_transcription_text_size" + android:paddingBottom="2dp" + android:visibility="gone" + android:singleLine="true"/> + + <TextView + android:id="@+id/voicemail_transcription" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/call_log_voicemail_transcript_color" + android:textSize="@dimen/call_log_voicemail_transcription_text_size" + android:ellipsize="marquee" + android:visibility="gone" + android:singleLine="false" + android:maxLines="10"/> + + </LinearLayout> </LinearLayout> diff --git a/java/com/android/dialer/app/res/values/colors.xml b/java/com/android/dialer/app/res/values/colors.xml index 2f6d87b49..b13020ecd 100644 --- a/java/com/android/dialer/app/res/values/colors.xml +++ b/java/com/android/dialer/app/res/values/colors.xml @@ -36,6 +36,8 @@ <color name="call_log_detail_color">#8a000000</color> <!-- 87% black --> <color name="call_log_voicemail_transcript_color">#de000000</color> + <!-- 54% black --> + <color name="call_log_voicemail_transcript_branding_color">#8a000000</color> <!-- 70% black --> <color name="call_log_action_color">#b3000000</color> <!-- 54% black --> diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml index 5549881c3..e9c1d2427 100644 --- a/java/com/android/dialer/app/res/values/strings.xml +++ b/java/com/android/dialer/app/res/values/strings.xml @@ -930,6 +930,15 @@ <!-- Label for setting that shows more information about the Phone app [CHAR LIMIT=30] --> <string name="about_phone_label">About</string> + <!-- Label indicating who provided the voicemail transcription [CHAR LIMIT=30] --> + <string name="voicemail_transcription_branding_text">Transcribed by Google</string> + + <!-- Label indicating that a voicemail transcription is in progress [CHAR LIMIT=30] --> + <string name="voicemail_transcription_in_progress">Google is transcribing...</string> + + <!-- Label indicating that a voicemail transcription failed [CHAR LIMIT=30] --> + <string name="voicemail_transcription_failed">Transcript not available</string> + <!-- Button text to prompt a user to open an sms conversation [CHAR LIMIT=NONE] --> <string name="view_conversation">View</string> diff --git a/java/com/android/dialer/calllogutils/PhoneCallDetails.java b/java/com/android/dialer/calllogutils/PhoneCallDetails.java index 13c528ad2..869a3d099 100644 --- a/java/com/android/dialer/calllogutils/PhoneCallDetails.java +++ b/java/com/android/dialer/calllogutils/PhoneCallDetails.java @@ -99,6 +99,9 @@ public class PhoneCallDetails { // Voicemail transcription public String transcription; + // Voicemail transcription state, ie. in-progress, failed, etc. + public int transcriptionState; + // The display string for the number. public String displayNumber; diff --git a/java/com/android/dialer/phonenumbercache/CallLogQuery.java b/java/com/android/dialer/phonenumbercache/CallLogQuery.java index 6d4756927..2ebc302cf 100644 --- a/java/com/android/dialer/phonenumbercache/CallLogQuery.java +++ b/java/com/android/dialer/phonenumbercache/CallLogQuery.java @@ -60,6 +60,9 @@ public final class CallLogQuery { @RequiresApi(VERSION_CODES.N) public static final int VIA_NUMBER = 25; + @RequiresApi(VERSION_CODES.O) + public static final int TRANSCRIPTION_STATE = 26; + private static final String[] PROJECTION_M = new String[] { Calls._ID, // 0 @@ -97,8 +100,23 @@ public final class CallLogQuery { PROJECTION_N = projectionList.toArray(new String[projectionList.size()]); } + private static final String[] PROJECTION_O; + + // TODO(mdooley): remove when this becomes a public api + // Copied from android.provider.CallLog.Calls + private static final String TRANSCRIPTION_STATE_COLUMN = "transcription_state"; + + static { + List<String> projectionList = new ArrayList<>(Arrays.asList(PROJECTION_N)); + projectionList.add(TRANSCRIPTION_STATE_COLUMN); + PROJECTION_O = projectionList.toArray(new String[projectionList.size()]); + } + @NonNull public static String[] getProjection() { + if (VERSION.SDK_INT >= VERSION_CODES.O) { + return PROJECTION_O; + } if (VERSION.SDK_INT >= VERSION_CODES.N) { return PROJECTION_N; } |