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

Commit d5e1b261 authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge "Added a broadcast intent for clients to listen for country changes"

parents 3f1d36a1 9961b7b6
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import android.telephony.CellInfoLte;
import android.telephony.CellInfoWcdma;
import android.telephony.CellInfoWcdma;
import android.telephony.Rlog;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.LocalLog;
@@ -434,6 +435,12 @@ public class LocaleTracker extends Handler {
            // broadcast on forbidden channels.
            // broadcast on forbidden channels.
            ((WifiManager) mPhone.getContext().getSystemService(Context.WIFI_SERVICE))
            ((WifiManager) mPhone.getContext().getSystemService(Context.WIFI_SERVICE))
                    .setCountryCode(countryIso);
                    .setCountryCode(countryIso);

            Intent intent = new Intent(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED);
            intent.putExtra(TelephonyManager.EXTRA_NETWORK_COUNTRY, countryIso);
            SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId());
            mPhone.getContext().sendBroadcast(intent);

            countryChanged = true;
            countryChanged = true;
        }
        }


+30 −6
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;


import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager;
import android.os.AsyncResult;
import android.os.AsyncResult;
import android.os.HandlerThread;
import android.os.HandlerThread;
@@ -34,13 +35,16 @@ import android.telephony.CellIdentityGsm;
import android.telephony.CellInfo;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoGsm;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Test;
import org.junit.Test;
import org.mockito.ArgumentCaptor;


import java.util.Arrays;
import java.util.Arrays;
import java.util.List;


public class LocaleTrackerTest extends TelephonyTest {
public class LocaleTrackerTest extends TelephonyTest {


@@ -122,12 +126,31 @@ public class LocaleTrackerTest extends TelephonyTest {
        waitForHandlerAction(mLocaleTracker, 100);
        waitForHandlerAction(mLocaleTracker, 100);
    }
    }


    private void verifyCountryCodeNotified(String[] countryCodes) {
        ArgumentCaptor<String> stringArgumentCaptor = ArgumentCaptor.forClass(String.class);
        verify(mWifiManager, times(countryCodes.length)).setCountryCode(
                stringArgumentCaptor.capture());
        List<String> strs = stringArgumentCaptor.getAllValues();

        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mContext, times(countryCodes.length)).sendBroadcast(intentArgumentCaptor.capture());
        List<Intent> intents = intentArgumentCaptor.getAllValues();

        for (int i = 0; i < countryCodes.length; i++) {
            assertEquals(countryCodes[i], strs.get(i));
            assertEquals(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED,
                    intents.get(i).getAction());
            assertEquals(countryCodes[i], intents.get(i).getStringExtra(
                    TelephonyManager.EXTRA_NETWORK_COUNTRY));
        }
    }

    @Test
    @Test
    @SmallTest
    @SmallTest
    public void testUpdateOperatorNumericSync() throws Exception {
    public void testUpdateOperatorNumericSync() throws Exception {
        mLocaleTracker.updateOperatorNumeric(US_MCC + FAKE_MNC);
        mLocaleTracker.updateOperatorNumeric(US_MCC + FAKE_MNC);
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager).setCountryCode(US_COUNTRY_CODE);
        verifyCountryCodeNotified(new String[]{US_COUNTRY_CODE});
    }
    }


    @Test
    @Test
@@ -137,7 +160,7 @@ public class LocaleTrackerTest extends TelephonyTest {
        sendGsmCellInfo();
        sendGsmCellInfo();
        sendServiceState(ServiceState.STATE_EMERGENCY_ONLY);
        sendServiceState(ServiceState.STATE_EMERGENCY_ONLY);
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager).setCountryCode(US_COUNTRY_CODE);
        verifyCountryCodeNotified(new String[]{COUNTRY_CODE_UNAVAILABLE, US_COUNTRY_CODE});
        assertTrue(mLocaleTracker.isTracking());
        assertTrue(mLocaleTracker.isTracking());
    }
    }


@@ -147,7 +170,7 @@ public class LocaleTrackerTest extends TelephonyTest {
        mLocaleTracker.updateOperatorNumeric("");
        mLocaleTracker.updateOperatorNumeric("");
        sendServiceState(ServiceState.STATE_POWER_OFF);
        sendServiceState(ServiceState.STATE_POWER_OFF);
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager).setCountryCode(COUNTRY_CODE_UNAVAILABLE);
        verifyCountryCodeNotified(new String[]{COUNTRY_CODE_UNAVAILABLE});
        assertFalse(mLocaleTracker.isTracking());
        assertFalse(mLocaleTracker.isTracking());
    }
    }


@@ -157,13 +180,14 @@ public class LocaleTrackerTest extends TelephonyTest {
        sendServiceState(ServiceState.STATE_IN_SERVICE);
        sendServiceState(ServiceState.STATE_IN_SERVICE);
        mLocaleTracker.updateOperatorNumeric(US_MCC + FAKE_MNC);
        mLocaleTracker.updateOperatorNumeric(US_MCC + FAKE_MNC);
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        assertEquals(US_COUNTRY_CODE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager).setCountryCode(US_COUNTRY_CODE);
        verifyCountryCodeNotified(new String[]{COUNTRY_CODE_UNAVAILABLE, US_COUNTRY_CODE});
        assertFalse(mLocaleTracker.isTracking());
        assertFalse(mLocaleTracker.isTracking());


        mLocaleTracker.updateOperatorNumeric("");
        mLocaleTracker.updateOperatorNumeric("");
        waitForHandlerAction(mLocaleTracker, 100);
        waitForHandlerAction(mLocaleTracker, 100);
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager, times(2)).setCountryCode(COUNTRY_CODE_UNAVAILABLE);
        verifyCountryCodeNotified(new String[]{COUNTRY_CODE_UNAVAILABLE, US_COUNTRY_CODE,
                COUNTRY_CODE_UNAVAILABLE});
        sendServiceState(ServiceState.STATE_POWER_OFF);
        sendServiceState(ServiceState.STATE_POWER_OFF);
        assertFalse(mLocaleTracker.isTracking());
        assertFalse(mLocaleTracker.isTracking());
    }
    }
@@ -175,7 +199,7 @@ public class LocaleTrackerTest extends TelephonyTest {
        mLocaleTracker.updateOperatorNumeric("");
        mLocaleTracker.updateOperatorNumeric("");
        waitForHandlerAction(mLocaleTracker, 100);
        waitForHandlerAction(mLocaleTracker, 100);
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        assertEquals(COUNTRY_CODE_UNAVAILABLE, mLocaleTracker.getCurrentCountry());
        verify(mWifiManager).setCountryCode(COUNTRY_CODE_UNAVAILABLE);
        verifyCountryCodeNotified(new String[]{COUNTRY_CODE_UNAVAILABLE});
        assertFalse(mLocaleTracker.isTracking());
        assertFalse(mLocaleTracker.isTracking());


        sendServiceState(ServiceState.STATE_OUT_OF_SERVICE);
        sendServiceState(ServiceState.STATE_OUT_OF_SERVICE);