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

Commit 0968b860 authored by Bonian Chen's avatar Bonian Chen Committed by Android (Google) Code Review
Browse files

Merge changes from topic "eSIM with same group UUID" into rvc-qpr-dev

* changes:
  [Settings] code refactor - rename isSubscriptionCanBeDisplayed
  [Settings] Only display 1 SIM UI when multiple with same group UUID
parents bd246b61 c2232020
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.net.SignalStrengthUtil;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

@@ -166,6 +167,12 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
        final int dataDefaultSubId = SubscriptionManager.getDefaultDataSubscriptionId();
        for (SubscriptionInfo info : SubscriptionUtil.getActiveSubscriptions(mManager)) {
            final int subId = info.getSubscriptionId();
            // Avoid from showing subscription(SIM)s which has been marked as hidden
            // For example, only one subscription will be shown when there're multiple
            // subscriptions with same group UUID.
            if (!canSubscriptionBeDisplayed(mContext, subId)) {
                continue;
            }
            activeSubIds.add(subId);
            Preference pref = existingPrefs.remove(subId);
            if (pref == null) {
@@ -292,7 +299,17 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
        if (mSubscriptionsListener.isAirplaneModeOn()) {
            return false;
        }
        return SubscriptionUtil.getActiveSubscriptions(mManager).size() >= 2;
        List<SubscriptionInfo> subInfoList = SubscriptionUtil.getActiveSubscriptions(mManager);
        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
                // subscriptions with same group UUID.
                .filter(subInfo ->
                        canSubscriptionBeDisplayed(mContext, subInfo.getSubscriptionId()))
                .count() >= 2;
    }

    @Override
@@ -330,4 +347,10 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
    public void onSignalStrengthChanged() {
        update();
    }

    @VisibleForTesting
    boolean canSubscriptionBeDisplayed(Context context, int subId) {
        return (SubscriptionUtil.getAvailableSubscription(context,
                ProxySubscriptionManager.getInstance(context), subId) != null);
    }
}
+17 −9
Original line number Diff line number Diff line
@@ -37,11 +37,9 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
@@ -51,9 +49,13 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;

import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.graph.SignalDrawable;

import org.junit.After;
import org.junit.Before;
@@ -62,7 +64,6 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -72,11 +73,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowSubscriptionManager.class)
public class SubscriptionsPreferenceControllerTest {
@@ -126,6 +122,7 @@ public class SubscriptionsPreferenceControllerTest {
        mController = spy(
                new SubscriptionsPreferenceController(mContext, mLifecycle, mUpdateListener,
                        KEY, 5));
        doReturn(true).when(mController).canSubscriptionBeDisplayed(any(), anyInt());
        doReturn(mSignalStrengthIcon).when(mController).getIcon(anyInt(), anyInt(), anyBoolean());
    }

@@ -459,6 +456,17 @@ public class SubscriptionsPreferenceControllerTest {
                eq(true));
    }

    @Test
    public void displayPreference_subscriptionsWithSameGroupUUID_onlyOneWillBeSeen() {
        doReturn(false).when(mController).canSubscriptionBeDisplayed(any(), eq(3));
        final List<SubscriptionInfo> subs = setupMockSubscriptions(3);
        SubscriptionUtil.setActiveSubscriptionsForTesting(subs.subList(0, 3));

        mController.onResume();
        mController.displayPreference(mScreen);

        verify(mPreferenceCategory, times(2)).addPreference(any(Preference.class));
    }

    @Test
    public void onMobileDataEnabledChange_mobileDataTurnedOff_bothSubsHaveCutOut() {