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

Commit 6f598827 authored by Hakjun Choi's avatar Hakjun Choi
Browse files

add every emergency call case to satellite esos message recommender metrics

currently only recommender timer is expired cases are reported, but it is needed to add every emergency call cases

Bug: 362272847
Flag: EXEMPT bugfix
Test: SatelliteSOSMessageRecommenderTest
      manually test whether atom is loggered or not
Change-Id: Ie4bdcaea78539600fb57da9940246847b5bde386
parent 740cc545
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -285,7 +285,7 @@ public class SatelliteSOSMessageRecommender extends Handler {


    private void handleSatelliteProvisionStateChangedEvent(boolean provisioned) {
    private void handleSatelliteProvisionStateChangedEvent(boolean provisioned) {
        if (!provisioned) {
        if (!provisioned) {
            cleanUpResources();
            cleanUpResources(false);
        }
        }
    }
    }


@@ -336,8 +336,7 @@ public class SatelliteSOSMessageRecommender extends Handler {
                    + ", isCellularAvailable=" + isCellularAvailable
                    + ", isCellularAvailable=" + isCellularAvailable
                    + ", isSatelliteAllowed=" + isSatelliteAllowed()
                    + ", isSatelliteAllowed=" + isSatelliteAllowed()
                    + ", shouldTrackCall=" + shouldTrackCall(mEmergencyConnection.getState()));
                    + ", shouldTrackCall=" + shouldTrackCall(mEmergencyConnection.getState()));
            reportESosRecommenderDecision(isDialerNotified);
            cleanUpResources(isDialerNotified);
            cleanUpResources();
        }
        }
    }
    }


