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

Commit 3581f65d authored by Zoey Chen's avatar Zoey Chen Committed by Automerger Merge Worker
Browse files

Merge "[Settings] Should show carrier network if airplane mode is on" into...

Merge "[Settings] Should show carrier network if airplane mode is on" into sc-v2-dev am: 1df187a4 am: 4aef8765

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16332786

Change-Id: Ic4648dad4fd7950510fea2382fa990efe900baf8
parents 54b4689e 4aef8765
Loading
Loading
Loading
Loading
+26 −18
Original line number Diff line number Diff line
@@ -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.
     */
+44 −1
Original line number Diff line number Diff line
@@ -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() {