diff options
author | 2024-02-23 18:16:41 +0000 | |
---|---|---|
committer | 2024-02-23 18:16:41 +0000 | |
commit | a6455109c0c01da381f156624d751b7838d2aa57 (patch) | |
tree | b2d1404046e35fefbf8070bba42d5ba108df7be8 | |
parent | 0f07eae06f3c6fc90debac08c168be64d0b6ca4e (diff) | |
parent | 4d509e0a502eb1f47e9968a1d7368d9000619080 (diff) |
Merge "Separate TelecomManager#isInSelfManagedCall APIs" into main
4 files changed, 43 insertions, 11 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index cc7d97a6ee50..2ff1f766ad8f 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -14204,7 +14204,8 @@ package android.telecom { method @Deprecated public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); - method @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies") @RequiresPermission(allOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isInSelfManagedCall(@NonNull String, @NonNull android.os.UserHandle, boolean); + method @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies") @RequiresPermission(allOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isInSelfManagedCall(@NonNull String, @NonNull android.os.UserHandle); + method @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies") @RequiresPermission(allOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isInSelfManagedCall(@NonNull String, boolean); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle); field public static final String ACTION_CURRENT_TTY_MODE_CHANGED = "android.telecom.action.CURRENT_TTY_MODE_CHANGED"; diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index fc7b87317344..3a7ac0bd659d 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -8206,7 +8206,7 @@ public class NotificationManagerService extends SystemService { try { return mTelecomManager.isInManagedCall() || mTelecomManager.isInSelfManagedCall(pkg, - UserHandle.getUserHandleForUid(uid), /* hasCrossUserAccess */ true); + /* hasCrossUserAccess */ true); } catch (IllegalStateException ise) { // Telecom is not ready (this is likely early boot), so there are no calls. return false; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index cff7f460feb5..715c9d4081b2 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -12008,7 +12008,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // style + self managed call - bypasses block when(mTelecomManager.isInSelfManagedCall( - r.getSbn().getPackageName(), r.getUser(), true)).thenReturn(true); + r.getSbn().getPackageName(), true)).thenReturn(true); assertThat(mService.checkDisqualifyingFeatures(r.getUserId(), r.getUid(), r.getSbn().getId(), r.getSbn().getTag(), r, false, false)).isTrue(); @@ -12091,7 +12091,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // style + self managed call - bypasses block mService.clearNotifications(); reset(mUsageStats); - when(mTelecomManager.isInSelfManagedCall(r.getSbn().getPackageName(), r.getUser(), true)) + when(mTelecomManager.isInSelfManagedCall(r.getSbn().getPackageName(), true)) .thenReturn(true); mService.addEnqueuedNotification(r); diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 08c76af70511..9792cdd80a00 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -2797,13 +2797,10 @@ public class TelecomManager { * calls for a given {@code packageName} and {@code userHandle}. * * @param packageName the package name of the app to check calls for. - * @param userHandle the user handle on which to check for calls. - * @param detectForAllUsers indicates if calls should be detected across all users. If it is - * set to {@code true}, and the caller has the ability to interact - * across users, the userHandle parameter is disregarded. + * @param userHandle the user handle to check calls for. * @return {@code true} if there are ongoing calls, {@code false} otherwise. - * @throws SecurityException if detectForAllUsers is true or userHandle is not the calling user - * and the caller does not grant the ability to interact across users. + * @throws SecurityException if the userHandle is not the calling user and the caller does not + * grant the ability to interact across users. * @hide */ @SystemApi @@ -2811,11 +2808,45 @@ public class TelecomManager { @RequiresPermission(allOf = {Manifest.permission.READ_PRIVILEGED_PHONE_STATE, Manifest.permission.INTERACT_ACROSS_USERS}, conditional = true) public boolean isInSelfManagedCall(@NonNull String packageName, - @NonNull UserHandle userHandle, boolean detectForAllUsers) { + @NonNull UserHandle userHandle) { ITelecomService service = getTelecomService(); if (service != null) { try { return service.isInSelfManagedCall(packageName, userHandle, + mContext.getOpPackageName(), false); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException isInSelfManagedCall: " + e); + e.rethrowFromSystemServer(); + return false; + } + } else { + throw new IllegalStateException("Telecom service is not present"); + } + } + + /** + * Determines whether there are any ongoing {@link PhoneAccount#CAPABILITY_SELF_MANAGED} + * calls for a given {@code packageName} amongst all users, given that detectForAllUsers is true + * and the caller has the ability to interact across users. If detectForAllUsers isn't enabled, + * the calls will be checked against the caller. + * + * @param packageName the package name of the app to check calls for. + * @param detectForAllUsers indicates if calls should be detected across all users. + * @return {@code true} if there are ongoing calls, {@code false} otherwise. + * @throws SecurityException if detectForAllUsers is true and the caller does not grant the + * ability to interact across users. + * @hide + */ + @SystemApi + @FlaggedApi(Flags.FLAG_TELECOM_RESOLVE_HIDDEN_DEPENDENCIES) + @RequiresPermission(allOf = {Manifest.permission.READ_PRIVILEGED_PHONE_STATE, + Manifest.permission.INTERACT_ACROSS_USERS}, conditional = true) + public boolean isInSelfManagedCall(@NonNull String packageName, + boolean detectForAllUsers) { + ITelecomService service = getTelecomService(); + if (service != null) { + try { + return service.isInSelfManagedCall(packageName, null, mContext.getOpPackageName(), detectForAllUsers); } catch (RemoteException e) { Log.e(TAG, "RemoteException isInSelfManagedCall: " + e); |