From a6b249d625bcc4bace97a886c0681e559e7e3e05 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Wed, 21 Oct 2020 02:25:26 +0800 Subject: [PATCH] [Settings] Only display 1 SIM UI when multiple with same group UUID Some carrier(s) expand their service through providing eSIM in companion with pSIM. Group UUID is designed to group them together as an single SIM. Bug: 165363542 Test: make RunSettingsRoboTests ROBOTEST_FILTER=SubscriptionsPreferenceControllerTest Change-Id: I0934a45a2917ab106627c733162efbee9a13f216 --- .../SubscriptionsPreferenceController.java | 25 +++++++++++++++++- ...SubscriptionsPreferenceControllerTest.java | 26 ++++++++++++------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java index e9cdb46e6fd..82df4aa25c8 100644 --- a/src/com/android/settings/network/SubscriptionsPreferenceController.java +++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java @@ -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 (!isSubscriptionCanBeDisplayed(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 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 -> + isSubscriptionCanBeDisplayed(mContext, subInfo.getSubscriptionId())) + .count() >= 2; } @Override @@ -330,4 +347,10 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl public void onSignalStrengthChanged() { update(); } + + @VisibleForTesting + boolean isSubscriptionCanBeDisplayed(Context context, int subId) { + return (SubscriptionUtil.getAvailableSubscription(context, + ProxySubscriptionManager.getInstance(context), subId) != null); + } } diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java index 6fd94c3a199..ea2212c31f6 100644 --- a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java @@ -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).isSubscriptionCanBeDisplayed(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).isSubscriptionCanBeDisplayed(any(), eq(3)); + final List 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() {