@@ -388,13 +387,12 @@ public class SatelliteSOSMessageRecommender extends Handler {
             * we're not tracking. There must be some unexpected things happened in
             * we're not tracking. There must be some unexpected things happened in
             * TelephonyConnectionService. Thus, we need to clean up the resources.
             * TelephonyConnectionService. Thus, we need to clean up the resources.
             */
             */
            cleanUpResources();
            cleanUpResources(false);
            return;
            return;
        }
        }


        if (!shouldTrackCall(state)) {
        if (!shouldTrackCall(state)) {
            reportESosRecommenderDecision(false);
            cleanUpResources(false);
            cleanUpResources();
        } else {
        } else {
            // Location service will enter emergency mode only when connection state changes to
            // Location service will enter emergency mode only when connection state changes to
            // STATE_DIALING
            // STATE_DIALING
@@ -405,7 +403,8 @@ public class SatelliteSOSMessageRecommender extends Handler {
        }
        }
    }
    }


    private void reportESosRecommenderDecision(boolean isDialerNotified) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void reportESosRecommenderDecision(boolean isDialerNotified) {
        SatelliteStats.getInstance().onSatelliteSosMessageRecommender(
        SatelliteStats.getInstance().onSatelliteSosMessageRecommender(
                new SatelliteStats.SatelliteSosMessageRecommenderParams.Builder()
                new SatelliteStats.SatelliteSosMessageRecommenderParams.Builder()
                        .setDisplaySosMessageSent(isDialerNotified)
                        .setDisplaySosMessageSent(isDialerNotified)
@@ -419,8 +418,9 @@ public class SatelliteSOSMessageRecommender extends Handler {
                        .setCarrierId(getAvailableNtnCarrierID()).build());
                        .setCarrierId(getAvailableNtnCarrierID()).build());
    }
    }


    private void cleanUpResources() {
    private void cleanUpResources(boolean isDialerNotified) {
        plogd("cleanUpResources");
        plogd("cleanUpResources");
        reportESosRecommenderDecision(isDialerNotified);
        synchronized (mLock) {
        synchronized (mLock) {
            stopTimer();
            stopTimer();
            if (mEmergencyConnection != null) {
            if (mEmergencyConnection != null) {
+67 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,9 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;
@@ -67,6 +70,7 @@ import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.metrics.SatelliteStats;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
@@ -118,6 +122,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
    private Uri mTestConnectionAddress = Uri.parse("tel:1234");
    private Uri mTestConnectionAddress = Uri.parse("tel:1234");
    private TestSOSMessageRecommender mTestSOSMessageRecommender;
    private TestSOSMessageRecommender mTestSOSMessageRecommender;
    private ServiceState mServiceState2;
    private ServiceState mServiceState2;
    @Mock
    private SatelliteStats mMockSatelliteStats;


    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
@@ -153,6 +159,10 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        when(mServiceState2.getState()).thenReturn(STATE_OUT_OF_SERVICE);
        when(mServiceState2.getState()).thenReturn(STATE_OUT_OF_SERVICE);
        when(mPhone.isImsRegistered()).thenReturn(false);
        when(mPhone.isImsRegistered()).thenReturn(false);
        when(mPhone2.isImsRegistered()).thenReturn(false);
        when(mPhone2.isImsRegistered()).thenReturn(false);
        replaceInstance(SatelliteStats.class, "sInstance", null,
                mMockSatelliteStats);
        doNothing().when(mMockSatelliteStats).onSatelliteSosMessageRecommender(
                any(SatelliteStats.SatelliteSosMessageRecommenderParams.class));
    }
    }


    @After
    @After
@@ -165,6 +175,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
                DEFAULT_SATELLITE_MESSAGING_PACKAGE, DEFAULT_SATELLITE_MESSAGING_CLASS,
                DEFAULT_SATELLITE_MESSAGING_PACKAGE, DEFAULT_SATELLITE_MESSAGING_CLASS,
                DEFAULT_T911_HANDOVER_INTENT_ACTION);
                DEFAULT_T911_HANDOVER_INTENT_ACTION);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -177,6 +189,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
                "android.com.vendor.message", "android.com.vendor.message.SmsApp",
                "android.com.vendor.message", "android.com.vendor.message.SmsApp",
                DEFAULT_HANDOVER_INTENT_ACTION);
                DEFAULT_HANDOVER_INTENT_ACTION);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -188,6 +202,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS, "", "",
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS, "", "",
                DEFAULT_HANDOVER_INTENT_ACTION);
                DEFAULT_HANDOVER_INTENT_ACTION);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -197,6 +213,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS, "", "",
        testTimeoutBeforeEmergencyCallEnd(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS, "", "",
                DEFAULT_HANDOVER_INTENT_ACTION);
                DEFAULT_HANDOVER_INTENT_ACTION);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -208,6 +226,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        processAllMessages();
        processAllMessages();
        assertFalse(mTestSOSMessageRecommender.isTimerStarted());
        assertFalse(mTestSOSMessageRecommender.isTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
    }
    }


    private void testTimeoutBeforeEmergencyCallEnd(int expectedHandoverType,
    private void testTimeoutBeforeEmergencyCallEnd(int expectedHandoverType,
@@ -239,6 +258,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        }
        }
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -266,6 +287,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertFalse(mTestConnection.isEventSent(TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE));
        assertFalse(mTestConnection.isEventSent(TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE));
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -302,11 +325,15 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
    @Test
    @Test
    public void testStopTrackingCallBeforeTimeout_ConnectionActive() {
    public void testStopTrackingCallBeforeTimeout_ConnectionActive() {
        testStopTrackingCallBeforeTimeout(Connection.STATE_ACTIVE);
        testStopTrackingCallBeforeTimeout(Connection.STATE_ACTIVE);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testStopTrackingCallBeforeTimeout_ConnectionDisconnected() {
    public void testStopTrackingCallBeforeTimeout_ConnectionDisconnected() {
        testStopTrackingCallBeforeTimeout(Connection.STATE_DISCONNECTED);
        testStopTrackingCallBeforeTimeout(Connection.STATE_DISCONNECTED);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -337,6 +364,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -357,6 +386,9 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
        reset(mMockSatelliteStats);


        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        processAllMessages();
        processAllMessages();
@@ -387,6 +419,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertUnregisterForStateChangedEventsTriggered(mPhone, 2, 2);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 2, 2);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 2, 2);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 2, 2);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -426,30 +460,40 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertFalse(mTestSOSMessageRecommender.isTimerStarted());
        assertFalse(mTestSOSMessageRecommender.isTimerStarted());
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testCellularServiceStateChangedBeforeTimeout_InServiceToOutOfService() {
    public void testCellularServiceStateChangedBeforeTimeout_InServiceToOutOfService() {
        testCellularServiceStateChangedBeforeTimeout(
        testCellularServiceStateChangedBeforeTimeout(
                ServiceState.STATE_IN_SERVICE, STATE_OUT_OF_SERVICE);
                ServiceState.STATE_IN_SERVICE, STATE_OUT_OF_SERVICE);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testCellularServiceStateChangedBeforeTimeout_InServiceToPowerOff() {
    public void testCellularServiceStateChangedBeforeTimeout_InServiceToPowerOff() {
        testCellularServiceStateChangedBeforeTimeout(
        testCellularServiceStateChangedBeforeTimeout(
                ServiceState.STATE_IN_SERVICE, ServiceState.STATE_POWER_OFF);
                ServiceState.STATE_IN_SERVICE, ServiceState.STATE_POWER_OFF);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testCellularServiceStateChangedBeforeTimeout_EmergencyOnlyToOutOfService() {
    public void testCellularServiceStateChangedBeforeTimeout_EmergencyOnlyToOutOfService() {
        testCellularServiceStateChangedBeforeTimeout(
        testCellularServiceStateChangedBeforeTimeout(
                ServiceState.STATE_EMERGENCY_ONLY, STATE_OUT_OF_SERVICE);
                ServiceState.STATE_EMERGENCY_ONLY, STATE_OUT_OF_SERVICE);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testCellularServiceStateChangedBeforeTimeout_EmergencyOnlyToPowerOff() {
    public void testCellularServiceStateChangedBeforeTimeout_EmergencyOnlyToPowerOff() {
        testCellularServiceStateChangedBeforeTimeout(
        testCellularServiceStateChangedBeforeTimeout(
                ServiceState.STATE_EMERGENCY_ONLY, ServiceState.STATE_POWER_OFF);
                ServiceState.STATE_EMERGENCY_ONLY, ServiceState.STATE_POWER_OFF);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertTrue(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -471,11 +515,14 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
    public void testSatelliteNotAllowedInCurrentLocation() {
    public void testSatelliteNotAllowedInCurrentLocation() {
        mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
        mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
        mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        processAllMessages();
        processAllMessages();
        assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
        assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
@@ -498,6 +545,8 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
        verify(mMockSatelliteStats, times(1)).onSatelliteSosMessageRecommender(any());
        assertFalse(mTestSOSMessageRecommender.isDialerNotified());
    }
    }


    @Test
    @Test
@@ -513,6 +562,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {


        assertFalse(testSOSMessageRecommender.isTimerStarted());
        assertFalse(testSOSMessageRecommender.isTimerStarted());
        assertEquals(0, testSOSMessageRecommender.getCountOfTimerStarted());
        assertEquals(0, testSOSMessageRecommender.getCountOfTimerStarted());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
    }
    }


    @Test
    @Test
@@ -548,6 +598,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        processAllMessages();
        processAllMessages();
        assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
        assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
                mTestSOSMessageRecommender.getTimeOutMillis());
                mTestSOSMessageRecommender.getTimeOutMillis());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());


        // Both OEM and carrier support satellite, but device is not connected to carrier satellite
        // Both OEM and carrier support satellite, but device is not connected to carrier satellite
        // within hysteresis time. Thus, OEM timer will be used.
        // within hysteresis time. Thus, OEM timer will be used.
@@ -560,6 +611,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        processAllMessages();
        processAllMessages();
        assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
        assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
                mTestSOSMessageRecommender.getTimeOutMillis());
                mTestSOSMessageRecommender.getTimeOutMillis());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());


        // Both OEM and carrier support satellite, and device is connected to carrier satellite
        // Both OEM and carrier support satellite, and device is connected to carrier satellite
        // within hysteresis time. Thus, carrier timer will be used.
        // within hysteresis time. Thus, carrier timer will be used.
@@ -570,6 +622,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        processAllMessages();
        processAllMessages();
        assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis());
        assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());
    }
    }


    @Test
    @Test
