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);