diff options
author | Brandon Maxwell <maxwelb@google.com> | 2016-02-19 16:04:49 -0800 |
---|---|---|
committer | Brandon Maxwell <maxwelb@google.com> | 2016-02-19 18:38:05 -0800 |
commit | e279ace56104344d48ceea4f7c9828507dd2c848 (patch) | |
tree | b0bff87ca4762bd6d344f2d8d7118978b63bc108 /src | |
parent | 3072b0c6b25cf19b7bde38d633788172212d5e34 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/dialer/calllog/DefaultVoicemailNotifier.java | 60 |
1 files changed, 37 insertions, 23 deletions
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<Uri, Integer> 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<Uri, Integer> 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); |