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

Commit 7522cac1 authored by Ayush Sharma's avatar Ayush Sharma Committed by Android (Google) Code Review
Browse files

Merge "Use personal dialer for emergency call" into udc-dev

parents e4b18b35 a223ca4c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -2600,8 +2600,17 @@ public class InCallController extends CallsManagerListenerBase implements

    private UserHandle getUserFromCall(Call call) {
        // Call may never be specified, so we can fall back to using the CallManager current user.
        return call == null
                ? mCallsManager.getCurrentUserHandle()
                : call.getUserHandleFromTargetPhoneAccount();
        if (call == null) {
            return mCallsManager.getCurrentUserHandle();
        } else {
            UserHandle userFromCall = call.getUserHandleFromTargetPhoneAccount();
            UserManager userManager = mContext.getSystemService(UserManager.class);
            // Emergency call should never be blocked, so if the user associated with call is in
            // quite mode, use the primary user for the emergency call.
            if (call.isEmergencyCall() && userManager.isQuietModeEnabled(userFromCall)) {
                return mCallsManager.getCurrentUserHandle();
            }
            return userFromCall;
        }
    }
}
+66 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.permission.PermissionCheckerManager;
import android.telecom.CallAudioState;
import android.telecom.InCallService;
@@ -150,6 +151,7 @@ public class InCallControllerTests extends TelecomTestCase {
    @Mock PermissionInfo mMockPermissionInfo;
    @Mock InCallController.InCallServiceInfo mInCallServiceInfo;
    @Mock private AnomalyReporterAdapter mAnomalyReporterAdapter;
    @Mock UserManager mMockUserManager;

    @Rule
    public TestRule compatChangeRule = new PlatformCompatChangeRule();
@@ -180,6 +182,7 @@ public class InCallControllerTests extends TelecomTestCase {
    private static final PhoneAccountHandle PA_HANDLE =
            new PhoneAccountHandle(new ComponentName("pa_pkg", "pa_cls"),
                    "pa_id_0", UserHandle.of(CURRENT_USER_ID));
    private static final UserHandle DUMMY_USER_HANDLE = UserHandle.of(10);

    private UserHandle mUserHandle = UserHandle.of(CURRENT_USER_ID);
    private InCallController mInCallController;
@@ -462,6 +465,9 @@ public class InCallControllerTests extends TelecomTestCase {
        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
        when(mMockCallsManager.isInEmergencyCall()).thenReturn(false);
        when(mMockCall.isEmergencyCall()).thenReturn(true);
        when(mMockContext.getSystemService(eq(UserManager.class)))
            .thenReturn(mMockUserManager);
        when(mMockUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
        when(mMockCall.isIncoming()).thenReturn(false);
        when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
        when(mMockCall.getIntentExtras()).thenReturn(callExtras);
@@ -539,6 +545,9 @@ public class InCallControllerTests extends TelecomTestCase {
        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
        when(mMockCallsManager.isInEmergencyCall()).thenReturn(true);
        when(mMockCall.isEmergencyCall()).thenReturn(true);
        when(mMockContext.getSystemService(eq(UserManager.class)))
            .thenReturn(mMockUserManager);
        when(mMockUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
        when(mMockCall.isIncoming()).thenReturn(false);
        when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
        when(mMockCall.getIntentExtras()).thenReturn(callExtras);
@@ -598,6 +607,60 @@ public class InCallControllerTests extends TelecomTestCase {
                eq(Manifest.permission.ACCESS_FINE_LOCATION), eq(mUserHandle));
    }

    @MediumTest
    @Test
    public void
    testBindToService_UserAssociatedWithCallIsInQuietMode_EmergCallInCallUi_BindsToPrimaryUser()
        throws Exception {
        when(mMockCallsManager.getCurrentUserHandle()).thenReturn(mUserHandle);
        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
        when(mMockCall.isEmergencyCall()).thenReturn(true);
        when(mMockCall.getUserHandleFromTargetPhoneAccount()).thenReturn(DUMMY_USER_HANDLE);
        when(mMockContext.getSystemService(eq(UserManager.class)))
            .thenReturn(mMockUserManager);
        when(mMockUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(true);
        setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
        setupMockPackageManagerLocationPermission(SYS_PKG, false /* granted */);

        mInCallController.bindToServices(mMockCall);

        ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).bindServiceAsUser(
            bindIntentCaptor.capture(),
            any(ServiceConnection.class),
            eq(serviceBindingFlags),
            eq(mUserHandle));
        Intent bindIntent = bindIntentCaptor.getValue();
        assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
    }

    @MediumTest
    @Test
    public void
    testBindToService_UserAssociatedWithCallNotInQuietMode_EmergCallInCallUi_BindsToAssociatedUser()
        throws Exception {
        when(mMockCallsManager.getCurrentUserHandle()).thenReturn(mUserHandle);
        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
        when(mMockCall.isEmergencyCall()).thenReturn(true);
        when(mMockCall.getUserHandleFromTargetPhoneAccount()).thenReturn(DUMMY_USER_HANDLE);
        when(mMockContext.getSystemService(eq(UserManager.class)))
            .thenReturn(mMockUserManager);
        when(mMockUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
        setupMockPackageManager(true /* default */, true /* system */, false /* external calls */);
        setupMockPackageManagerLocationPermission(SYS_PKG, false /* granted */);

        mInCallController.bindToServices(mMockCall);

        ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).bindServiceAsUser(
            bindIntentCaptor.capture(),
            any(ServiceConnection.class),
            eq(serviceBindingFlags),
            eq(DUMMY_USER_HANDLE));
        Intent bindIntent = bindIntentCaptor.getValue();
        assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
    }

    /**
     * This test verifies the behavior of Telecom when the system dialer crashes on binding and must
     * be restarted.  Specifically, it ensures when the system dialer crashes we revoke the runtime
@@ -614,6 +677,9 @@ public class InCallControllerTests extends TelecomTestCase {
        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
        when(mMockCallsManager.isInEmergencyCall()).thenReturn(true);
        when(mMockCall.isEmergencyCall()).thenReturn(true);
        when(mMockContext.getSystemService(eq(UserManager.class)))
            .thenReturn(mMockUserManager);
        when(mMockUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
        when(mMockCall.isIncoming()).thenReturn(false);
        when(mMockCall.getTargetPhoneAccount()).thenReturn(PA_HANDLE);
        when(mMockCall.getIntentExtras()).thenReturn(callExtras);