Loading src/com/android/server/telecom/CallScreeningServiceHelper.java +3 −2 Original line number Diff line number Diff line Loading @@ -212,8 +212,9 @@ public class CallScreeningServiceHelper { serviceConnection, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE | Context.BIND_SCHEDULE_LIKE_TOP_APP, UserHandle.CURRENT)) { Log.d(TAG, "bindService, found service, waiting for it to connect"); userHandle)) { Log.d(TAG,"bindServiceAsUser, found service," + "waiting for it to connect to user: %s", userHandle); return true; } Loading src/com/android/server/telecom/CallsManager.java +25 −9 Original line number Diff line number Diff line Loading @@ -655,9 +655,11 @@ public class CallsManager extends Call.ListenerBase } @Override @VisibleForTesting public void onSuccessfulOutgoingCall(Call call, int callState) { Log.v(this, "onSuccessfulOutgoingCall, %s", call); call.setPostCallPackageName(getRoleManagerAdapter().getDefaultCallScreeningApp()); call.setPostCallPackageName(getRoleManagerAdapter().getDefaultCallScreeningApp( call.getUserHandleFromTargetPhoneAccount())); setCallState(call, callState, "successful outgoing call"); if (!mCalls.contains(call)) { Loading Loading @@ -722,8 +724,11 @@ public class CallsManager extends Call.ListenerBase private IncomingCallFilterGraph setUpCallFilterGraph(Call incomingCall) { incomingCall.setIsUsingCallFiltering(true); String carrierPackageName = getCarrierPackageName(); String defaultDialerPackageName = TelecomManager.from(mContext).getDefaultDialerPackage(); String userChosenPackageName = getRoleManagerAdapter().getDefaultCallScreeningApp(); UserHandle userHandle = incomingCall.getUserHandleFromTargetPhoneAccount(); String defaultDialerPackageName = TelecomManager.from(mContext). getDefaultDialerPackage(userHandle); String userChosenPackageName = getRoleManagerAdapter(). getDefaultCallScreeningApp(userHandle); AppLabelProxy appLabelProxy = packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName); ParcelableCallUtils.Converter converter = new ParcelableCallUtils.Converter(); Loading Loading @@ -838,7 +843,9 @@ public class CallsManager extends Call.ListenerBase if (result.shouldAllowCall) { incomingCall.setPostCallPackageName( getRoleManagerAdapter().getDefaultCallScreeningApp()); getRoleManagerAdapter().getDefaultCallScreeningApp( incomingCall.getUserHandleFromTargetPhoneAccount() )); Log.i(this, "onCallFilteringComplete: allow call."); if (hasMaximumManagedRingingCalls(incomingCall)) { Loading Loading @@ -1884,6 +1891,8 @@ public class CallsManager extends Call.ListenerBase dialerSelectPhoneAccountFuture.thenAcceptBothAsync(contactLookupFuture, (callPhoneAccountHandlePair, uriCallerInfoPair) -> { Call theCall = callPhoneAccountHandlePair.first; UserHandle userHandleForCallScreening = theCall. getUserHandleFromTargetPhoneAccount(); boolean isInContacts = uriCallerInfoPair.second != null && uriCallerInfoPair.second.contactExists; Log.d(CallsManager.this, "outgoingCallIdStage: isInContacts=%s", Loading @@ -1894,10 +1903,12 @@ public class CallsManager extends Call.ListenerBase PackageManager packageManager = mContext.getPackageManager(); int permission = packageManager.checkPermission( Manifest.permission.READ_CONTACTS, mRoleManagerAdapter.getDefaultCallScreeningApp()); mRoleManagerAdapter. getDefaultCallScreeningApp(userHandleForCallScreening)); Log.d(CallsManager.this, "default call screening service package %s has permissions=%s", mRoleManagerAdapter.getDefaultCallScreeningApp(), mRoleManagerAdapter. getDefaultCallScreeningApp(userHandleForCallScreening), permission == PackageManager.PERMISSION_GRANTED); if ((!isInContacts) || (permission == PackageManager.PERMISSION_GRANTED)) { bindForOutgoingCallerId(theCall); Loading Loading @@ -2008,7 +2019,8 @@ public class CallsManager extends Call.ListenerBase private void bindForOutgoingCallerId(Call theCall) { // Find the user chosen call screening app. String callScreeningApp = mRoleManagerAdapter.getDefaultCallScreeningApp(); mRoleManagerAdapter.getDefaultCallScreeningApp( theCall.getUserHandleFromTargetPhoneAccount()); CompletableFuture future = new CallScreeningServiceHelper(mContext, Loading Loading @@ -2164,14 +2176,18 @@ public class CallsManager extends Call.ListenerBase boolean endEarly = false; String disconnectReason = ""; String callRedirectionApp = mRoleManagerAdapter.getDefaultCallRedirectionApp(); String callRedirectionApp = mRoleManagerAdapter.getDefaultCallRedirectionApp( phoneAccountHandle.getUserHandle()); PhoneAccount phoneAccount = mPhoneAccountRegistrar .getPhoneAccountUnchecked(phoneAccountHandle); if (phoneAccount != null && !phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_MULTI_USER)) { // Note that mCurrentUserHandle may not actually be the current user, i.e. // in the case of work profiles UserHandle currentUserHandle = call.getUserHandleFromTargetPhoneAccount(); // Check if the phoneAccountHandle belongs to the current user if (phoneAccountHandle != null && !phoneAccountHandle.getUserHandle().equals(mCurrentUserHandle)) { !phoneAccountHandle.getUserHandle().equals(currentUserHandle)) { phoneAccountHandle = null; } } Loading src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java +1 −1 Original line number Diff line number Diff line Loading @@ -372,7 +372,7 @@ public class NewOutgoingCallIntentBroadcaster { * broadcasting. */ callRedirectionWithService = callRedirectionProcessor .canMakeCallRedirectionWithService(); .canMakeCallRedirectionWithServiceAsUser(mCall.getInitiatingUser()); if (callRedirectionWithService) { callRedirectionProcessor.performCallRedirection(mCall.getInitiatingUser()); } Loading src/com/android/server/telecom/RoleManagerAdapter.java +2 −2 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public interface RoleManagerAdapter { * redirection role. * @return the package name of the app filling the role, {@code null} otherwise}. */ String getDefaultCallRedirectionApp(); String getDefaultCallRedirectionApp(UserHandle userHandle); /** * Override the {@link android.app.role.RoleManager} call redirection app with another value. Loading @@ -56,7 +56,7 @@ public interface RoleManagerAdapter { * screening role. * @return the package name of the app filling the role, {@code null} otherwise}. */ String getDefaultCallScreeningApp(); String getDefaultCallScreeningApp(UserHandle userHandle); /** * Override the {@link android.app.role.RoleManager} call screening app with another value. Loading src/com/android/server/telecom/RoleManagerAdapterImpl.java +11 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.role.RoleManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Binder; import android.os.UserHandle; import android.telecom.Log; Loading Loading @@ -50,11 +51,11 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { } @Override public String getDefaultCallRedirectionApp() { public String getDefaultCallRedirectionApp(UserHandle userHandleForCallRedirection) { if (mOverrideDefaultCallRedirectionApp != null) { return mOverrideDefaultCallRedirectionApp; } return getRoleManagerCallRedirectionApp(); return getRoleManagerCallRedirectionApp(userHandleForCallRedirection); } @Override Loading @@ -63,11 +64,11 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { } @Override public String getDefaultCallScreeningApp() { public String getDefaultCallScreeningApp(UserHandle userHandleForCallScreening) { if (mOverrideDefaultCallScreeningApp != null) { return mOverrideDefaultCallScreeningApp; } return getRoleManagerCallScreeningApp(); return getRoleManagerCallScreeningApp(userHandleForCallScreening); } @Override Loading Loading @@ -118,9 +119,9 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { mCurrentUserHandle = currentUserHandle; } private String getRoleManagerCallScreeningApp() { private String getRoleManagerCallScreeningApp(UserHandle userHandle) { List<String> roleHolders = mRoleManager.getRoleHoldersAsUser(ROLE_CALL_SCREENING, mCurrentUserHandle); userHandle); if (roleHolders == null || roleHolders.isEmpty()) { return null; } Loading @@ -141,9 +142,9 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { return new ArrayList<>(); } private String getRoleManagerCallRedirectionApp() { private String getRoleManagerCallRedirectionApp(UserHandle userHandle) { List<String> roleHolders = mRoleManager.getRoleHoldersAsUser(ROLE_CALL_REDIRECTION_APP, mCurrentUserHandle); userHandle); if (roleHolders == null || roleHolders.isEmpty()) { return null; } Loading Loading @@ -184,7 +185,7 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { pw.print("(override "); pw.print(mOverrideDefaultCallRedirectionApp); pw.print(") "); pw.print(getRoleManagerCallRedirectionApp()); pw.print(getRoleManagerCallRedirectionApp(Binder.getCallingUserHandle())); } pw.println(); Loading @@ -193,7 +194,7 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { pw.print("(override "); pw.print(mOverrideDefaultCallScreeningApp); pw.print(") "); pw.print(getRoleManagerCallScreeningApp()); pw.print(getRoleManagerCallScreeningApp(Binder.getCallingUserHandle())); } pw.println(); Loading Loading
src/com/android/server/telecom/CallScreeningServiceHelper.java +3 −2 Original line number Diff line number Diff line Loading @@ -212,8 +212,9 @@ public class CallScreeningServiceHelper { serviceConnection, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE | Context.BIND_SCHEDULE_LIKE_TOP_APP, UserHandle.CURRENT)) { Log.d(TAG, "bindService, found service, waiting for it to connect"); userHandle)) { Log.d(TAG,"bindServiceAsUser, found service," + "waiting for it to connect to user: %s", userHandle); return true; } Loading
src/com/android/server/telecom/CallsManager.java +25 −9 Original line number Diff line number Diff line Loading @@ -655,9 +655,11 @@ public class CallsManager extends Call.ListenerBase } @Override @VisibleForTesting public void onSuccessfulOutgoingCall(Call call, int callState) { Log.v(this, "onSuccessfulOutgoingCall, %s", call); call.setPostCallPackageName(getRoleManagerAdapter().getDefaultCallScreeningApp()); call.setPostCallPackageName(getRoleManagerAdapter().getDefaultCallScreeningApp( call.getUserHandleFromTargetPhoneAccount())); setCallState(call, callState, "successful outgoing call"); if (!mCalls.contains(call)) { Loading Loading @@ -722,8 +724,11 @@ public class CallsManager extends Call.ListenerBase private IncomingCallFilterGraph setUpCallFilterGraph(Call incomingCall) { incomingCall.setIsUsingCallFiltering(true); String carrierPackageName = getCarrierPackageName(); String defaultDialerPackageName = TelecomManager.from(mContext).getDefaultDialerPackage(); String userChosenPackageName = getRoleManagerAdapter().getDefaultCallScreeningApp(); UserHandle userHandle = incomingCall.getUserHandleFromTargetPhoneAccount(); String defaultDialerPackageName = TelecomManager.from(mContext). getDefaultDialerPackage(userHandle); String userChosenPackageName = getRoleManagerAdapter(). getDefaultCallScreeningApp(userHandle); AppLabelProxy appLabelProxy = packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName); ParcelableCallUtils.Converter converter = new ParcelableCallUtils.Converter(); Loading Loading @@ -838,7 +843,9 @@ public class CallsManager extends Call.ListenerBase if (result.shouldAllowCall) { incomingCall.setPostCallPackageName( getRoleManagerAdapter().getDefaultCallScreeningApp()); getRoleManagerAdapter().getDefaultCallScreeningApp( incomingCall.getUserHandleFromTargetPhoneAccount() )); Log.i(this, "onCallFilteringComplete: allow call."); if (hasMaximumManagedRingingCalls(incomingCall)) { Loading Loading @@ -1884,6 +1891,8 @@ public class CallsManager extends Call.ListenerBase dialerSelectPhoneAccountFuture.thenAcceptBothAsync(contactLookupFuture, (callPhoneAccountHandlePair, uriCallerInfoPair) -> { Call theCall = callPhoneAccountHandlePair.first; UserHandle userHandleForCallScreening = theCall. getUserHandleFromTargetPhoneAccount(); boolean isInContacts = uriCallerInfoPair.second != null && uriCallerInfoPair.second.contactExists; Log.d(CallsManager.this, "outgoingCallIdStage: isInContacts=%s", Loading @@ -1894,10 +1903,12 @@ public class CallsManager extends Call.ListenerBase PackageManager packageManager = mContext.getPackageManager(); int permission = packageManager.checkPermission( Manifest.permission.READ_CONTACTS, mRoleManagerAdapter.getDefaultCallScreeningApp()); mRoleManagerAdapter. getDefaultCallScreeningApp(userHandleForCallScreening)); Log.d(CallsManager.this, "default call screening service package %s has permissions=%s", mRoleManagerAdapter.getDefaultCallScreeningApp(), mRoleManagerAdapter. getDefaultCallScreeningApp(userHandleForCallScreening), permission == PackageManager.PERMISSION_GRANTED); if ((!isInContacts) || (permission == PackageManager.PERMISSION_GRANTED)) { bindForOutgoingCallerId(theCall); Loading Loading @@ -2008,7 +2019,8 @@ public class CallsManager extends Call.ListenerBase private void bindForOutgoingCallerId(Call theCall) { // Find the user chosen call screening app. String callScreeningApp = mRoleManagerAdapter.getDefaultCallScreeningApp(); mRoleManagerAdapter.getDefaultCallScreeningApp( theCall.getUserHandleFromTargetPhoneAccount()); CompletableFuture future = new CallScreeningServiceHelper(mContext, Loading Loading @@ -2164,14 +2176,18 @@ public class CallsManager extends Call.ListenerBase boolean endEarly = false; String disconnectReason = ""; String callRedirectionApp = mRoleManagerAdapter.getDefaultCallRedirectionApp(); String callRedirectionApp = mRoleManagerAdapter.getDefaultCallRedirectionApp( phoneAccountHandle.getUserHandle()); PhoneAccount phoneAccount = mPhoneAccountRegistrar .getPhoneAccountUnchecked(phoneAccountHandle); if (phoneAccount != null && !phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_MULTI_USER)) { // Note that mCurrentUserHandle may not actually be the current user, i.e. // in the case of work profiles UserHandle currentUserHandle = call.getUserHandleFromTargetPhoneAccount(); // Check if the phoneAccountHandle belongs to the current user if (phoneAccountHandle != null && !phoneAccountHandle.getUserHandle().equals(mCurrentUserHandle)) { !phoneAccountHandle.getUserHandle().equals(currentUserHandle)) { phoneAccountHandle = null; } } Loading
src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java +1 −1 Original line number Diff line number Diff line Loading @@ -372,7 +372,7 @@ public class NewOutgoingCallIntentBroadcaster { * broadcasting. */ callRedirectionWithService = callRedirectionProcessor .canMakeCallRedirectionWithService(); .canMakeCallRedirectionWithServiceAsUser(mCall.getInitiatingUser()); if (callRedirectionWithService) { callRedirectionProcessor.performCallRedirection(mCall.getInitiatingUser()); } Loading
src/com/android/server/telecom/RoleManagerAdapter.java +2 −2 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public interface RoleManagerAdapter { * redirection role. * @return the package name of the app filling the role, {@code null} otherwise}. */ String getDefaultCallRedirectionApp(); String getDefaultCallRedirectionApp(UserHandle userHandle); /** * Override the {@link android.app.role.RoleManager} call redirection app with another value. Loading @@ -56,7 +56,7 @@ public interface RoleManagerAdapter { * screening role. * @return the package name of the app filling the role, {@code null} otherwise}. */ String getDefaultCallScreeningApp(); String getDefaultCallScreeningApp(UserHandle userHandle); /** * Override the {@link android.app.role.RoleManager} call screening app with another value. Loading
src/com/android/server/telecom/RoleManagerAdapterImpl.java +11 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.role.RoleManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Binder; import android.os.UserHandle; import android.telecom.Log; Loading Loading @@ -50,11 +51,11 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { } @Override public String getDefaultCallRedirectionApp() { public String getDefaultCallRedirectionApp(UserHandle userHandleForCallRedirection) { if (mOverrideDefaultCallRedirectionApp != null) { return mOverrideDefaultCallRedirectionApp; } return getRoleManagerCallRedirectionApp(); return getRoleManagerCallRedirectionApp(userHandleForCallRedirection); } @Override Loading @@ -63,11 +64,11 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { } @Override public String getDefaultCallScreeningApp() { public String getDefaultCallScreeningApp(UserHandle userHandleForCallScreening) { if (mOverrideDefaultCallScreeningApp != null) { return mOverrideDefaultCallScreeningApp; } return getRoleManagerCallScreeningApp(); return getRoleManagerCallScreeningApp(userHandleForCallScreening); } @Override Loading Loading @@ -118,9 +119,9 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { mCurrentUserHandle = currentUserHandle; } private String getRoleManagerCallScreeningApp() { private String getRoleManagerCallScreeningApp(UserHandle userHandle) { List<String> roleHolders = mRoleManager.getRoleHoldersAsUser(ROLE_CALL_SCREENING, mCurrentUserHandle); userHandle); if (roleHolders == null || roleHolders.isEmpty()) { return null; } Loading @@ -141,9 +142,9 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { return new ArrayList<>(); } private String getRoleManagerCallRedirectionApp() { private String getRoleManagerCallRedirectionApp(UserHandle userHandle) { List<String> roleHolders = mRoleManager.getRoleHoldersAsUser(ROLE_CALL_REDIRECTION_APP, mCurrentUserHandle); userHandle); if (roleHolders == null || roleHolders.isEmpty()) { return null; } Loading Loading @@ -184,7 +185,7 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { pw.print("(override "); pw.print(mOverrideDefaultCallRedirectionApp); pw.print(") "); pw.print(getRoleManagerCallRedirectionApp()); pw.print(getRoleManagerCallRedirectionApp(Binder.getCallingUserHandle())); } pw.println(); Loading @@ -193,7 +194,7 @@ public class RoleManagerAdapterImpl implements RoleManagerAdapter { pw.print("(override "); pw.print(mOverrideDefaultCallScreeningApp); pw.print(") "); pw.print(getRoleManagerCallScreeningApp()); pw.print(getRoleManagerCallScreeningApp(Binder.getCallingUserHandle())); } pw.println(); Loading