diff options
author | Yorke Lee <yorkelee@google.com> | 2014-07-24 20:57:04 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-07-24 15:36:02 +0000 |
commit | c7b950714189bdf4d1adcf9562c5599de5ca4250 (patch) | |
tree | eff8c726953d7cf891a1688900aa7dffadca6d19 /src | |
parent | f543baadd1119bad7cd9ff7ed39e5598c6fc50d6 (diff) | |
parent | 8cd9423bd04584acbcbf178bf6a1c1953debb8da (diff) |
Merge "Add voicemail transcriptions to Dialer" into lmp-dev
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/dialer/CallDetailActivity.java | 46 | ||||
-rw-r--r-- | src/com/android/dialer/PhoneCallDetails.java | 27 | ||||
-rw-r--r-- | src/com/android/dialer/PhoneCallDetailsHelper.java | 15 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogAdapter.java | 6 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogQuery.java | 7 |
5 files changed, 77 insertions, 24 deletions
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java index 42e4659f2..cd5fb3bc7 100644 --- a/src/com/android/dialer/CallDetailActivity.java +++ b/src/com/android/dialer/CallDetailActivity.java @@ -32,6 +32,7 @@ import android.os.Bundle; import android.provider.CallLog; import android.provider.CallLog.Calls; import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.VoicemailContract; import android.provider.VoicemailContract.Voicemails; import android.telecomm.PhoneAccount; import android.telecomm.TelecommManager; @@ -107,6 +108,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware /** If the activity was triggered from a notification. */ public static final String EXTRA_FROM_NOTIFICATION = "EXTRA_FROM_NOTIFICATION"; + public static final String VOICEMAIL_FRAGMENT_TAG = "voicemail_fragment"; + private CallTypeHelper mCallTypeHelper; private PhoneNumberDisplayHelper mPhoneNumberHelper; private QuickContactBadge mQuickContactBadge; @@ -130,6 +133,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware private View mStatusMessageView; private TextView mStatusMessageText; private TextView mStatusMessageAction; + private TextView mVoicemailTranscription; /** Whether we should show "edit number before call" in the options menu. */ private boolean mHasEditNumberBeforeCallOption; @@ -203,7 +207,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME, CallLog.Calls.PHONE_ACCOUNT_ID, CallLog.Calls.FEATURES, - CallLog.Calls.DATA_USAGE + CallLog.Calls.DATA_USAGE, + CallLog.Calls.TRANSCRIPTION }; static final int DATE_COLUMN_INDEX = 0; @@ -217,6 +222,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware static final int ACCOUNT_ID = 8; static final int FEATURES = 9; static final int DATA_USAGE = 10; + static final int TRANSCRIPTION_COLUMN_INDEX = 11; @Override protected void onCreate(Bundle icicle) { @@ -235,6 +241,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware mStatusMessageView = findViewById(R.id.voicemail_status); mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message); mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action); + mVoicemailTranscription = (TextView) findViewById(R.id.voicemail_transcription); mQuickContactBadge = (QuickContactBadge) findViewById(R.id.quick_contact_photo); mQuickContactBadge.setOverlay(null); mCallerName = (TextView) findViewById(R.id.caller_name); @@ -268,17 +275,25 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware // Has voicemail: add the voicemail fragment. Add suitable arguments to set the uri // to play and optionally start the playback. // Do a query to fetch the voicemail status messages. - VoicemailPlaybackFragment playbackFragment = new VoicemailPlaybackFragment(); - Bundle fragmentArguments = new Bundle(); - fragmentArguments.putParcelable(EXTRA_VOICEMAIL_URI, getVoicemailUri()); - if (getIntent().getBooleanExtra(EXTRA_VOICEMAIL_START_PLAYBACK, false)) { - fragmentArguments.putBoolean(EXTRA_VOICEMAIL_START_PLAYBACK, true); + VoicemailPlaybackFragment playbackFragment; + + playbackFragment = (VoicemailPlaybackFragment) getFragmentManager().findFragmentByTag( + VOICEMAIL_FRAGMENT_TAG); + + if (playbackFragment == null) { + playbackFragment = new VoicemailPlaybackFragment(); + Bundle fragmentArguments = new Bundle(); + fragmentArguments.putParcelable(EXTRA_VOICEMAIL_URI, getVoicemailUri()); + if (getIntent().getBooleanExtra(EXTRA_VOICEMAIL_START_PLAYBACK, false)) { + fragmentArguments.putBoolean(EXTRA_VOICEMAIL_START_PLAYBACK, true); + } + playbackFragment.setArguments(fragmentArguments); + getFragmentManager().beginTransaction() + .add(R.id.voicemail_container, playbackFragment, VOICEMAIL_FRAGMENT_TAG) + .commitAllowingStateLoss(); } - playbackFragment.setArguments(fragmentArguments); + voicemailContainer.setVisibility(View.VISIBLE); - getFragmentManager().beginTransaction() - .add(R.id.voicemail_container, playbackFragment) - .commitAllowingStateLoss(); mAsyncQueryHandler.startVoicemailStatusQuery(getVoicemailUri()); markVoicemailAsRead(getVoicemailUri()); } else { @@ -453,6 +468,14 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware nameForDefaultImage = firstDetails.name.toString(); } + if (hasVoicemail() && !TextUtils.isEmpty(firstDetails.transcription)) { + mVoicemailTranscription.setText(firstDetails.transcription); + mVoicemailTranscription.setVisibility(View.VISIBLE); + } else { + mVoicemailTranscription.setText(null); + mVoicemailTranscription.setVisibility(View.GONE); + } + loadContactPhotos( contactUri, photoUri, nameForDefaultImage, lookupKey, contactType); findViewById(R.id.call_detail).setVisibility(View.VISIBLE); @@ -495,6 +518,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware final int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX); String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX); final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX); + final String transcription = callCursor.getString(TRANSCRIPTION_COLUMN_INDEX); final Drawable accountIcon = PhoneAccountUtils.getAccountIcon(this, PhoneAccountUtils.getAccount( @@ -547,7 +571,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware formattedNumber, countryIso, geocode, new int[]{ callType }, date, duration, nameText, numberType, numberLabel, lookupUri, photoUri, sourceType, - accountIcon, features, dataUsage); + accountIcon, features, dataUsage, transcription); } finally { if (callCursor != null) { callCursor.close(); diff --git a/src/com/android/dialer/PhoneCallDetails.java b/src/com/android/dialer/PhoneCallDetails.java index 0dc6fd3e6..869203638 100644 --- a/src/com/android/dialer/PhoneCallDetails.java +++ b/src/com/android/dialer/PhoneCallDetails.java @@ -16,6 +16,8 @@ package com.android.dialer; +import com.google.common.annotations.VisibleForTesting; + import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.CallLog.Calls; @@ -76,15 +78,32 @@ public class PhoneCallDetails { * Total data usage for this call. */ public final Long dataUsage; + /** + * Voicemail transcription + */ + public final String transcription; + + /** + * Create the details for a call, with empty defaults specified for extra fields that are + * not necessary for testing. + */ + @VisibleForTesting + public PhoneCallDetails(CharSequence number, int numberPresentation, + CharSequence formattedNumber, String countryIso, String geocode, + int[] callTypes, long date, long duration) { + this (number, numberPresentation, formattedNumber, countryIso, geocode, + callTypes, date, duration, "", 0, "", null, null, 0, null, Calls.FEATURES_NONE, + null, null); + } /** Create the details for a call with a number not associated with a contact. */ public PhoneCallDetails(CharSequence number, int numberPresentation, CharSequence formattedNumber, String countryIso, String geocode, int[] callTypes, long date, long duration, Drawable accountIcon, int features, - Long dataUsage) { + Long dataUsage, String transcription) { this(number, numberPresentation, formattedNumber, countryIso, geocode, callTypes, date, duration, "", 0, "", null, null, 0, accountIcon, features, - dataUsage); + dataUsage, transcription); } /** Create the details for a call with a number associated with a contact. */ @@ -92,7 +111,8 @@ public class PhoneCallDetails { CharSequence formattedNumber, String countryIso, String geocode, int[] callTypes, long date, long duration, CharSequence name, int numberType, CharSequence numberLabel, Uri contactUri, - Uri photoUri, int sourceType, Drawable accountIcon, int features, Long dataUsage) { + Uri photoUri, int sourceType, Drawable accountIcon, int features, Long dataUsage, + String transcription) { this.number = number; this.numberPresentation = numberPresentation; this.formattedNumber = formattedNumber; @@ -110,5 +130,6 @@ public class PhoneCallDetails { this.accountIcon = accountIcon; this.features = features; this.dataUsage = dataUsage; + this.transcription = transcription; } } diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java index 2a24557f1..3846b6fb8 100644 --- a/src/com/android/dialer/PhoneCallDetailsHelper.java +++ b/src/com/android/dialer/PhoneCallDetailsHelper.java @@ -77,8 +77,12 @@ public class PhoneCallDetailsHelper { // Display up to a given number of icons. views.callTypeIcons.clear(); int count = details.callTypes.length; + boolean isVoicemail = false; for (int index = 0; index < count && index < MAX_CALL_TYPE_ICONS; ++index) { views.callTypeIcons.add(details.callTypes[index]); + if (index == 0) { + isVoicemail = details.callTypes[index] == Calls.VOICEMAIL_TYPE; + } } // Show the video icon if the call had video enabled. @@ -122,10 +126,13 @@ public class PhoneCallDetailsHelper { views.nameView.setText(nameText); - // TODO: At the current time the voicemail transcription is not supported. This view - // is kept for future expansion when we may wish to show a transcription of voicemail. - views.voicemailTranscriptionView.setText(""); - views.voicemailTranscriptionView.setVisibility(View.GONE); + if (isVoicemail && !TextUtils.isEmpty(details.transcription)) { + views.voicemailTranscriptionView.setText(details.transcription); + views.voicemailTranscriptionView.setVisibility(View.VISIBLE); + } else { + views.voicemailTranscriptionView.setText(null); + views.voicemailTranscriptionView.setVisibility(View.GONE); + } } /** diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index 682dbd131..630cf3f33 100644 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -651,6 +651,7 @@ public class CallLogAdapter extends GroupingListAdapter final Drawable accountIcon = PhoneAccountUtils.getAccountIcon(mContext, accountHandle); final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO); + final long rowId = c.getLong(CallLogQuery.ID); views.rowId = rowId; @@ -755,6 +756,7 @@ public class CallLogAdapter extends GroupingListAdapter final String geocode = c.getString(CallLogQuery.GEOCODED_LOCATION); final int sourceType = info.sourceType; final int features = getCallFeatures(c, count); + final String transcription = c.getString(CallLogQuery.TRANSCRIPTION); Long dataUsage = null; if (!c.isNull(CallLogQuery.DATA_USAGE)) { dataUsage = c.getLong(CallLogQuery.DATA_USAGE); @@ -772,12 +774,12 @@ public class CallLogAdapter extends GroupingListAdapter if (TextUtils.isEmpty(name)) { details = new PhoneCallDetails(number, numberPresentation, formattedNumber, countryIso, geocode, callTypes, date, - duration, accountIcon, features, dataUsage); + duration, accountIcon, features, dataUsage, transcription); } else { details = new PhoneCallDetails(number, numberPresentation, formattedNumber, countryIso, geocode, callTypes, date, duration, name, ntype, label, lookupUri, photoUri, sourceType, - accountIcon, features, dataUsage); + accountIcon, features, dataUsage, transcription); } mCallLogViewsHelper.setPhoneCallDetails(views, details); diff --git a/src/com/android/dialer/calllog/CallLogQuery.java b/src/com/android/dialer/calllog/CallLogQuery.java index 904ce7473..0ae4cda33 100644 --- a/src/com/android/dialer/calllog/CallLogQuery.java +++ b/src/com/android/dialer/calllog/CallLogQuery.java @@ -16,15 +16,12 @@ package com.android.dialer.calllog; -import android.database.Cursor; import android.provider.CallLog.Calls; /** * The query for the call log table. */ public final class CallLogQuery { - // If you alter this, you must also alter the method that inserts a fake row to the headers - // in the CallLogQueryHandler class called createHeaderCursorFor(). public static final String[] _PROJECTION = new String[] { Calls._ID, // 0 Calls.NUMBER, // 1 @@ -47,7 +44,8 @@ public final class CallLogQuery { Calls.PHONE_ACCOUNT_COMPONENT_NAME, // 18 Calls.PHONE_ACCOUNT_ID, // 19 Calls.FEATURES, // 20 - Calls.DATA_USAGE // 21 + Calls.DATA_USAGE, // 21 + Calls.TRANSCRIPTION // 22 }; public static final int ID = 0; @@ -72,4 +70,5 @@ public final class CallLogQuery { public static final int ACCOUNT_ID = 19; public static final int FEATURES = 20; public static final int DATA_USAGE = 21; + public static final int TRANSCRIPTION = 22; } |