summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/CallDetailActivity.java46
-rw-r--r--src/com/android/dialer/PhoneCallDetails.java27
-rw-r--r--src/com/android/dialer/PhoneCallDetailsHelper.java15
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java6
-rw-r--r--src/com/android/dialer/calllog/CallLogQuery.java7
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;
}