Merge "Treat the call as personal call if no work dialer is installed"
diff --git a/src/com/android/server/telecom/CallIntentProcessor.java b/src/com/android/server/telecom/CallIntentProcessor.java
index 9150084..6825c50 100644
--- a/src/com/android/server/telecom/CallIntentProcessor.java
+++ b/src/com/android/server/telecom/CallIntentProcessor.java
@@ -8,7 +8,9 @@
 import android.os.Bundle;
 import android.os.Trace;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.telecom.Connection;
+import android.telecom.DefaultDialerManager;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
@@ -126,6 +128,7 @@
 
         final boolean isPrivilegedDialer = intent.getBooleanExtra(KEY_IS_PRIVILEGED_DIALER, false);
 
+        fixInitiatingUserIfNecessary(context, intent);
         UserHandle initiatingUser = intent.getParcelableExtra(KEY_INITIATING_USER);
 
         // Send to CallsManager to ensure the InCallUI gets kicked off before the broadcast returns
@@ -150,6 +153,25 @@
         }
     }
 
+    /**
+     * If the call is initiated from managed profile but there is no work dialer installed, treat
+     * the call is initiated from its parent user.
+     */
+    static void fixInitiatingUserIfNecessary(Context context, Intent intent) {
+        final UserHandle initiatingUser = intent.getParcelableExtra(KEY_INITIATING_USER);
+        if (UserUtil.isManagedProfile(context, initiatingUser)) {
+            boolean noDialerInstalled = DefaultDialerManager.getInstalledDialerApplications(context,
+                    initiatingUser.getIdentifier()).size() == 0;
+            if (noDialerInstalled) {
+                final UserManager userManager = UserManager.get(context);
+                UserHandle parentUserHandle =
+                        userManager.getProfileParent(
+                                initiatingUser.getIdentifier()).getUserHandle();
+                intent.putExtra(KEY_INITIATING_USER, parentUserHandle);
+            }
+        }
+    }
+
     static void processIncomingCallIntent(CallsManager callsManager, Intent intent) {
         PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(
                 TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);