Fix potential NPE when generating accessibility text.
Traced through the original bug report; the problem is that a call to
TextUtils.expandTemplate was being made with a null 2nd parameter.
I traced through the callers to find out where a null could be introduced
and I was unable to identify a potential source. This change introduces
a last-ditch null check to protect against problems upstream.
Bug: 18684529
Change-Id: I7b608dfedf052d6933e94d1f23a658763b66059a
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index 793a175..77ad333 100644
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -21,6 +21,7 @@
import android.provider.CallLog.Calls;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
+import android.util.Log;
import com.android.contacts.common.CallUtil;
import com.android.dialer.PhoneCallDetails;
@@ -31,6 +32,8 @@
* Helper class to fill in the views of a call log entry.
*/
/* package */class CallLogListItemHelper {
+ private static final String TAG = "CallLogListItemHelper";
+
/** Helper for populating the details of a phone call. */
private final PhoneCallDetailsHelper mPhoneCallDetailsHelper;
/** Helper for handling phone numbers. */
@@ -79,25 +82,30 @@
* @param views The views associated with the current call log entry.
*/
public void setActionContentDescriptions(CallLogListItemViews views) {
+ if (views.nameOrNumber == null) {
+ Log.e(TAG, "setActionContentDescriptions; name or number is null.");
+ }
+
+ // Calling expandTemplate with a null parameter will cause a NullPointerException.
+ // Although we don't expect a null name or number, it is best to protect against it.
+ CharSequence nameOrNumber = views.nameOrNumber == null ? "" : views.nameOrNumber;
+
views.callBackButtonView.setContentDescription(
TextUtils.expandTemplate(
- mResources.getString(R.string.description_call_back_action),
- views.nameOrNumber));
+ mResources.getString(R.string.description_call_back_action), nameOrNumber));
views.videoCallButtonView.setContentDescription(
TextUtils.expandTemplate(
mResources.getString(R.string.description_video_call_action),
- views.nameOrNumber));
+ nameOrNumber));
views.voicemailButtonView.setContentDescription(
TextUtils.expandTemplate(
- mResources.getString(R.string.description_voicemail_action),
- views.nameOrNumber));
+ mResources.getString(R.string.description_voicemail_action), nameOrNumber));
views.detailsButtonView.setContentDescription(
TextUtils.expandTemplate(
- mResources.getString(R.string.description_details_action),
- views.nameOrNumber));
+ mResources.getString(R.string.description_details_action), nameOrNumber));
}
/**