Performance improvements to call log scrolling.
- Remove call to CallUtil to check if video is enabled. It seems
like it's fine to include the content description of what the
call was, if it was a video call, even if there is not a
video-enabled call account.
- Factor out PhoneNumberDisplayHelper so it doesn't need to be
an instance. This reduces some extra calls to getDisplayNameHelper.
Probably a marginal difference, performance-wise, but it probably
helps a smidgen and also simplifies the need for creating and
passing or recalculating various instances of things.
TODO: It'd be much better if PhoneCallDetails had a builder.
It's terribly painful to fix all the tests when adding fields...
Change-Id: I6da13dc8b6b047043aba871796a8ed13b112a227
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 2401c47..18cf753 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -60,7 +60,7 @@
import com.android.dialer.calllog.ContactInfo;
import com.android.dialer.calllog.ContactInfoHelper;
import com.android.dialer.calllog.PhoneAccountUtils;
-import com.android.dialer.calllog.PhoneNumberDisplayHelper;
+import com.android.dialer.calllog.PhoneNumberDisplayUtil;
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutors;
@@ -106,7 +106,6 @@
public static final String VOICEMAIL_FRAGMENT_TAG = "voicemail_fragment";
private CallTypeHelper mCallTypeHelper;
- private PhoneNumberDisplayHelper mPhoneNumberHelper;
private QuickContactBadge mQuickContactBadge;
private TextView mCallerName;
private TextView mCallerNumber;
@@ -173,7 +172,6 @@
mResources = getResources();
mCallTypeHelper = new CallTypeHelper(getResources());
- mPhoneNumberHelper = new PhoneNumberDisplayHelper(this, mResources);
mVoicemailUri = getIntent().getParcelableExtra(EXTRA_VOICEMAIL_URI);
@@ -344,12 +342,7 @@
final CharSequence callLocationOrType = getNumberTypeOrLocation(firstDetails);
- final CharSequence displayNumber =
- mPhoneNumberHelper.getDisplayNumber(
- firstDetails.accountHandle,
- firstDetails.number,
- firstDetails.numberPresentation,
- firstDetails.formattedNumber);
+ final CharSequence displayNumber = firstDetails.displayNumber;
final String displayNumberStr = mBidiFormatter.unicodeWrap(
displayNumber.toString(), TextDirectionHeuristics.LTR);
@@ -396,11 +389,7 @@
String nameForDefaultImage;
if (TextUtils.isEmpty(firstDetails.name)) {
- nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(
- firstDetails.accountHandle,
- firstDetails.number,
- firstDetails.numberPresentation,
- firstDetails.formattedNumber).toString();
+ nameForDefaultImage = firstDetails.displayNumber.toString();
} else {
nameForDefaultImage = firstDetails.name.toString();
}
@@ -459,47 +448,37 @@
// Formatted phone number.
final CharSequence formattedNumber;
- // Read contact specifics.
- final CharSequence nameText;
- final int numberType;
- final CharSequence numberLabel;
- final Uri photoUri;
- final Uri lookupUri;
- int sourceType;
+
// 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(this).isVoicemailNumber(accountHandle, number)
- ? mContactInfoHelper.lookupNumber(number, countryIso)
- : null;
+ ContactInfo info = ContactInfo.EMPTY;
+ final boolean isVoicemail = new PhoneNumberUtilsWrapper(this)
+ .isVoicemailNumber(accountHandle, number);
+ if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)
+ && !isVoicemail) {
+ mContactInfoHelper.lookupNumber(number, countryIso);
+ }
if (info == null) {
- formattedNumber = mPhoneNumberHelper.getDisplayNumber(accountHandle, number,
- numberPresentation, null);
- nameText = "";
- numberType = 0;
- numberLabel = "";
- photoUri = null;
- lookupUri = null;
- sourceType = 0;
+ formattedNumber = PhoneNumberDisplayUtil.getDisplayNumber(
+ this,
+ accountHandle,
+ number,
+ numberPresentation,
+ null /* formattedNumber */,
+ isVoicemail);
} else {
formattedNumber = info.formattedNumber;
- nameText = info.name;
- numberType = info.type;
- numberLabel = info.label;
- photoUri = info.photoUri;
- lookupUri = info.lookupUri;
- sourceType = info.sourceType;
}
final int features = callCursor.getInt(FEATURES);
Long dataUsage = null;
if (!callCursor.isNull(DATA_USAGE)) {
dataUsage = callCursor.getLong(DATA_USAGE);
}
- return new PhoneCallDetails(number, numberPresentation,
+ return new PhoneCallDetails(this, number, numberPresentation,
formattedNumber, countryIso, geocode,
new int[]{ callType }, date, duration,
- nameText, numberType, numberLabel, lookupUri, photoUri, sourceType,
- accountHandle, features, dataUsage, transcription);
+ info.name, info.type, info.label, info.lookupUri, info.photoUri,
+ info.sourceType, accountHandle, features, dataUsage, transcription,
+ isVoicemail);
} finally {
if (callCursor != null) {
callCursor.close();