Add default phone account fallback for voicemail notification

Sometimes the accountComponentName and accountId field of the new
voicemail will not be populated by the voicemail source, so a
PhoneAccountHandle used to retrieve the voicemail ringtone can not be
created. Previously we fallback to the default notification sound.

In this CL we will attempt to get the voicemail ringtone from the
default phone account before falling back to notification sound.

Bug:21699149
Change-Id: Ia1c09f5aa32c000cca245c669304cacf4f792c01
diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
index af59686..de6fc6a 100644
--- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
@@ -30,6 +30,7 @@
 import android.net.Uri;
 import android.support.annotation.Nullable;
 import android.support.v4.util.Pair;
+import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -43,6 +44,7 @@
 import com.android.dialer.calllog.CallLogNotificationsHelper.NewCall;
 import com.android.dialer.filterednumber.FilteredNumbersUtil;
 import com.android.dialer.list.ListsFragment;
+import com.android.dialer.util.TelecomUtil;
 
 import java.util.Iterator;
 import java.util.List;
@@ -200,7 +202,7 @@
                     names.get(callToNotify.number));
             notificationBuilder.setTicker(msg);
         }
-
+        Log.i(TAG, "Creating voicemail notification");
         getNotificationManager().notify(NOTIFICATION_TAG, NOTIFICATION_ID,
                 notificationBuilder.build());
     }
@@ -210,17 +212,31 @@
      * for the given call.
      */
     private Pair<Uri, Integer> getNotificationInfo(@Nullable NewCall callToNotify) {
+        Log.v(TAG, "getNotificationInfo");
         if (callToNotify == null) {
+            Log.i(TAG, "callToNotify == null");
             return new Pair<>(null, 0);
         }
-
+        PhoneAccountHandle accountHandle = null;
         if (callToNotify.accountComponentName == null || callToNotify.accountId == null) {
-            return new Pair<>(null, Notification.DEFAULT_ALL);
-        }
+            Log.v(TAG, "accountComponentName == null || callToNotify.accountId == null");
+            accountHandle = TelecomUtil
+                .getDefaultOutgoingPhoneAccount(mContext, PhoneAccount.SCHEME_TEL);
+            if (accountHandle == null) {
+                Log.i(TAG, "No default phone account found, using default notification ringtone");
+                return new Pair<>(null, Notification.DEFAULT_ALL);
+            }
 
-        PhoneAccountHandle accountHandle = new PhoneAccountHandle(
+        } else {
+            accountHandle = new PhoneAccountHandle(
                 ComponentName.unflattenFromString(callToNotify.accountComponentName),
                 callToNotify.accountId);
+        }
+        if (accountHandle.getComponentName() != null) {
+            Log.v(TAG, "PhoneAccountHandle.ComponentInfo:" + accountHandle.getComponentName());
+        } else {
+            Log.i(TAG, "PhoneAccountHandle.ComponentInfo: null");
+        }
         return new Pair<>(
                 TelephonyManagerCompat.getVoicemailRingtoneUri(
                         getTelephonyManager(), accountHandle),
@@ -249,4 +265,5 @@
     private TelephonyManager getTelephonyManager() {
         return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
     }
+
 }