Merge "Add self-managed connection service API."
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index a5bcca0..635d500 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -120,6 +120,11 @@
             return false;
         }
 
+        // Don't ring/acquire focus if there is no ringtone
+        if (mRingtoneFactory.getRingtone(foregroundCall) == null) {
+            isRingerAudible = false;
+        }
+
         if (isRingerAudible) {
             mRingingCall = foregroundCall;
             Log.addEvent(foregroundCall, LogUtils.Events.START_RINGER);
diff --git a/src/com/android/server/telecom/RingtoneFactory.java b/src/com/android/server/telecom/RingtoneFactory.java
index 4bf731c..b14e1ab 100644
--- a/src/com/android/server/telecom/RingtoneFactory.java
+++ b/src/com/android/server/telecom/RingtoneFactory.java
@@ -67,9 +67,18 @@
         if(ringtone == null) {
             // Contact didn't specify ringtone or custom Ringtone creation failed. Get default
             // ringtone for user or profile.
-            ringtone = RingtoneManager.getRingtone(
-                    hasDefaultRingtoneForUser(userContext) ? userContext : mContext,
-                    Settings.System.DEFAULT_RINGTONE_URI);
+            Context contextToUse = hasDefaultRingtoneForUser(userContext) ? userContext : mContext;
+            Uri defaultRingtoneUri;
+            if (UserManager.get(contextToUse).isUserUnlocked(contextToUse.getUserId())) {
+                defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(contextToUse,
+                        RingtoneManager.TYPE_RINGTONE);
+            } else {
+                defaultRingtoneUri = Settings.System.DEFAULT_RINGTONE_URI;
+            }
+            if (defaultRingtoneUri == null) {
+                return null;
+            }
+            ringtone = RingtoneManager.getRingtone(contextToUse, defaultRingtoneUri);
         }
         if (ringtone != null) {
             ringtone.setStreamType(AudioManager.STREAM_RING);
diff --git a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
index 3b8e7e0..863c393 100644
--- a/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
+++ b/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
@@ -625,8 +625,10 @@
                                                                 "different handle.");
                                                 return;
                                             }
-                                            if (info.contactDisplayPhotoUri == null) {
-                                                // If there is no photo, just show the notification.
+                                            if (info == null ||
+                                                    info.contactDisplayPhotoUri == null) {
+                                                // If there is no photo or if the caller info is
+                                                // null, just show the notification.
                                                 CallInfo callInfo = callInfoFactory.makeCallInfo(
                                                         info, null, handle, date);
                                                 showMissedCallNotification(callInfo, userHandle);