From 67c75ac1027bbed49e6588a157d4fc4b0b7fe11b Mon Sep 17 00:00:00 2001 From: Jeremy Goldman Date: Tue, 19 Jan 2021 17:26:13 +0800 Subject: [PATCH] Helper function to return the unique name for subscription info Many classes within Settings have access to the subscription info, rather than only having access to the subscription id. For these classes, it is more convenient to have a helper method where the whole subscription info can be passed in, rather than having to call the getSubscriptionId() helper method in so many locations within the telephony settings codebase. Bug: 150370656 Bug: 148303118 Test: atest -c SubscriptionUtilTest Change-Id: I181960933ab8610d5572b7a7d6671fab8c1dbd22 --- .../settings/network/SubscriptionUtil.java | 17 ++++++++++++++++ .../network/SubscriptionUtilTest.java | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 054e3d9b4d0..ff5de3e4d40 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -324,6 +324,23 @@ public class SubscriptionUtil { return displayNames.getOrDefault(subscriptionId, ""); } + /** + * Return the display name for a subscription, which is guaranteed to be unique. + * The logic to create this name has the following order of operations: + * 1) If the original display name is not unique, the last four digits of the phone number + * will be appended. + * 2) If the phone number is not visible or the last four digits are shared with another + * subscription, the subscription id will be appended to the original display name. + * More details can be found at go/unique-sub-display-names. + * + * @return map of active subscription ids to diaplay names. + */ + @VisibleForTesting + public static CharSequence getUniqueSubscriptionDisplayName( + SubscriptionInfo info, Context context) { + return getUniqueSubscriptionDisplayName(info.getSubscriptionId(), context); + } + public static String getDisplayName(SubscriptionInfo info) { final CharSequence name = info.getDisplayName(); if (name != null) { diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java index 85ac011aef3..b36675aa397 100644 --- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java +++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java @@ -360,6 +360,26 @@ public class SubscriptionUtilTest { assertTrue(TextUtils.isEmpty(name)); } + @Test + public void getUniqueDisplayName_fullSubscriptionInfo_correctNameReturned() { + // Each subscription's default display name is unique. + final SubscriptionInfo info1 = mock(SubscriptionInfo.class); + when(info1.getSubscriptionId()).thenReturn(SUBID_1); + when(info1.getDisplayName()).thenReturn(CARRIER_1); + when(mSubMgr.getActiveSubscriptionInfoList()).thenReturn( + Arrays.asList(info1)); + + TelephonyManager sub1Telmgr = mock(TelephonyManager.class); + when(sub1Telmgr.getLine1Number()).thenReturn("1112223333"); + when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr); + + final CharSequence name = + SubscriptionUtil.getUniqueSubscriptionDisplayName(info1, mContext); + + assertThat(name).isNotNull(); + assertEquals(CARRIER_1, name); + } + @Test public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() { assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();