Loading src/com/android/settings/network/SubscriptionsPreferenceController.java +26 −18 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl private SignalStrengthListener mSignalStrengthListener; private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener; private WifiPickerTrackerHelper mWifiPickerTrackerHelper; private final WifiManager mWifiManager; @VisibleForTesting final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() { Loading Loading @@ -150,6 +151,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl mStartOrder = startOrder; mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mWifiManager = context.getSystemService(WifiManager.class); mSubscriptionPreferences = new ArrayMap<>(); mSubscriptionsListener = new SubscriptionsChangeListener(context, this); mDataEnabledListener = new MobileDataEnabledListener(context, this); Loading Loading @@ -271,9 +273,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final boolean isDataInService = (regInfo == null) ? false : regInfo.isRegistered(); final boolean isCarrierNetworkActive = (mWifiPickerTrackerHelper != null) && mWifiPickerTrackerHelper.isCarrierNetworkActive(); final boolean isCarrierNetworkActive = isCarrierNetworkActive(); String result = mSubsPrefCtrlInjector.getNetworkType( mContext, mConfig, mTelephonyDisplayInfo, subId, isCarrierNetworkActive); if (mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext) || isCarrierNetworkActive) { Loading @@ -291,20 +291,15 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final SignalStrength strength = tmForSubId.getSignalStrength(); int level = (strength == null) ? 0 : strength.getLevel(); int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; if (shouldInflateSignalStrength(subId)) { level += 1; boolean isCarrierNetworkActive = isCarrierNetworkActive(); if (shouldInflateSignalStrength(subId) || isCarrierNetworkActive) { level = isCarrierNetworkActive ? SignalStrength.NUM_SIGNAL_STRENGTH_BINS : (level + 1); numLevels += 1; } Drawable icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels, !mTelephonyManager.isDataEnabled()); final boolean isActiveCellularNetwork = mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext); if (isActiveCellularNetwork || (mWifiPickerTrackerHelper != null) && mWifiPickerTrackerHelper.isCarrierNetworkActive()) { icon.setTint(Utils.getColorAccentDefaultColor(mContext)); return icon; } Drawable icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet); final ServiceState serviceState = tmForSubId.getServiceState(); final NetworkRegistrationInfo regInfo = (serviceState == null) Loading @@ -319,11 +314,17 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final boolean isVoiceInService = (serviceState == null) ? false : (serviceState.getState() == ServiceState.STATE_IN_SERVICE); if (isDataInService || isVoiceInService) { return icon; if (isDataInService || isVoiceInService || isCarrierNetworkActive) { icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels, !mTelephonyManager.isDataEnabled()); } final boolean isActiveCellularNetwork = mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext); if (isActiveCellularNetwork || isCarrierNetworkActive) { icon.setTint(Utils.getColorAccentDefaultColor(mContext)); } icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet); return icon; } Loading Loading @@ -417,7 +418,8 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl */ @Override public boolean isAvailable() { if (mSubscriptionsListener.isAirplaneModeOn()) { if (mSubscriptionsListener.isAirplaneModeOn() && (!mWifiManager.isWifiEnabled() || !isCarrierNetworkActive())) { return false; } List<SubscriptionInfo> subInfoList = Loading @@ -425,6 +427,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl if (subInfoList == null) { return false; } return subInfoList.stream() // Avoid from showing subscription(SIM)s which has been marked as hidden // For example, only one subscription will be shown when there're multiple Loading Loading @@ -495,6 +498,11 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl return new SubsPrefCtrlInjector(); } boolean isCarrierNetworkActive() { return mWifiPickerTrackerHelper != null && mWifiPickerTrackerHelper.isCarrierNetworkActive(); } /** * To inject necessary data from each static api. */ Loading tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.wifi.WifiManager; import android.os.Looper; import android.os.UserManager; import android.provider.Settings; Loading Loading @@ -102,6 +103,8 @@ public class SubscriptionsPreferenceControllerTest { private LifecycleOwner mLifecycleOwner; @Mock private WifiPickerTrackerHelper mWifiPickerTrackerHelper; @Mock private WifiManager mWifiManager; private LifecycleRegistry mLifecycleRegistry; private int mOnChildUpdatedCount; Loading Loading @@ -132,6 +135,7 @@ public class SubscriptionsPreferenceControllerTest { when(mConnectivityManager.getNetworkCapabilities(mActiveNetwork)) .thenReturn(mNetworkCapabilities); when(mUserManager.isAdminUser()).thenReturn(true); when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry); mPreferenceManager = new PreferenceManager(mContext); Loading Loading @@ -171,16 +175,55 @@ public class SubscriptionsPreferenceControllerTest { } @Test public void isAvailable_airplaneModeOn_availableFalse() { public void isAvailable_airplaneModeOnWifiOff_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(false); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOnWifiOnWithNoCarrierNetwork_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(true); doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOnWifiOffWithCarrierNetwork_availableTrue() { setupMockSubscriptions(1); when(mWifiManager.isWifiEnabled()).thenReturn(false); doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOff_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(true); doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0); assertThat(mController.isAvailable()).isTrue(); } @Test @UiThreadTest public void displayPreference_providerAndHasSim_showPreference() { Loading Loading
src/com/android/settings/network/SubscriptionsPreferenceController.java +26 −18 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl private SignalStrengthListener mSignalStrengthListener; private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener; private WifiPickerTrackerHelper mWifiPickerTrackerHelper; private final WifiManager mWifiManager; @VisibleForTesting final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() { Loading Loading @@ -150,6 +151,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl mStartOrder = startOrder; mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mWifiManager = context.getSystemService(WifiManager.class); mSubscriptionPreferences = new ArrayMap<>(); mSubscriptionsListener = new SubscriptionsChangeListener(context, this); mDataEnabledListener = new MobileDataEnabledListener(context, this); Loading Loading @@ -271,9 +273,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final boolean isDataInService = (regInfo == null) ? false : regInfo.isRegistered(); final boolean isCarrierNetworkActive = (mWifiPickerTrackerHelper != null) && mWifiPickerTrackerHelper.isCarrierNetworkActive(); final boolean isCarrierNetworkActive = isCarrierNetworkActive(); String result = mSubsPrefCtrlInjector.getNetworkType( mContext, mConfig, mTelephonyDisplayInfo, subId, isCarrierNetworkActive); if (mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext) || isCarrierNetworkActive) { Loading @@ -291,20 +291,15 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final SignalStrength strength = tmForSubId.getSignalStrength(); int level = (strength == null) ? 0 : strength.getLevel(); int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; if (shouldInflateSignalStrength(subId)) { level += 1; boolean isCarrierNetworkActive = isCarrierNetworkActive(); if (shouldInflateSignalStrength(subId) || isCarrierNetworkActive) { level = isCarrierNetworkActive ? SignalStrength.NUM_SIGNAL_STRENGTH_BINS : (level + 1); numLevels += 1; } Drawable icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels, !mTelephonyManager.isDataEnabled()); final boolean isActiveCellularNetwork = mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext); if (isActiveCellularNetwork || (mWifiPickerTrackerHelper != null) && mWifiPickerTrackerHelper.isCarrierNetworkActive()) { icon.setTint(Utils.getColorAccentDefaultColor(mContext)); return icon; } Drawable icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet); final ServiceState serviceState = tmForSubId.getServiceState(); final NetworkRegistrationInfo regInfo = (serviceState == null) Loading @@ -319,11 +314,17 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl final boolean isVoiceInService = (serviceState == null) ? false : (serviceState.getState() == ServiceState.STATE_IN_SERVICE); if (isDataInService || isVoiceInService) { return icon; if (isDataInService || isVoiceInService || isCarrierNetworkActive) { icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels, !mTelephonyManager.isDataEnabled()); } final boolean isActiveCellularNetwork = mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext); if (isActiveCellularNetwork || isCarrierNetworkActive) { icon.setTint(Utils.getColorAccentDefaultColor(mContext)); } icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet); return icon; } Loading Loading @@ -417,7 +418,8 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl */ @Override public boolean isAvailable() { if (mSubscriptionsListener.isAirplaneModeOn()) { if (mSubscriptionsListener.isAirplaneModeOn() && (!mWifiManager.isWifiEnabled() || !isCarrierNetworkActive())) { return false; } List<SubscriptionInfo> subInfoList = Loading @@ -425,6 +427,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl if (subInfoList == null) { return false; } return subInfoList.stream() // Avoid from showing subscription(SIM)s which has been marked as hidden // For example, only one subscription will be shown when there're multiple Loading Loading @@ -495,6 +498,11 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl return new SubsPrefCtrlInjector(); } boolean isCarrierNetworkActive() { return mWifiPickerTrackerHelper != null && mWifiPickerTrackerHelper.isCarrierNetworkActive(); } /** * To inject necessary data from each static api. */ Loading
tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.wifi.WifiManager; import android.os.Looper; import android.os.UserManager; import android.provider.Settings; Loading Loading @@ -102,6 +103,8 @@ public class SubscriptionsPreferenceControllerTest { private LifecycleOwner mLifecycleOwner; @Mock private WifiPickerTrackerHelper mWifiPickerTrackerHelper; @Mock private WifiManager mWifiManager; private LifecycleRegistry mLifecycleRegistry; private int mOnChildUpdatedCount; Loading Loading @@ -132,6 +135,7 @@ public class SubscriptionsPreferenceControllerTest { when(mConnectivityManager.getNetworkCapabilities(mActiveNetwork)) .thenReturn(mNetworkCapabilities); when(mUserManager.isAdminUser()).thenReturn(true); when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry); mPreferenceManager = new PreferenceManager(mContext); Loading Loading @@ -171,16 +175,55 @@ public class SubscriptionsPreferenceControllerTest { } @Test public void isAvailable_airplaneModeOn_availableFalse() { public void isAvailable_airplaneModeOnWifiOff_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(false); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOnWifiOnWithNoCarrierNetwork_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(true); doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOnWifiOffWithCarrierNetwork_availableTrue() { setupMockSubscriptions(1); when(mWifiManager.isWifiEnabled()).thenReturn(false); doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_airplaneModeOff_availableFalse() { setupMockSubscriptions(2); assertThat(mController.isAvailable()).isTrue(); when(mWifiManager.isWifiEnabled()).thenReturn(true); doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0); assertThat(mController.isAvailable()).isTrue(); } @Test @UiThreadTest public void displayPreference_providerAndHasSim_showPreference() { Loading