From e279ace56104344d48ceea4f7c9828507dd2c848 Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Fri, 19 Feb 2016 16:04:49 -0800 Subject: Null check for accountComponentName and Id + Voicemails were coming in with a null accountComponent name causing crashes. It's unknown why this is the case. This change checks for null prior to attempting to use these fields. Bug=27202534 Change-Id: I48f4f188bd75aca7204d74aecfe76f2c75b730d8 --- .../dialer/calllog/DefaultVoicemailNotifier.java | 60 +++++++++++++--------- 1 file changed, 37 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java index db8229538..af596863d 100644 --- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java +++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java @@ -16,11 +16,6 @@ package com.android.dialer.calllog; -import static android.Manifest.permission.READ_CALL_LOG; -import static android.Manifest.permission.READ_CONTACTS; - -import com.android.contacts.common.ContactsUtils; -import com.android.contacts.common.compat.TelephonyManagerCompat; import com.google.common.collect.Maps; import android.app.Notification; @@ -33,11 +28,15 @@ import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; +import android.support.annotation.Nullable; +import android.support.v4.util.Pair; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; +import com.android.contacts.common.ContactsUtils; +import com.android.contacts.common.compat.TelephonyManagerCompat; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.DialtactsActivity; import com.android.dialer.R; @@ -172,22 +171,7 @@ public class DefaultVoicemailNotifier { // TODO: Use the photo of contact if all calls are from the same person. final int icon = android.R.drawable.stat_notify_voicemail; - Uri ringtoneUri = null; - int notificationDefaults = 0; - if (callToNotify != null) { - PhoneAccountHandle accountHandle = new PhoneAccountHandle( - ComponentName.unflattenFromString(callToNotify.accountComponentName), - callToNotify.accountId); - ringtoneUri = TelephonyManagerCompat - .getVoicemailRingtoneUri(getTelephonyManager(), accountHandle); - if (ContactsUtils.FLAG_N_FEATURE) { - notificationDefaults = TelephonyManagerCompat.isVoicemailVibrationEnabled( - getTelephonyManager(), accountHandle) - ? Notification.DEFAULT_VIBRATE : 0; - } else { - notificationDefaults = Notification.DEFAULT_ALL; - } - } + Pair info = getNotificationInfo(callToNotify); Notification.Builder notificationBuilder = new Notification.Builder(mContext) .setSmallIcon(icon) @@ -195,8 +179,8 @@ public class DefaultVoicemailNotifier { .setContentText(callers) .setStyle(new Notification.BigTextStyle().bigText(transcription)) .setColor(resources.getColor(R.color.dialer_theme_color)) - .setSound(ringtoneUri) - .setDefaults(notificationDefaults) + .setSound(info.first) + .setDefaults(info.second) .setDeleteIntent(createMarkNewVoicemailsAsOldIntent()) .setAutoCancel(true); @@ -221,6 +205,36 @@ public class DefaultVoicemailNotifier { notificationBuilder.build()); } + /** + * Determines which ringtone Uri and Notification defaults to use when updating the notification + * for the given call. + */ + private Pair getNotificationInfo(@Nullable NewCall callToNotify) { + if (callToNotify == null) { + return new Pair<>(null, 0); + } + + if (callToNotify.accountComponentName == null || callToNotify.accountId == null) { + return new Pair<>(null, Notification.DEFAULT_ALL); + } + + PhoneAccountHandle accountHandle = new PhoneAccountHandle( + ComponentName.unflattenFromString(callToNotify.accountComponentName), + callToNotify.accountId); + return new Pair<>( + TelephonyManagerCompat.getVoicemailRingtoneUri( + getTelephonyManager(), accountHandle), + getNotificationDefaults(accountHandle)); + } + + private int getNotificationDefaults(PhoneAccountHandle accountHandle) { + if (ContactsUtils.FLAG_N_FEATURE) { + return TelephonyManagerCompat.isVoicemailVibrationEnabled(getTelephonyManager(), + accountHandle) ? Notification.DEFAULT_VIBRATE : 0; + } + return Notification.DEFAULT_ALL; + } + /** Creates a pending intent that marks all new voicemails as old. */ private PendingIntent createMarkNewVoicemailsAsOldIntent() { Intent intent = new Intent(mContext, CallLogNotificationsService.class); -- cgit v1.2.3