Treat the call as personal call if no work dialer is installed
For ACTION_DIAL intent, we will fallback to personal side if there is no
work dialer installed.
But for ACTION_CALL intent, it is handled in work profile and we consider
it as a work call although there is no work dialer installed. We would
now like to make it consistent and consider it as a personl call in this
case. It avoids situation that we insert the call in work side but user has
no work dialer to take a look of the call log.
BUG=26634502
Change-Id: I65cd0b552736b436e60dcaf34d0b2cb055b581eb
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);