[Settings] Should show carrier network if airplane mode is on
https://hsv.googleplex.com/6007361661566976 Test: atest SubscriptionsPreferenceControllerTest Bug: 206990845 Change-Id: Id39b662f33b201a8e4ce53c34c3007eca9a40edf
This commit is contained in:
@@ -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() {
|
||||
@@ -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);
|
||||
@@ -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) {
|
||||
@@ -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)
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
@@ -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
|
||||
@@ -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.
|
||||
*/
|
||||
|
@@ -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;
|
||||
@@ -102,6 +103,8 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
private LifecycleOwner mLifecycleOwner;
|
||||
@Mock
|
||||
private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
|
||||
@Mock
|
||||
private WifiManager mWifiManager;
|
||||
|
||||
private LifecycleRegistry mLifecycleRegistry;
|
||||
private int mOnChildUpdatedCount;
|
||||
@@ -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);
|
||||
@@ -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() {
|
||||
|
Reference in New Issue
Block a user