Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6455109 authored by Pranav Madapurmath's avatar Pranav Madapurmath Committed by Android (Google) Code Review
Browse files

Merge "Separate TelecomManager#isInSelfManagedCall APIs" into main

parents 0f07eae0 4d509e0a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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";
+1 −1
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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);
+38 −7
Original line number Diff line number Diff line
@@ -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);