Loading src/java/com/android/internal/telephony/TelephonyCountryDetector.java +35 −22 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading Loading @@ -111,6 +110,7 @@ public class TelephonyCountryDetector extends Handler { @GuardedBy("mLock") private boolean mIsCountryCodesOverridden = false; private final RegistrantList mCountryCodeChangedRegistrants = new RegistrantList(); private boolean mIsWifiNetworkConnected = false; private FeatureFlags mFeatureFlags = null; Loading Loading @@ -298,7 +298,7 @@ public class TelephonyCountryDetector extends Handler { handleNetworkCountryCodeChangedEvent((NetworkCountryCodeInfo) msg.obj); break; case EVENT_WIFI_CONNECTIVITY_STATE_CHANGED: handleEventWifiConnectivityStateChanged(); handleEventWifiConnectivityStateChanged((boolean) msg.obj); break; case EVENT_LOCATION_UPDATE_REQUEST_QUOTA_RESET: evaluateRequestingLocationUpdates(); Loading Loading @@ -490,11 +490,21 @@ public class TelephonyCountryDetector extends Handler { } } private void handleEventWifiConnectivityStateChanged() { mWifiConnectivityStateChangedRegistrantList.notifyResult(isWifiNetworkConnected()); private void handleEventWifiConnectivityStateChanged(boolean connected) { logd("handleEventWifiConnectivityStateChanged: " + connected); evaluateNotifyWifiConnectivityStateChangedEvent(connected); evaluateRequestingLocationUpdates(); } private void evaluateNotifyWifiConnectivityStateChangedEvent(boolean connected) { if (connected != mIsWifiNetworkConnected) { mIsWifiNetworkConnected = connected; mWifiConnectivityStateChangedRegistrantList.notifyResult(mIsWifiNetworkConnected); logd("evaluateNotifyWifiConnectivityStateChangedEvent: wifi connectivity state has " + "changed to " + connected); } } private void setLocationCountryCode(@NonNull Pair<String, Long> countryCodeInfo) { logd("Set location country code to: " + countryCodeInfo.first); if (!isValid(countryCodeInfo.first)) { Loading Loading @@ -526,25 +536,23 @@ public class TelephonyCountryDetector extends Handler { private void registerForWifiConnectivityStateChanged() { logd("registerForWifiConnectivityStateChanged"); NetworkRequest.Builder builder = new NetworkRequest.Builder(); builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { logd("Wifi network available: " + network); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { logd("onCapabilitiesChanged: " + networkCapabilities); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, isInternetAvailable(networkCapabilities)); } @Override public void onLost(Network network) { logd("Wifi network lost: " + network); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); } @Override public void onUnavailable() { logd("Wifi network unavailable"); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, false); } }; mConnectivityManager.registerNetworkCallback(builder.build(), networkCallback); Loading @@ -560,15 +568,20 @@ public class TelephonyCountryDetector extends Handler { /** * Check whether Wi-Fi network is connected or not. * @return {@code true} is Wi-Fi is connected, {@code false} otherwise. * @return {@code true} is Wi-Fi is connected, and internet is available, {@code false} * otherwise. */ public boolean isWifiNetworkConnected() { Network activeNetwork = mConnectivityManager.getActiveNetwork(); NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(activeNetwork); return networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); logd("isWifiNetworkConnected: " + mIsWifiNetworkConnected); return mIsWifiNetworkConnected; } private boolean isInternetAvailable(NetworkCapabilities networkCapabilities) { boolean isWifiConnected = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); logd("isWifiConnected: " + isWifiConnected); return isWifiConnected; } /** Loading tests/telephonytests/src/com/android/internal/telephony/TelephonyCountryDetectorTest.java +71 −13 Original line number Diff line number Diff line Loading @@ -112,26 +112,27 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { when(mSST2.getLocaleTracker()).thenReturn(mMockLocaleTracker2); when(mMockLocaleTracker2.getCurrentCountry()).thenReturn(""); when(mConnectivityManager.getActiveNetwork()).thenReturn(mMockNetwork); mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); when(mConnectivityManager.getNetworkCapabilities(any(Network.class))) .thenReturn(mNetworkCapabilities); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); when(mLocationManager.getProviders(true)).thenReturn(Arrays.asList("TEST_PROVIDER")); when(mMockFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true); mCountryDetectorUT = new TestTelephonyCountryDetector( mLooper, mContext, mLocationManager, mConnectivityManager, mMockFeatureFlags); verify(mConnectivityManager).registerNetworkCallback( any(NetworkRequest.class), mNetworkCallbackCaptor.capture()); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); if (isGeoCoderImplemented()) { verify(mLocationManager).requestLocationUpdates(anyString(), anyLong(), anyFloat(), mLocationListenerCaptor.capture()); verify(mLocationManager).getProviders(true); verify(mLocationManager).getLastKnownLocation(anyString()); } verify(mConnectivityManager).registerNetworkCallback( any(NetworkRequest.class), mNetworkCallbackCaptor.capture()); } @After Loading Loading @@ -285,7 +286,7 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { // Wi-fi is not available clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); verify(mLocationManager, never()).removeUpdates(any(LocationListener.class)); Loading @@ -294,6 +295,9 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); // Location updates were already requested verify(mLocationManager, never()).requestLocationUpdates(anyString(), anyLong(), anyFloat(), Loading @@ -301,7 +305,10 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { // Make Wi-fi not available and reset the quota clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.moveTimeForward( TestTelephonyCountryDetector.getLocationUpdateRequestQuotaResetTimeoutMillis()); mTestableLooper.processAllMessages(); Loading @@ -311,6 +318,9 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); verify(mLocationManager).requestLocationUpdates(anyString(), anyLong(), anyFloat(), any(LocationListener.class)); Loading @@ -324,16 +334,20 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { verify(mLocationManager, never()).requestLocationUpdates(anyString(), anyLong(), anyFloat(), any(LocationListener.class)); // Wi-fi becomes not available // Wi-fi lost clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCallbackCaptor.getValue().onUnavailable(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); verify(mLocationManager).removeUpdates(any(LocationListener.class)); } @Test public void testRegisterUnregisterForWifiConnectivityStateChanged() { // Set Wi-Fi unavailable. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); WifiConnectivityStateChangedListener listener = new WifiConnectivityStateChangedListener( mLooper); Loading @@ -344,19 +358,63 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertTrue(listener.getIsWifiConnected()); // Wi-fi becomes not available // Wi-fi lost clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCallbackCaptor.getValue().onUnavailable(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(listener.getIsWifiConnected()); mCountryDetectorUT.unregisterForWifiConnectivityStateChanged(listener); } @Test public void testReflectWifiConnectedStatusChanged() { // 1. Wi-Fi is turned off, network capability is not available. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, false); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 2. Wi-Fi is turned on, but network capability has not been updated. mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 3. Network capability has been updated, not some of them still false. mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 4. Network capability has been updated to validated. mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertTrue(mCountryDetectorUT.isWifiNetworkConnected()); // 5. Wi-Fi is turned off. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); } private static boolean isGeoCoderImplemented() { return Geocoder.isPresent(); } Loading Loading
src/java/com/android/internal/telephony/TelephonyCountryDetector.java +35 −22 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading Loading @@ -111,6 +110,7 @@ public class TelephonyCountryDetector extends Handler { @GuardedBy("mLock") private boolean mIsCountryCodesOverridden = false; private final RegistrantList mCountryCodeChangedRegistrants = new RegistrantList(); private boolean mIsWifiNetworkConnected = false; private FeatureFlags mFeatureFlags = null; Loading Loading @@ -298,7 +298,7 @@ public class TelephonyCountryDetector extends Handler { handleNetworkCountryCodeChangedEvent((NetworkCountryCodeInfo) msg.obj); break; case EVENT_WIFI_CONNECTIVITY_STATE_CHANGED: handleEventWifiConnectivityStateChanged(); handleEventWifiConnectivityStateChanged((boolean) msg.obj); break; case EVENT_LOCATION_UPDATE_REQUEST_QUOTA_RESET: evaluateRequestingLocationUpdates(); Loading Loading @@ -490,11 +490,21 @@ public class TelephonyCountryDetector extends Handler { } } private void handleEventWifiConnectivityStateChanged() { mWifiConnectivityStateChangedRegistrantList.notifyResult(isWifiNetworkConnected()); private void handleEventWifiConnectivityStateChanged(boolean connected) { logd("handleEventWifiConnectivityStateChanged: " + connected); evaluateNotifyWifiConnectivityStateChangedEvent(connected); evaluateRequestingLocationUpdates(); } private void evaluateNotifyWifiConnectivityStateChangedEvent(boolean connected) { if (connected != mIsWifiNetworkConnected) { mIsWifiNetworkConnected = connected; mWifiConnectivityStateChangedRegistrantList.notifyResult(mIsWifiNetworkConnected); logd("evaluateNotifyWifiConnectivityStateChangedEvent: wifi connectivity state has " + "changed to " + connected); } } private void setLocationCountryCode(@NonNull Pair<String, Long> countryCodeInfo) { logd("Set location country code to: " + countryCodeInfo.first); if (!isValid(countryCodeInfo.first)) { Loading Loading @@ -526,25 +536,23 @@ public class TelephonyCountryDetector extends Handler { private void registerForWifiConnectivityStateChanged() { logd("registerForWifiConnectivityStateChanged"); NetworkRequest.Builder builder = new NetworkRequest.Builder(); builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { logd("Wifi network available: " + network); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { logd("onCapabilitiesChanged: " + networkCapabilities); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, isInternetAvailable(networkCapabilities)); } @Override public void onLost(Network network) { logd("Wifi network lost: " + network); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); } @Override public void onUnavailable() { logd("Wifi network unavailable"); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, null); sendRequestAsync(EVENT_WIFI_CONNECTIVITY_STATE_CHANGED, false); } }; mConnectivityManager.registerNetworkCallback(builder.build(), networkCallback); Loading @@ -560,15 +568,20 @@ public class TelephonyCountryDetector extends Handler { /** * Check whether Wi-Fi network is connected or not. * @return {@code true} is Wi-Fi is connected, {@code false} otherwise. * @return {@code true} is Wi-Fi is connected, and internet is available, {@code false} * otherwise. */ public boolean isWifiNetworkConnected() { Network activeNetwork = mConnectivityManager.getActiveNetwork(); NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(activeNetwork); return networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); logd("isWifiNetworkConnected: " + mIsWifiNetworkConnected); return mIsWifiNetworkConnected; } private boolean isInternetAvailable(NetworkCapabilities networkCapabilities) { boolean isWifiConnected = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); logd("isWifiConnected: " + isWifiConnected); return isWifiConnected; } /** Loading
tests/telephonytests/src/com/android/internal/telephony/TelephonyCountryDetectorTest.java +71 −13 Original line number Diff line number Diff line Loading @@ -112,26 +112,27 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { when(mSST2.getLocaleTracker()).thenReturn(mMockLocaleTracker2); when(mMockLocaleTracker2.getCurrentCountry()).thenReturn(""); when(mConnectivityManager.getActiveNetwork()).thenReturn(mMockNetwork); mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); when(mConnectivityManager.getNetworkCapabilities(any(Network.class))) .thenReturn(mNetworkCapabilities); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); when(mLocationManager.getProviders(true)).thenReturn(Arrays.asList("TEST_PROVIDER")); when(mMockFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true); mCountryDetectorUT = new TestTelephonyCountryDetector( mLooper, mContext, mLocationManager, mConnectivityManager, mMockFeatureFlags); verify(mConnectivityManager).registerNetworkCallback( any(NetworkRequest.class), mNetworkCallbackCaptor.capture()); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); if (isGeoCoderImplemented()) { verify(mLocationManager).requestLocationUpdates(anyString(), anyLong(), anyFloat(), mLocationListenerCaptor.capture()); verify(mLocationManager).getProviders(true); verify(mLocationManager).getLastKnownLocation(anyString()); } verify(mConnectivityManager).registerNetworkCallback( any(NetworkRequest.class), mNetworkCallbackCaptor.capture()); } @After Loading Loading @@ -285,7 +286,7 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { // Wi-fi is not available clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); verify(mLocationManager, never()).removeUpdates(any(LocationListener.class)); Loading @@ -294,6 +295,9 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); // Location updates were already requested verify(mLocationManager, never()).requestLocationUpdates(anyString(), anyLong(), anyFloat(), Loading @@ -301,7 +305,10 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { // Make Wi-fi not available and reset the quota clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.moveTimeForward( TestTelephonyCountryDetector.getLocationUpdateRequestQuotaResetTimeoutMillis()); mTestableLooper.processAllMessages(); Loading @@ -311,6 +318,9 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); verify(mLocationManager).requestLocationUpdates(anyString(), anyLong(), anyFloat(), any(LocationListener.class)); Loading @@ -324,16 +334,20 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { verify(mLocationManager, never()).requestLocationUpdates(anyString(), anyLong(), anyFloat(), any(LocationListener.class)); // Wi-fi becomes not available // Wi-fi lost clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCallbackCaptor.getValue().onUnavailable(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); verify(mLocationManager).removeUpdates(any(LocationListener.class)); } @Test public void testRegisterUnregisterForWifiConnectivityStateChanged() { // Set Wi-Fi unavailable. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); WifiConnectivityStateChangedListener listener = new WifiConnectivityStateChangedListener( mLooper); Loading @@ -344,19 +358,63 @@ public class TelephonyCountryDetectorTest extends TelephonyTest { clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertTrue(listener.getIsWifiConnected()); // Wi-fi becomes not available // Wi-fi lost clearInvocations(mLocationManager); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, false); mNetworkCallbackCaptor.getValue().onUnavailable(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(listener.getIsWifiConnected()); mCountryDetectorUT.unregisterForWifiConnectivityStateChanged(listener); } @Test public void testReflectWifiConnectedStatusChanged() { // 1. Wi-Fi is turned off, network capability is not available. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, false); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 2. Wi-Fi is turned on, but network capability has not been updated. mNetworkCallbackCaptor.getValue().onAvailable(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 3. Network capability has been updated, not some of them still false. mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, false); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); // 4. Network capability has been updated to validated. mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities.setTransportType(NetworkCapabilities.TRANSPORT_WIFI, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET, true); mNetworkCapabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED, true); mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, mNetworkCapabilities); mTestableLooper.processAllMessages(); assertTrue(mCountryDetectorUT.isWifiNetworkConnected()); // 5. Wi-Fi is turned off. mNetworkCallbackCaptor.getValue().onLost(mMockNetwork); mTestableLooper.processAllMessages(); assertFalse(mCountryDetectorUT.isWifiNetworkConnected()); } private static boolean isGeoCoderImplemented() { return Geocoder.isPresent(); } Loading