@@ -581,6 +634,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());


        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
    }
    }
@@ -594,6 +648,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());


        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
    }
    }
@@ -613,6 +668,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
        assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
                mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
        verify(mMockSatelliteStats, never()).onSatelliteSosMessageRecommender(any());


        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN);
    }
    }
@@ -896,6 +952,7 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
                isSatelliteAllowedCallback = null;
                isSatelliteAllowedCallback = null;
        private ComponentName mSmsAppComponent = new ComponentName(
        private ComponentName mSmsAppComponent = new ComponentName(
                DEFAULT_SATELLITE_MESSAGING_PACKAGE, DEFAULT_SATELLITE_MESSAGING_CLASS);
                DEFAULT_SATELLITE_MESSAGING_PACKAGE, DEFAULT_SATELLITE_MESSAGING_CLASS);
        private boolean mIsDialerNotified;


        /**
        /**
         * Create an instance of SatelliteSOSMessageRecommender.
         * Create an instance of SatelliteSOSMessageRecommender.
@@ -924,6 +981,12 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
            isSatelliteAllowedCallback = callback;
            isSatelliteAllowedCallback = callback;
        }
        }


        @Override
        protected void reportESosRecommenderDecision(boolean isDialerNotified) {
            super.reportESosRecommenderDecision(isDialerNotified);
            mIsDialerNotified = isDialerNotified;
        }

        public boolean isTimerStarted() {
        public boolean isTimerStarted() {
            return hasMessages(EVENT_TIME_OUT);
            return hasMessages(EVENT_TIME_OUT);
        }
        }
@@ -939,6 +1002,10 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        public long getTimeOutMillis() {
        public long getTimeOutMillis() {
            return mTimeoutMillis;
            return mTimeoutMillis;
        }
        }

        public boolean isDialerNotified() {
            return mIsDialerNotified;
        }
    }
    }


    private static class TestConnection extends Connection {
    private static class TestConnection extends Connection {