summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/calllog
diff options
context:
space:
mode:
authorBrandon Maxwell <maxwelb@google.com>2016-02-19 16:04:49 -0800
committerBrandon Maxwell <maxwelb@google.com>2016-02-19 18:38:05 -0800
commite279ace56104344d48ceea4f7c9828507dd2c848 (patch)
treeb0bff87ca4762bd6d344f2d8d7118978b63bc108 /src/com/android/dialer/calllog
parent3072b0c6b25cf19b7bde38d633788172212d5e34 (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/com/android/dialer/calllog')
-rw-r--r--src/com/android/dialer/calllog/DefaultVoicemailNotifier.java60
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);