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

Commit a664df66 authored by Hwangoo Park's avatar Hwangoo Park Committed by Android (Google) Code Review
Browse files

Merge "Use "useEmergencyPdn" flag for emergency SMS" into udc-dev

parents 154856f6 38b15c29
Loading
Loading
Loading
Loading
+30 −15
Original line number Diff line number Diff line
@@ -52,8 +52,14 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
        mEmergencyStateTracker = tracker;
    }

    /**
     * Notifies that WLAN transport has been selected.
     *
     * @param useEmergencyPdn A flag specifying whether Wi-Fi emergency service uses emergency PDN
     *                        or not.
     */
    @Override
    public void onWlanSelected() {
    public void onWlanSelected(boolean useEmergencyPdn) {
        synchronized (mLock) {
            if (mPreferredTransportType != AccessNetworkConstants.TRANSPORT_TYPE_INVALID) {
                logi("Domain selection completion is in progress");
@@ -63,8 +69,9 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
            mEmergencyStateTracker.onEmergencyTransportChanged(
                    EmergencyStateTracker.EMERGENCY_TYPE_SMS, MODE_EMERGENCY_WLAN);

            // Change the transport type if the current preferred transport type for an emergency
            // is not {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}.
            if (useEmergencyPdn) {
                // Change the transport type if the current preferred transport type for
                // an emergency is not {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}.
                AccessNetworksManager anm = mPhone.getAccessNetworksManager();
                if (anm.getPreferredTransport(ApnSetting.TYPE_EMERGENCY)
                        != AccessNetworkConstants.TRANSPORT_TYPE_WLAN) {
@@ -73,8 +80,9 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
                    // is successfully changed and notified from the {@link AccessNetworksManager}.
                    return;
                }
            }

            super.onWlanSelected();
            super.onWlanSelected(useEmergencyPdn);
        }
    }

@@ -84,15 +92,22 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
                EmergencyStateTracker.EMERGENCY_TYPE_SMS, MODE_EMERGENCY_WWAN);
    }

    /**
     * Notifies the domain selected.
     *
     * @param domain The selected domain.
     * @param useEmergencyPdn A flag specifying whether emergency service uses emergency PDN or not.
     */
    @Override
    public void onDomainSelected(@NetworkRegistrationInfo.Domain int domain) {
    public void onDomainSelected(@NetworkRegistrationInfo.Domain int domain,
            boolean useEmergencyPdn) {
        synchronized (mLock) {
            if (mPreferredTransportType != AccessNetworkConstants.TRANSPORT_TYPE_INVALID) {
                logi("Domain selection completion is in progress");
                return;
            }

            if (domain == NetworkRegistrationInfo.DOMAIN_PS) {
            if (useEmergencyPdn && domain == NetworkRegistrationInfo.DOMAIN_PS) {
                // Change the transport type if the current preferred transport type for
                // an emergency is not {@link AccessNetworkConstants#TRANSPORT_TYPE_WWAN}.
                AccessNetworksManager anm = mPhone.getAccessNetworksManager();
@@ -105,7 +120,7 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
                }
            }

            super.onDomainSelected(domain);
            super.onDomainSelected(domain, useEmergencyPdn);
        }
    }

@@ -131,7 +146,7 @@ public class EmergencySmsDomainSelectionConnection extends SmsDomainSelectionCon
        synchronized (mLock) {
            if (preferredTransportType == mPreferredTransportType) {
                mPreferredTransportType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
                super.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
                super.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
                anm.unregisterForQualifiedNetworksChanged(mHandler);
            }
        }
+58 −12
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onWlanSelected();
        mDsConnection.onWlanSelected(true);
        processAllMessages();

        assertTrue(future.isDone());
@@ -139,7 +139,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onWlanSelected();
        mDsConnection.onWlanSelected(true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -160,6 +160,30 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
        verify(mAnm).unregisterForQualifiedNetworksChanged(any(Handler.class));
    }

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testOnWlanSelectedWithDifferentTransportTypeAndImsPdn() throws Exception {
        when(mAnm.getPreferredTransport(anyInt())).thenReturn(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
        CompletableFuture<Integer> future =
                mDsConnection.requestDomainSelection(mDsAttr, mDscCallback);
        future.thenAcceptAsync((domain) -> {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onWlanSelected(false);
        processAllMessages();

        verify(mEmergencyStateTracker).onEmergencyTransportChanged(
                eq(EmergencyStateTracker.EMERGENCY_TYPE_SMS), eq(MODE_EMERGENCY_WLAN));
        verify(mAnm, never()).registerForQualifiedNetworksChanged(any(Handler.class), anyInt());
        verify(mPhone, never()).notifyEmergencyDomainSelected(anyInt());

        assertTrue(future.isDone());
    }

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
@@ -174,11 +198,11 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onWlanSelected();
        mDsConnection.onWlanSelected(true);
        // When onWlanSelected() is called again,
        // it will be ignored because the change of preferred transport is in progress.
        // => onEmergencyTransportChanged() is called only once.
        mDsConnection.onWlanSelected();
        mDsConnection.onWlanSelected(true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -220,7 +244,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        processAllMessages();

        assertTrue(future.isDone());
@@ -239,7 +263,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -258,6 +282,28 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
        verify(mAnm).unregisterForQualifiedNetworksChanged(any(Handler.class));
    }

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testOnDomainSelectedPsWithDifferentTransportTypeAndImsPdn() throws Exception {
        when(mAnm.getPreferredTransport(anyInt())).thenReturn(
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        CompletableFuture<Integer> future =
                mDsConnection.requestDomainSelection(mDsAttr, mDscCallback);
        future.thenAcceptAsync((domain) -> {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, false);
        processAllMessages();

        verify(mAnm, never()).registerForQualifiedNetworksChanged(any(Handler.class), anyInt());
        verify(mPhone, never()).notifyEmergencyDomainSelected(anyInt());

        assertTrue(future.isDone());
    }

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
@@ -271,7 +317,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -304,11 +350,11 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        // When onDomainSelected() is called again with the different domain,
        // it will be ignored because the change of preferred transport is in progress.
        // => The domain selection result is DOMAIN_PS.
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_CS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_CS, false);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -339,7 +385,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_CS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_CS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_CS, false);
        processAllMessages();

        assertTrue(future.isDone());
@@ -358,7 +404,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
@@ -389,7 +435,7 @@ public class EmergencySmsDomainSelectionConnectionTest extends TelephonyTest {
            assertEquals(Integer.valueOf(NetworkRegistrationInfo.DOMAIN_PS), domain);
        }, mHandler::post);

        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS);
        mDsConnection.onDomainSelected(NetworkRegistrationInfo.DOMAIN_PS, true);
        processAllMessages();

        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+5 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ public class SmsDomainSelectionConnectionTest {

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testOnWlanSelected() throws Exception {
        setUpTestableLooper();
        CompletableFuture<Integer> future =
@@ -139,6 +140,7 @@ public class SmsDomainSelectionConnectionTest {

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testOnDomainSelectedPs() throws Exception {
        setUpTestableLooper();
        CompletableFuture<Integer> future =
@@ -155,6 +157,7 @@ public class SmsDomainSelectionConnectionTest {

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testOnDomainSelectedCs() throws Exception {
        setUpTestableLooper();
        CompletableFuture<Integer> future =
@@ -171,6 +174,7 @@ public class SmsDomainSelectionConnectionTest {

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testFinishSelection() throws Exception {
        setUpTestableLooper();
        CompletableFuture<Integer> future =
@@ -188,6 +192,7 @@ public class SmsDomainSelectionConnectionTest {

    @Test
    @SmallTest
    @SuppressWarnings("FutureReturnValueIgnored")
    public void testCancelSelection() throws Exception {
        CompletableFuture<Integer> future =
                mDsConnection.requestDomainSelection(mDsAttr, mDscCallback);