summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNancy Chen <nancychen@google.com>2014-10-08 20:17:55 -0700
committerNancy Chen <nancychen@google.com>2014-10-15 15:01:36 -0700
commite80d62229bb11a92f0db8d4e4bac6533bbed9b66 (patch)
tree5a44adccf4d5b84655d41c53d7fb7ff01fe2a57f
parent8ba957f15593347ab800388a4013a0d7b38ad097 (diff)
Enable use of phone accounts for voicemail info display.
Call the "isVoicemailNumber(subId, number)" method instead of the one with just the number. This is because we need to check whether a number is the voicemail number for a specific phone account, otherwise the UI would never correctly display "voicemail" for the non-default SIM. Bug:17925501 Change-Id: If1d6cb1acfcb570aca5e639858af8804bac202c0
-rw-r--r--src/com/android/dialer/CallDetailActivity.java54
-rw-r--r--src/com/android/dialer/PhoneCallDetails.java29
-rw-r--r--src/com/android/dialer/PhoneCallDetailsHelper.java29
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java30
-rw-r--r--src/com/android/dialer/calllog/CallLogListItemHelper.java2
-rw-r--r--src/com/android/dialer/calllog/DefaultVoicemailNotifier.java24
-rw-r--r--src/com/android/dialer/calllog/PhoneAccountUtils.java12
-rw-r--r--src/com/android/dialer/calllog/PhoneNumberDisplayHelper.java26
-rw-r--r--src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java31
-rw-r--r--tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java22
-rw-r--r--tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java16
-rw-r--r--tests/src/com/android/dialer/calllog/TestPhoneNumberUtilsWrapper.java12
12 files changed, 159 insertions, 128 deletions
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index e2ab13025..f6b88cd72 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -31,6 +31,7 @@ import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.VoicemailContract.Voicemails;
import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.TextDirectionHeuristics;
@@ -78,9 +79,6 @@ import java.util.List;
public class CallDetailActivity extends AnalyticsActivity implements ProximitySensorAware {
private static final String TAG = "CallDetail";
- private static final int LOADER_ID = 0;
- private static final String BUNDLE_CONTACT_URI_EXTRA = "contact_uri_extra";
-
private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
private static final char POP_DIRECTIONAL_FORMATTING = '\u202C';
@@ -238,7 +236,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
mResources = getResources();
mCallTypeHelper = new CallTypeHelper(getResources());
- mPhoneNumberHelper = new PhoneNumberDisplayHelper(mResources);
+ mPhoneNumberHelper = new PhoneNumberDisplayHelper(this, mResources);
mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
mAsyncQueryHandler = new CallDetailActivityQueryHandler(this);
@@ -379,7 +377,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
/**
* Update user interface with details of given call.
*
- * @param callUris URIs into {@link CallLog.Calls} of the calls to be displayed
+ * @param callUris URIs into {@link android.provider.CallLog.Calls} of the calls to be displayed
*/
private void updateData(final Uri... callUris) {
class UpdateContactDetailsTask extends AsyncTask<Void, Void, PhoneCallDetails[]> {
@@ -403,9 +401,11 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
@Override
public void onPostExecute(PhoneCallDetails[] details) {
+ Context context = CallDetailActivity.this;
+
if (details == null) {
// Somewhere went wrong: we're going to bail out and show error to users.
- Toast.makeText(CallDetailActivity.this, R.string.toast_call_detail_error,
+ Toast.makeText(context, R.string.toast_call_detail_error,
Toast.LENGTH_SHORT).show();
finish();
return;
@@ -418,24 +418,27 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
final int numberPresentation = firstDetails.numberPresentation;
final Uri contactUri = firstDetails.contactUri;
final Uri photoUri = firstDetails.photoUri;
+ final PhoneAccountHandle accountHandle = firstDetails.accountHandle;
// Cache the details about the phone number.
final boolean canPlaceCallsTo =
PhoneNumberUtilsWrapper.canPlaceCallsTo(mNumber, numberPresentation);
- final PhoneNumberUtilsWrapper phoneUtils = new PhoneNumberUtilsWrapper();
- final boolean isVoicemailNumber = phoneUtils.isVoicemailNumber(mNumber);
- final boolean isSipNumber = phoneUtils.isSipNumber(mNumber);
+ final PhoneNumberUtilsWrapper phoneUtils = new PhoneNumberUtilsWrapper(context);
+ final boolean isVoicemailNumber =
+ phoneUtils.isVoicemailNumber(accountHandle, mNumber);
+ final boolean isSipNumber = PhoneNumberUtilsWrapper.isSipNumber(mNumber);
final CharSequence callLocationOrType = getNumberTypeOrLocation(firstDetails);
- final CharSequence displayNumber = mPhoneNumberHelper.getDisplayNumber(
- firstDetails.number,
- firstDetails.numberPresentation,
- firstDetails.formattedNumber);
+ final CharSequence displayNumber =
+ mPhoneNumberHelper.getDisplayNumber(
+ firstDetails.accountHandle,
+ firstDetails.number,
+ firstDetails.numberPresentation,
+ firstDetails.formattedNumber);
final String displayNumberStr = mBidiFormatter.unicodeWrap(
displayNumber.toString(), TextDirectionHeuristics.LTR);
-
if (!TextUtils.isEmpty(firstDetails.name)) {
mCallerName.setText(firstDetails.name);
mCallerNumber.setText(callLocationOrType + " " + displayNumberStr);
@@ -449,8 +452,9 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
}
}
- if (!TextUtils.isEmpty(firstDetails.accountLabel)) {
- mAccountLabel.setText(firstDetails.accountLabel);
+ String accountLabel = PhoneAccountUtils.getAccountLabel(context, accountHandle);
+ if (!TextUtils.isEmpty(accountLabel)) {
+ mAccountLabel.setText(accountLabel);
mAccountLabel.setVisibility(View.VISIBLE);
} else {
mAccountLabel.setVisibility(View.GONE);
@@ -464,8 +468,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
ListView historyList = (ListView) findViewById(R.id.history);
historyList.setAdapter(
- new CallDetailHistoryAdapter(CallDetailActivity.this, mInflater,
- mCallTypeHelper, details));
+ new CallDetailHistoryAdapter(context, mInflater, mCallTypeHelper, details));
String lookupKey = contactUri == null ? null
: ContactInfoHelper.getLookupKeyFromUri(contactUri);
@@ -479,7 +482,9 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
String nameForDefaultImage;
if (TextUtils.isEmpty(firstDetails.name)) {
- nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(firstDetails.number,
+ nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(
+ firstDetails.accountHandle,
+ firstDetails.number,
firstDetails.numberPresentation,
firstDetails.formattedNumber).toString();
} else {
@@ -535,10 +540,9 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
final String transcription = callCursor.getString(TRANSCRIPTION_COLUMN_INDEX);
- final String accountLabel = PhoneAccountUtils.getAccountLabel(this,
- PhoneAccountUtils.getAccount(
+ final PhoneAccountHandle accountHandle = PhoneAccountUtils.getAccount(
callCursor.getString(ACCOUNT_COMPONENT_NAME),
- callCursor.getString(ACCOUNT_ID)));
+ callCursor.getString(ACCOUNT_ID));
if (TextUtils.isEmpty(countryIso)) {
countryIso = mDefaultCountryIso;
@@ -556,11 +560,11 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
// If this is not a regular number, there is no point in looking it up in the contacts.
ContactInfo info =
PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)
- && !new PhoneNumberUtilsWrapper().isVoicemailNumber(number)
+ && !new PhoneNumberUtilsWrapper(this).isVoicemailNumber(accountHandle, number)
? mContactInfoHelper.lookupNumber(number, countryIso)
: null;
if (info == null) {
- formattedNumber = mPhoneNumberHelper.getDisplayNumber(number,
+ formattedNumber = mPhoneNumberHelper.getDisplayNumber(accountHandle, number,
numberPresentation, null);
nameText = "";
numberType = 0;
@@ -586,7 +590,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe
formattedNumber, countryIso, geocode,
new int[]{ callType }, date, duration,
nameText, numberType, numberLabel, lookupUri, photoUri, sourceType,
- accountLabel, null, features, dataUsage, transcription);
+ accountHandle, 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 ba049a2d7..ec9657ed8 100644
--- a/src/com/android/dialer/PhoneCallDetails.java
+++ b/src/com/android/dialer/PhoneCallDetails.java
@@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.telecom.PhoneAccountHandle;
/**
* The details of a phone call to be shown in the UI.
@@ -66,14 +67,11 @@ public class PhoneCallDetails {
* The source type of the contact associated with this call.
*/
public final int sourceType;
+
/**
* The unique identifier for the account associated with the call.
*/
- public final String accountLabel;
- /**
- * The icon for the account associated with the call.
- */
- public final Drawable accountIcon;
+ public final PhoneAccountHandle accountHandle;
/**
* Features applicable to this call.
*/
@@ -96,26 +94,26 @@ public class PhoneCallDetails {
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, null, 0, null, null);
+ callTypes, date, duration, "", 0, "", null, null, 0, null, 0, 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, String accountLabel, Drawable accountIcon,
- int features, Long dataUsage, String transcription) {
- this(number, numberPresentation, formattedNumber, countryIso, geocode,
- callTypes, date, duration, "", 0, "", null, null, 0, accountLabel, accountIcon,
- features, dataUsage, transcription);
+ int[] callTypes, long date, long duration,
+ PhoneAccountHandle accountHandle, int features, Long dataUsage, String transcription) {
+ this(number, numberPresentation, formattedNumber, countryIso, geocode, callTypes, date,
+ duration, "", 0, "", null, null, 0, accountHandle, features, dataUsage,
+ transcription);
}
/** Create the details for a call with a number associated with a contact. */
public PhoneCallDetails(CharSequence number, int numberPresentation,
CharSequence formattedNumber, String countryIso, String geocode,
int[] callTypes, long date, long duration, CharSequence name,
- int numberType, CharSequence numberLabel, Uri contactUri,
- Uri photoUri, int sourceType, String accountLabel, Drawable accountIcon, int features,
- Long dataUsage, String transcription) {
+ int numberType, CharSequence numberLabel, Uri contactUri, Uri photoUri,
+ int sourceType, PhoneAccountHandle accountHandle, int features, Long dataUsage,
+ String transcription) {
this.number = number;
this.numberPresentation = numberPresentation;
this.formattedNumber = formattedNumber;
@@ -130,8 +128,7 @@ public class PhoneCallDetails {
this.contactUri = contactUri;
this.photoUri = photoUri;
this.sourceType = sourceType;
- this.accountLabel = accountLabel;
- this.accountIcon = accountIcon;
+ this.accountHandle = accountHandle;
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 c5f2fb675..e8884319c 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -16,7 +16,9 @@
package com.android.dialer;
+import android.content.Context;
import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -28,8 +30,8 @@ import android.widget.TextView;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.testing.NeededForTesting;
import com.android.contacts.common.util.PhoneNumberHelper;
-import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.ContactInfo;
+import com.android.dialer.calllog.PhoneAccountUtils;
import com.android.dialer.calllog.PhoneNumberDisplayHelper;
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
import com.android.dialer.util.DialerUtils;
@@ -44,6 +46,7 @@ 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;
+ private final Context mContext;
private final Resources mResources;
/** The injected current time in milliseconds since the epoch. Used only by tests. */
private Long mCurrentTimeMillisForTest;
@@ -63,11 +66,12 @@ public class PhoneCallDetailsHelper {
*
* @param resources used to look up strings
*/
- public PhoneCallDetailsHelper(Resources resources, CallTypeHelper callTypeHelper,
+ public PhoneCallDetailsHelper(Context context, Resources resources,
PhoneNumberUtilsWrapper phoneUtils) {
+ mContext = context;
mResources = resources;
mPhoneNumberUtilsWrapper = phoneUtils;
- mPhoneNumberHelper = new PhoneNumberDisplayHelper(mPhoneNumberUtilsWrapper, resources);
+ mPhoneNumberHelper = new PhoneNumberDisplayHelper(context, resources, phoneUtils);
}
/** Fills the call details views with content. */
@@ -103,16 +107,17 @@ public class PhoneCallDetailsHelper {
setCallCountAndDate(views, callCount, callLocationAndDate);
// set the account icon if it exists
- if (details.accountIcon != null) {
+ Drawable accountIcon = PhoneAccountUtils.getAccountIcon(mContext, details.accountHandle);
+ if (accountIcon != null) {
views.callAccountIcon.setVisibility(View.VISIBLE);
- views.callAccountIcon.setImageDrawable(details.accountIcon);
+ views.callAccountIcon.setImageDrawable(accountIcon);
} else {
views.callAccountIcon.setVisibility(View.GONE);
}
final CharSequence nameText;
final CharSequence displayNumber =
- mPhoneNumberHelper.getDisplayNumber(details.number,
+ mPhoneNumberHelper.getDisplayNumber(details.accountHandle, details.number,
details.numberPresentation, details.formattedNumber);
if (TextUtils.isEmpty(details.name)) {
nameText = displayNumber;
@@ -169,7 +174,8 @@ public class PhoneCallDetailsHelper {
// Only show a label if the number is shown and it is not a SIP address.
if (!TextUtils.isEmpty(details.number)
&& !PhoneNumberHelper.isUriNumber(details.number.toString())
- && !mPhoneNumberUtilsWrapper.isVoicemailNumber(details.number)) {
+ && !mPhoneNumberUtilsWrapper.isVoicemailNumber(details.accountHandle,
+ details.number)) {
if (details.numberLabel == ContactInfo.GEOCODE_AS_LABEL) {
numberFormattedLabel = details.geocode;
@@ -180,8 +186,8 @@ public class PhoneCallDetailsHelper {
}
if (!TextUtils.isEmpty(details.name) && TextUtils.isEmpty(numberFormattedLabel)) {
- numberFormattedLabel = mPhoneNumberHelper.getDisplayNumber(details.number,
- details.numberPresentation, details.formattedNumber);
+ numberFormattedLabel = mPhoneNumberHelper.getDisplayNumber(details.accountHandle,
+ details.number, details.numberPresentation, details.formattedNumber);
}
return numberFormattedLabel;
}
@@ -204,8 +210,9 @@ public class PhoneCallDetailsHelper {
public void setCallDetailsHeader(TextView nameView, PhoneCallDetails details) {
final CharSequence nameText;
final CharSequence displayNumber =
- mPhoneNumberHelper.getDisplayNumber(details.number, details.numberPresentation,
- mResources.getString(R.string.recentCalls_addToContact));
+ mPhoneNumberHelper.getDisplayNumber(details.accountHandle, details.number,
+ details.numberPresentation,
+ mResources.getString(R.string.recentCalls_addToContact));
if (TextUtils.isEmpty(details.name)) {
nameText = displayNumber;
} else {
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index dcd2de3c0..792d27ab1 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -248,6 +248,8 @@ public class CallLogAdapter extends GroupingListAdapter
private final ContactPhotoManager mContactPhotoManager;
/** Helper to parse and process phone numbers. */
private PhoneNumberDisplayHelper mPhoneNumberHelper;
+ /** Helper to access Telephony phone number utils class */
+ protected final PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
/** Helper to group call log entries. */
private final CallLogGroupBuilder mCallLogGroupBuilder;
@@ -365,9 +367,10 @@ public class CallLogAdapter extends GroupingListAdapter
mExpandedTranslationZ = resources.getDimension(R.dimen.call_log_expanded_translation_z);
mContactPhotoManager = ContactPhotoManager.getInstance(mContext);
- mPhoneNumberHelper = new PhoneNumberDisplayHelper(resources);
- PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- resources, callTypeHelper, new PhoneNumberUtilsWrapper());
+ mPhoneNumberHelper = new PhoneNumberDisplayHelper(mContext, resources);
+ mPhoneNumberUtilsWrapper = new PhoneNumberUtilsWrapper(mContext);
+ PhoneCallDetailsHelper phoneCallDetailsHelper =
+ new PhoneCallDetailsHelper(mContext, resources, mPhoneNumberUtilsWrapper);
mCallLogViewsHelper =
new CallLogListItemHelper(
phoneCallDetailsHelper, mPhoneNumberHelper, resources);
@@ -641,8 +644,6 @@ public class CallLogAdapter extends GroupingListAdapter
final PhoneAccountHandle accountHandle = PhoneAccountUtils.getAccount(
c.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME),
c.getString(CallLogQuery.ACCOUNT_ID));
- final Drawable accountIcon = PhoneAccountUtils.getAccountIcon(mContext,
- accountHandle);
final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
final long rowId = c.getLong(CallLogQuery.ID);
@@ -677,7 +678,7 @@ public class CallLogAdapter extends GroupingListAdapter
final ContactInfo cachedContactInfo = getContactInfoFromCallLog(c);
final boolean isVoicemailNumber =
- PhoneNumberUtilsWrapper.INSTANCE.isVoicemailNumber(number);
+ mPhoneNumberUtilsWrapper.isVoicemailNumber(accountHandle, number);
// Where binding and not in the call log, use default behaviour of invoking a call when
// tapping the primary view.
@@ -769,14 +770,13 @@ public class CallLogAdapter extends GroupingListAdapter
expandOrCollapseActions(callLogItemView, isExpanded(rowId));
if (TextUtils.isEmpty(name)) {
- details = new PhoneCallDetails(number, numberPresentation,
- formattedNumber, countryIso, geocode, callTypes, date,
- duration, null, accountIcon, features, dataUsage, transcription);
+ details = new PhoneCallDetails(number, numberPresentation, formattedNumber, countryIso,
+ geocode, callTypes, date, duration, accountHandle, features, dataUsage,
+ transcription);
} else {
- details = new PhoneCallDetails(number, numberPresentation,
- formattedNumber, countryIso, geocode, callTypes, date,
- duration, name, ntype, label, lookupUri, photoUri, sourceType,
- null, accountIcon, features, dataUsage, transcription);
+ details = new PhoneCallDetails(number, numberPresentation, formattedNumber, countryIso,
+ geocode, callTypes, date, duration, name, ntype, label, lookupUri, photoUri,
+ sourceType, accountHandle, features, dataUsage, transcription);
}
mCallLogViewsHelper.setPhoneCallDetails(mContext, views, details);
@@ -794,8 +794,8 @@ public class CallLogAdapter extends GroupingListAdapter
String nameForDefaultImage = null;
if (TextUtils.isEmpty(name)) {
- nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(details.number,
- details.numberPresentation, details.formattedNumber).toString();
+ nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(details.accountHandle,
+ details.number, details.numberPresentation, details.formattedNumber).toString();
} else {
nameForDefaultImage = name;
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index 68ca7a8dc..1eb25fbfa 100644
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -222,7 +222,7 @@ import com.android.dialer.R;
if (!TextUtils.isEmpty(details.name)) {
recipient = details.name;
} else {
- recipient = mPhoneNumberHelper.getDisplayNumber(
+ recipient = mPhoneNumberHelper.getDisplayNumber(details.accountHandle,
details.number, details.numberPresentation, details.formattedNumber);
}
return recipient;
diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
index 837cfba67..970cad6a6 100644
--- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
@@ -28,12 +28,14 @@ import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.PhoneLookup;
+import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.Log;
import com.android.common.io.MoreCloseables;
import com.android.dialer.CallDetailActivity;
import com.android.dialer.R;
+import com.android.dialer.calllog.PhoneAccountUtils;
import com.google.common.collect.Maps;
import java.util.Map;
@@ -118,7 +120,10 @@ public class DefaultVoicemailNotifier implements VoicemailNotifier {
// Check if we already know the name associated with this number.
String name = names.get(newCall.number);
if (name == null) {
- name = mPhoneNumberHelper.getDisplayName(newCall.number,
+ PhoneAccountHandle accountHandle = PhoneAccountUtils.getAccount(
+ newCall.accountComponentName,
+ newCall.accountId);
+ name = mPhoneNumberHelper.getDisplayName(accountHandle, newCall.number,
newCall.numberPresentation).toString();
// If we cannot lookup the contact, use the number instead.
if (TextUtils.isEmpty(name)) {
@@ -214,13 +219,17 @@ public class DefaultVoicemailNotifier implements VoicemailNotifier {
public final Uri voicemailUri;
public final String number;
public final int numberPresentation;
+ public final String accountComponentName;
+ public final String accountId;
public NewCall(Uri callsUri, Uri voicemailUri, String number,
- int numberPresentation) {
+ int numberPresentation, String accountComponentName, String accountId) {
this.callsUri = callsUri;
this.voicemailUri = voicemailUri;
this.number = number;
this.numberPresentation = numberPresentation;
+ this.accountComponentName = accountComponentName;
+ this.accountId = accountId;
}
}
@@ -243,12 +252,15 @@ public class DefaultVoicemailNotifier implements VoicemailNotifier {
*/
private static final class DefaultNewCallsQuery implements NewCallsQuery {
private static final String[] PROJECTION = {
- Calls._ID, Calls.NUMBER, Calls.VOICEMAIL_URI, Calls.NUMBER_PRESENTATION
+ Calls._ID, Calls.NUMBER, Calls.VOICEMAIL_URI, Calls.NUMBER_PRESENTATION,
+ Calls.PHONE_ACCOUNT_COMPONENT_NAME, Calls.PHONE_ACCOUNT_ID
};
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;
private static final int NUMBER_PRESENTATION_COLUMN_INDEX = 3;
+ private static final int PHONE_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX = 4;
+ private static final int PHONE_ACCOUNT_ID_COLUMN_INDEX = 5;
private final ContentResolver mContentResolver;
@@ -284,7 +296,9 @@ public class DefaultVoicemailNotifier implements VoicemailNotifier {
Calls.CONTENT_URI_WITH_VOICEMAIL, cursor.getLong(ID_COLUMN_INDEX));
Uri voicemailUri = voicemailUriString == null ? null : Uri.parse(voicemailUriString);
return new NewCall(callsUri, voicemailUri, cursor.getString(NUMBER_COLUMN_INDEX),
- cursor.getInt(NUMBER_PRESENTATION_COLUMN_INDEX));
+ cursor.getInt(NUMBER_PRESENTATION_COLUMN_INDEX),
+ cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME_COLUMN_INDEX),
+ cursor.getString(PHONE_ACCOUNT_ID_COLUMN_INDEX));
}
}
@@ -343,6 +357,6 @@ public class DefaultVoicemailNotifier implements VoicemailNotifier {
* called from the main thread.
*/
public static PhoneNumberDisplayHelper createPhoneNumberHelper(Context context) {
- return new PhoneNumberDisplayHelper(context.getResources());
+ return new PhoneNumberDisplayHelper(context, context.getResources());
}
}
diff --git a/src/com/android/dialer/calllog/PhoneAccountUtils.java b/src/com/android/dialer/calllog/PhoneAccountUtils.java
index d716aee49..20b81d87d 100644
--- a/src/com/android/dialer/calllog/PhoneAccountUtils.java
+++ b/src/com/android/dialer/calllog/PhoneAccountUtils.java
@@ -29,10 +29,9 @@ import android.text.TextUtils;
*/
public class PhoneAccountUtils {
/**
- * Generate account info from data in Telecomm database
+ * Compose PhoneAccount object from component name and account id
*/
- public static PhoneAccountHandle getAccount(String componentString,
- String accountId) {
+ public static PhoneAccountHandle getAccount(String componentString, String accountId) {
if (TextUtils.isEmpty(componentString) || TextUtils.isEmpty(accountId)) {
return null;
}
@@ -41,7 +40,7 @@ public class PhoneAccountUtils {
}
/**
- * Generate account icon from data in Telecomm database
+ * Extract account icon from PhoneAccount object
*/
public static Drawable getAccountIcon(Context context, PhoneAccountHandle phoneAccount) {
final PhoneAccount account = getAccountOrNull(context, phoneAccount);
@@ -52,7 +51,7 @@ public class PhoneAccountUtils {
}
/**
- * Generate account label from data in Telecomm database
+ * Extract account label from PhoneAccount object
*/
public static String getAccountLabel(Context context, PhoneAccountHandle phoneAccount) {
final PhoneAccount account = getAccountOrNull(context, phoneAccount);
@@ -66,8 +65,7 @@ public class PhoneAccountUtils {
* Retrieve the account metadata, but if the account does not exist or the device has only a
* single registered and enabled account, return null.
*/
- private static PhoneAccount getAccountOrNull(Context context,
- PhoneAccountHandle phoneAccount) {
+ private static PhoneAccount getAccountOrNull(Context context, PhoneAccountHandle phoneAccount) {
final TelecomManager telecomManager =
(TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
final PhoneAccount account = telecomManager.getPhoneAccount(phoneAccount);
diff --git a/src/com/android/dialer/calllog/PhoneNumberDisplayHelper.java b/src/com/android/dialer/calllog/PhoneNumberDisplayHelper.java
index 5d7ce7ea9..0dffd868a 100644
--- a/src/com/android/dialer/calllog/PhoneNumberDisplayHelper.java
+++ b/src/com/android/dialer/calllog/PhoneNumberDisplayHelper.java
@@ -16,8 +16,10 @@
package com.android.dialer.calllog;
+import android.content.Context;
import android.content.res.Resources;
import android.provider.CallLog.Calls;
+import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.Log;
@@ -27,20 +29,25 @@ import com.android.dialer.R;
* Helper for formatting and managing the display of phone numbers.
*/
public class PhoneNumberDisplayHelper {
- private final PhoneNumberUtilsWrapper mPhoneNumberUtils;
+ private final Context mContext;
private final Resources mResources;
+ private final PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
- public PhoneNumberDisplayHelper(Resources resources) {
+ public PhoneNumberDisplayHelper(Context context, Resources resources) {
+ mContext = context;
mResources = resources;
- mPhoneNumberUtils = new PhoneNumberUtilsWrapper();
+ mPhoneNumberUtilsWrapper = new PhoneNumberUtilsWrapper(context);
}
- public PhoneNumberDisplayHelper(PhoneNumberUtilsWrapper phoneNumberUtils, Resources resources) {
- mPhoneNumberUtils = phoneNumberUtils;
+ public PhoneNumberDisplayHelper(Context context, Resources resources,
+ PhoneNumberUtilsWrapper phoneNumberUtils) {
+ mContext = context;
mResources = resources;
+ mPhoneNumberUtilsWrapper = phoneNumberUtils;
}
- /* package */ CharSequence getDisplayName(CharSequence number, int presentation) {
+ /* package */ CharSequence getDisplayName(PhoneAccountHandle accountHandle, CharSequence number,
+ int presentation) {
if (presentation == Calls.PRESENTATION_UNKNOWN) {
return mResources.getString(R.string.unknown);
}
@@ -50,7 +57,7 @@ public class PhoneNumberDisplayHelper {
if (presentation == Calls.PRESENTATION_PAYPHONE) {
return mResources.getString(R.string.payphone);
}
- if (mPhoneNumberUtils.isVoicemailNumber(number)) {
+ if (mPhoneNumberUtilsWrapper.isVoicemailNumber(accountHandle, number)) {
return mResources.getString(R.string.voicemail);
}
if (PhoneNumberUtilsWrapper.isLegacyUnknownNumbers(number)) {
@@ -62,13 +69,14 @@ public class PhoneNumberDisplayHelper {
/**
* Returns the string to display for the given phone number.
*
+ * @param accountHandle The handle for the account corresponding to the call
* @param number the number to display
* @param formattedNumber the formatted number if available, may be null
*/
- public CharSequence getDisplayNumber(CharSequence number,
+ public CharSequence getDisplayNumber(PhoneAccountHandle accountHandle, CharSequence number,
int presentation, CharSequence formattedNumber) {
- final CharSequence displayName = getDisplayName(number, presentation);
+ final CharSequence displayName = getDisplayName(accountHandle, number, presentation);
if (!TextUtils.isEmpty(displayName)) {
return displayName;
}
diff --git a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
index 00a260a25..11f4a67f6 100644
--- a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
+++ b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
@@ -16,7 +16,10 @@
package com.android.dialer.calllog;
+import android.content.Context;
import android.provider.CallLog;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
@@ -30,8 +33,12 @@ import java.util.Set;
*
*/
public class PhoneNumberUtilsWrapper {
- public static final PhoneNumberUtilsWrapper INSTANCE = new PhoneNumberUtilsWrapper();
private static final Set<String> LEGACY_UNKNOWN_NUMBERS = Sets.newHashSet("-1", "-2", "-3");
+ private final Context mContext;
+
+ public PhoneNumberUtilsWrapper(Context context) {
+ mContext = context;
+ }
/** Returns true if it is possible to place a call to the given number. */
public static boolean canPlaceCallsTo(CharSequence number, int presentation) {
@@ -40,30 +47,26 @@ public class PhoneNumberUtilsWrapper {
}
/**
- * Returns true if it is possible to send an SMS to the given number.
- */
- public boolean canSendSmsTo(CharSequence number, int presentation) {
- return canPlaceCallsTo(number, presentation) && !isVoicemailNumber(number) && !isSipNumber(
- number);
- }
-
- /**
* Returns true if the given number is the number of the configured voicemail. To be able to
* mock-out this, it is not a static method.
*/
- public boolean isVoicemailNumber(CharSequence number) {
- return number!= null && PhoneNumberUtils.isVoiceMailNumber(number.toString());
+ public boolean isVoicemailNumber(PhoneAccountHandle accountHandle,
+ CharSequence number) {
+ final TelecomManager telecomManager =
+ (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
+ return number!= null && telecomManager.isVoiceMailNumber(accountHandle, number.toString());
}
/**
* Returns true if the given number is a SIP address. To be able to mock-out this, it is not a
* static method.
*/
- public boolean isSipNumber(CharSequence number) {
+ public static boolean isSipNumber(CharSequence number) {
return number != null && PhoneNumberHelper.isUriNumber(number.toString());
}
- public static boolean isUnknownNumberThatCanBeLookedUp(CharSequence number, int presentation) {
+ public boolean isUnknownNumberThatCanBeLookedUp(PhoneAccountHandle accountHandle,
+ CharSequence number, int presentation) {
if (presentation == CallLog.Calls.PRESENTATION_UNKNOWN) {
return false;
}
@@ -76,7 +79,7 @@ public class PhoneNumberUtilsWrapper {
if (TextUtils.isEmpty(number)) {
return false;
}
- if (INSTANCE.isVoicemailNumber(number)) {
+ if (isVoicemailNumber(accountHandle, number)) {
return false;
}
if (isLegacyUnknownNumbers(number)) {
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index bc7c033b2..7ae2c2293 100644
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -25,7 +25,6 @@ import android.text.Spanned;
import android.view.View;
import android.widget.TextView;
-import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.TestPhoneNumberUtilsWrapper;
import com.android.dialer.util.LocaleTestUtils;
@@ -60,16 +59,17 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
private PhoneCallDetailsViews mViews;
private TextView mNameView;
private LocaleTestUtils mLocaleTestUtils;
+ private TestPhoneNumberUtilsWrapper mPhoneUtils;
@Override
protected void setUp() throws Exception {
super.setUp();
Context context = getContext();
Resources resources = context.getResources();
- CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
+ mPhoneUtils = new TestPhoneNumberUtilsWrapper(context, TEST_VOICEMAIL_NUMBER);
final TestPhoneNumberUtilsWrapper phoneUtils = new TestPhoneNumberUtilsWrapper(
- TEST_VOICEMAIL_NUMBER);
- mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, phoneUtils);
+ context, TEST_VOICEMAIL_NUMBER);
+ mHelper = new PhoneCallDetailsHelper(context, resources, phoneUtils);
mHelper.setCurrentTimeForTest(
new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis());
mViews = PhoneCallDetailsViews.createForTest(context);
@@ -311,8 +311,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION, null, null, 0,
- null, null)
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
);
}
@@ -322,8 +321,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, Calls.PRESENTATION_ALLOWED,
formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION, null, null, 0,
- null, null)
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
);
}
@@ -352,7 +350,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION, null, null,
+ new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION, null,
features, null, null)
);
}
@@ -361,8 +359,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setCallDetailsHeader(mNameView,
new PhoneCallDetails(number, presentation,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION, null, null, 0,
- null, null));
+ new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION, null,
+ 0, null, null));
}
private void setCallDetailsHeader(String name) {
@@ -370,6 +368,6 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
- name, 0, "", null, null, 0, null, null, 0, null, null));
+ name, 0, "", null, null, 0, null, 0, null, null));
}
}
diff --git a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
index 85dbf8c83..c0347cf0f 100644
--- a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
@@ -60,12 +60,11 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
super.setUp();
Context context = getContext();
mResources = context.getResources();
- CallTypeHelper callTypeHelper = new CallTypeHelper(mResources);
- final TestPhoneNumberUtilsWrapper phoneUtils = new TestPhoneNumberUtilsWrapper(
- TEST_VOICEMAIL_NUMBER);
- PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- mResources, callTypeHelper, phoneUtils);
- mPhoneNumberDisplayHelper = new PhoneNumberDisplayHelper(mResources);
+ final TestPhoneNumberUtilsWrapper phoneUtils =
+ new TestPhoneNumberUtilsWrapper(context, TEST_VOICEMAIL_NUMBER);
+ PhoneCallDetailsHelper phoneCallDetailsHelper =
+ new PhoneCallDetailsHelper(context, mResources, phoneUtils);
+ mPhoneNumberDisplayHelper = new PhoneNumberDisplayHelper(context, mResources, phoneUtils);
mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberDisplayHelper,
mResources);
mViews = CallLogListItemViews.createForTest(context);
@@ -319,10 +318,9 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
*/
public void testGetCallDescription_Video() {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
- TEST_FORMATTED_NUMBER,
- TEST_COUNTRY_ISO, TEST_GEOCODE,
+ TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.INCOMING_TYPE, Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION,
- null, null, Calls.FEATURES_VIDEO, null, null);
+ null, Calls.FEATURES_VIDEO, null, null);
CharSequence description = mHelper.getCallDescription(getContext(), details);
assertTrue(description.toString()
diff --git a/tests/src/com/android/dialer/calllog/TestPhoneNumberUtilsWrapper.java b/tests/src/com/android/dialer/calllog/TestPhoneNumberUtilsWrapper.java
index 7266d8890..24916db9e 100644
--- a/tests/src/com/android/dialer/calllog/TestPhoneNumberUtilsWrapper.java
+++ b/tests/src/com/android/dialer/calllog/TestPhoneNumberUtilsWrapper.java
@@ -16,19 +16,23 @@
package com.android.dialer.calllog;
+import android.content.Context;
+import android.telecom.PhoneAccountHandle;
+
/**
- * Modified version of {@link com.android.dialer.calllog.PhoneNumberDisplayHelper} to be used in tests
- * that allows injecting the voicemail number.
+ * Modified version of {@link com.android.dialer.calllog.PhoneNumberDisplayHelper} to be used in
+ * tests that allows injecting the voicemail number.
*/
public final class TestPhoneNumberUtilsWrapper extends PhoneNumberUtilsWrapper {
private CharSequence mVoicemailNumber;
- public TestPhoneNumberUtilsWrapper(CharSequence voicemailNumber) {
+ public TestPhoneNumberUtilsWrapper(Context context, CharSequence voicemailNumber) {
+ super(context);
mVoicemailNumber = voicemailNumber;
}
@Override
- public boolean isVoicemailNumber(CharSequence number) {
+ public boolean isVoicemailNumber(PhoneAccountHandle accountHandle, CharSequence number) {
return mVoicemailNumber.equals(number);
}
}