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

Commit 0acfea8d authored by Chinmay Dhodapkar's avatar Chinmay Dhodapkar
Browse files

update fallback logic to use cached country

Existing code only falls back to cached location when service state
is POWER_OFF. There can be race conditions when LocaleTracker updates
country iso to NULL, but service state tracker still has not updated
its state to POWER_OFF.

This change is to always fallback to cached locale if current locale is
not available.

Bug: 282712991
Test: atest and b2b calls
Change-Id: I5168a1e118768bb315601591ee31a5e799ff240d
parent b9266470
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -684,7 +684,7 @@ public class EmergencyNumberTracker extends Handler {
                + countryIso);
        updateEmergencyCountryIso(countryIso.toLowerCase(Locale.ROOT));
        // Use cached country iso in APM to load emergency number database.
        if (TextUtils.isEmpty(countryIso) && isAirplaneModeEnabled()) {
        if (TextUtils.isEmpty(countryIso)) {
            countryIso = getCountryIsoForCachingDatabase();
            logd("updateEmergencyNumberListDatabaseAndNotify(): using cached APM country "
                    + countryIso);
+30 −1
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
@@ -50,6 +51,7 @@ import androidx.test.InstrumentationRegistry;

import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyTest;

import com.google.i18n.phonenumbers.ShortNumberInfo;
@@ -368,8 +370,31 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
        IntentFilter ifilter = intentCaptor.getValue();
        assertTrue(ifilter.hasAction(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED));
    }

    @Test
    public void testUpdateEmergencyCountryIso_whenStatePowerOff() throws Exception {
        testUpdateEmergencyCountryIso(ServiceState.STATE_POWER_OFF);
    }

    @Test
    public void testUpdateEmergencyCountryIso_whenStateInService() throws Exception {
        testUpdateEmergencyCountryIso(ServiceState.STATE_IN_SERVICE);
    }

    @Test
    public void testUpdateEmergencyCountryIso() throws Exception {
    public void testUpdateEmergencyCountryIso_whenStateOos() throws Exception {
        testUpdateEmergencyCountryIso(ServiceState.STATE_OUT_OF_SERVICE);
    }

    @Test
    public void testUpdateEmergencyCountryIso_whenStateEmergencyOnly() throws Exception {
        testUpdateEmergencyCountryIso(ServiceState.STATE_EMERGENCY_ONLY);
    }

    private void testUpdateEmergencyCountryIso(int ss) throws Exception {
        doReturn(mLocaleTracker).when(mSST).getLocaleTracker();
        doReturn("us").when(mLocaleTracker).getLastKnownCountryIso();

        sendEmergencyNumberPrefix(mEmergencyNumberTrackerMock);

        mEmergencyNumberTrackerMock.updateEmergencyNumberDatabaseCountryChange("us");
@@ -377,10 +402,14 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
        assertTrue(mEmergencyNumberTrackerMock.getEmergencyCountryIso().equals("us"));
        assertTrue(mEmergencyNumberTrackerMock.getLastKnownEmergencyCountryIso().equals("us"));

        doReturn(ss).when(mServiceState).getState();
        mEmergencyNumberTrackerMock.updateEmergencyNumberDatabaseCountryChange("");
        processAllMessages();
        assertTrue(mEmergencyNumberTrackerMock.getEmergencyCountryIso().equals(""));
        assertTrue(mEmergencyNumberTrackerMock.getLastKnownEmergencyCountryIso().equals("us"));

        //make sure we look up cached location whenever current iso is null
        verify(mLocaleTracker).getLastKnownCountryIso();
    }

    @Test