Merge "[Settings] Should show carrier network if airplane mode is on" into sc-v2-dev am: 1df187a439
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16332786
Change-Id: I1a63b9d82fd530af87c2c70ab21e24e599a967e2
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index b872680..9e1b6da 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -94,6 +94,7 @@
private SignalStrengthListener mSignalStrengthListener;
private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener;
private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+ private final WifiManager mWifiManager;
@VisibleForTesting
final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() {
@@ -150,6 +151,7 @@
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);
@@ -271,9 +273,7 @@
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) {
@@ -291,20 +291,15 @@
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)
@@ -319,11 +314,17 @@
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());
}
- icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet);
+ final boolean isActiveCellularNetwork =
+ mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext);
+ if (isActiveCellularNetwork || isCarrierNetworkActive) {
+ icon.setTint(Utils.getColorAccentDefaultColor(mContext));
+ }
+
return icon;
}
@@ -417,7 +418,8 @@
*/
@Override
public boolean isAvailable() {
- if (mSubscriptionsListener.isAirplaneModeOn()) {
+ if (mSubscriptionsListener.isAirplaneModeOn()
+ && (!mWifiManager.isWifiEnabled() || !isCarrierNetworkActive())) {
return false;
}
List<SubscriptionInfo> subInfoList =
@@ -425,6 +427,7 @@
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
@@ -495,6 +498,11 @@
return new SubsPrefCtrlInjector();
}
+ boolean isCarrierNetworkActive() {
+ return mWifiPickerTrackerHelper != null
+ && mWifiPickerTrackerHelper.isCarrierNetworkActive();
+ }
+
/**
* To inject necessary data from each static api.
*/
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 8b03352..ac07fae 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -39,6 +39,7 @@
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;
@@ -102,6 +103,8 @@
private LifecycleOwner mLifecycleOwner;
@Mock
private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+ @Mock
+ private WifiManager mWifiManager;
private LifecycleRegistry mLifecycleRegistry;
private int mOnChildUpdatedCount;
@@ -132,6 +135,7 @@
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);
@@ -171,10 +175,11 @@
}
@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);
@@ -182,6 +187,44 @@
}
@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() {
final List<SubscriptionInfo> sub = setupMockSubscriptions(1);