Merge "Remove the cached display name" into udc-qpr-dev am: 26a1866b8d

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

Change-Id: I0c006b215c02acda9a44e717165249fbbd8f353a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
SongFerng Wang
2023-09-19 12:22:25 +00:00
committed by Automerger Merge Worker
2 changed files with 133 additions and 21 deletions

View File

@@ -18,7 +18,6 @@ package com.android.settings.network;
import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
import static com.android.internal.util.CollectionUtils.emptyIfNull;
import android.annotation.Nullable;
@@ -56,6 +55,8 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -66,6 +67,9 @@ public class SubscriptionUtil {
static final String SUB_ID = "sub_id";
@VisibleForTesting
static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName";
private static final String REGEX_DISPLAY_NAME_PREFIXES = "^";
private static final String REGEX_DISPLAY_NAME_SUFFIXES = "\\s[0-9]+";
private static List<SubscriptionInfo> sAvailableResultsForTesting;
private static List<SubscriptionInfo> sActiveResultsForTesting;
@@ -298,12 +302,17 @@ public class SubscriptionUtil {
// If a display name is duplicate, append the final 4 digits of the phone number.
// Creates a mapping of Subscription id to original display name + phone number display name
final Supplier<Stream<DisplayInfo>> uniqueInfos = () -> originalInfos.get().map(info -> {
int infoSubId = info.subscriptionInfo.getSubscriptionId();
String cachedDisplayName = getDisplayNameFromSharedPreference(
context, info.subscriptionInfo.getSubscriptionId());
if (!TextUtils.isEmpty(cachedDisplayName)) {
Log.d(TAG, "use cached display name : " + cachedDisplayName);
context, infoSubId);
if (isValidCachedDisplayName(cachedDisplayName, info.originalName.toString())) {
Log.d(TAG, "use cached display name : for subId : " + infoSubId
+ "cached display name : " + cachedDisplayName);
info.uniqueName = cachedDisplayName;
return info;
} else {
Log.d(TAG, "remove cached display name : " + infoSubId);
removeItemFromDisplayNameSharedPreference(context, infoSubId);
}
if (duplicateOriginalNames.contains(info.originalName)) {
@@ -320,9 +329,8 @@ public class SubscriptionUtil {
} else {
info.uniqueName = info.originalName + " " + lastFourDigits;
Log.d(TAG, "Cache display name [" + info.uniqueName + "] for sub id "
+ info.subscriptionInfo.getSubscriptionId());
saveDisplayNameToSharedPreference(
context, info.subscriptionInfo.getSubscriptionId(), info.uniqueName);
+ infoSubId);
saveDisplayNameToSharedPreference(context, infoSubId, info.uniqueName);
}
} else {
info.uniqueName = info.originalName;
@@ -404,10 +412,27 @@ public class SubscriptionUtil {
.apply();
}
private static void removeItemFromDisplayNameSharedPreference(Context context, int subId) {
getDisplayNameSharedPreferenceEditor(context)
.remove(SUB_ID + subId)
.commit();
}
private static String getDisplayNameFromSharedPreference(Context context, int subid) {
return getDisplayNameSharedPreferences(context).getString(SUB_ID + subid, "");
}
@VisibleForTesting
static boolean isValidCachedDisplayName(String cachedDisplayName, String originalName) {
if (TextUtils.isEmpty(cachedDisplayName) || TextUtils.isEmpty(originalName)) {
return false;
}
String regex = REGEX_DISPLAY_NAME_PREFIXES + originalName + REGEX_DISPLAY_NAME_SUFFIXES;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(cachedDisplayName);
return matcher.matches();
}
public static String getDisplayName(SubscriptionInfo info) {
final CharSequence name = info.getDisplayName();
if (name != null) {

View File

@@ -18,9 +18,7 @@ package com.android.settings.network;
import static com.android.settings.network.SubscriptionUtil.KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME;
import static com.android.settings.network.SubscriptionUtil.SUB_ID;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
@@ -185,7 +183,7 @@ public class SubscriptionUtilTest {
@Ignore
@Test
public void getUniqueDisplayNames_identicalCarriers_fourDigitsUsed() {
// Both subscriptoins have the same display name.
// Both subscriptions have the same display name.
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -215,7 +213,7 @@ public class SubscriptionUtilTest {
@Ignore
@Test
public void getUniqueDisplayNames_identicalCarriersAfterTrim_fourDigitsUsed() {
// Both subscriptoins have the same display name.
// Both subscriptions have the same display name.
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -244,8 +242,8 @@ public class SubscriptionUtilTest {
@Ignore
@Test
public void getUniqueDisplayNames_phoneNumberBlocked_subscriptoinIdFallback() {
// Both subscriptoins have the same display name.
public void getUniqueDisplayNames_phoneNumberBlocked_subscriptionIdFallback() {
// Both subscriptions have the same display name.
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -273,9 +271,9 @@ public class SubscriptionUtilTest {
@Ignore
@Test
public void getUniqueDisplayNames_phoneNumberIdentical_subscriptoinIdFallback() {
public void getUniqueDisplayNames_phoneNumberIdentical_subscriptionIdFallback() {
// TODO have three here from the same carrier
// Both subscriptoins have the same display name.
// Both subscriptions have the same display name.
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
@@ -479,6 +477,39 @@ public class SubscriptionUtilTest {
assertEquals(CARRIER_1 + " 4321", nameOfSub2.toString());
}
@Test
public void getUniqueDisplayName_hasRecordAndNameIsChanged_doesNotUseRecordBeTheResult() {
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(SUBID_1);
when(info2.getSubscriptionId()).thenReturn(SUBID_2);
when(info1.getDisplayName()).thenReturn(CARRIER_1);
when(info2.getDisplayName()).thenReturn(CARRIER_2);
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(
Arrays.asList(info1, info2));
SharedPreferences sp = mock(SharedPreferences.class);
SharedPreferences.Editor editor = mock(SharedPreferences.Editor.class);
when(mContext.getSharedPreferences(
KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME, Context.MODE_PRIVATE)).thenReturn(sp);
when(sp.edit()).thenReturn(editor);
when(editor.remove(anyString())).thenReturn(editor);
when(sp.getString(eq(SUB_ID + SUBID_1), anyString())).thenReturn(CARRIER_1 + " 6789");
when(sp.getString(eq(SUB_ID + SUBID_2), anyString())).thenReturn(CARRIER_1 + " 4321");
final CharSequence nameOfSub1 =
SubscriptionUtil.getUniqueSubscriptionDisplayName(info1, mContext);
final CharSequence nameOfSub2 =
SubscriptionUtil.getUniqueSubscriptionDisplayName(info2, mContext);
assertThat(nameOfSub1).isNotNull();
assertThat(nameOfSub2).isNotNull();
assertEquals(CARRIER_1 + " 6789", nameOfSub1.toString());
assertEquals(CARRIER_2.toString(), nameOfSub2.toString());
}
@Test
public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
@@ -501,4 +532,60 @@ public class SubscriptionUtilTest {
assertTrue(SubscriptionUtil.isSimHardwareVisible(mContext));
}
@Test
public void isValidCachedDisplayName_matchesRule1_returnTrue() {
String originalName = "originalName";
String cacheString = "originalName 1234";
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isTrue();
}
@Test
public void isValidCachedDisplayName_matchesRule2_returnTrue() {
String originalName = "original Name";
String cacheString = originalName + " " + 1234;
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isTrue();
}
@Test
public void isValidCachedDisplayName_nameIsEmpty1_returnFalse() {
String originalName = "original Name";
String cacheString = "";
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse();
}
@Test
public void isValidCachedDisplayName_nameIsEmpty2_returnFalse() {
String originalName = "";
String cacheString = "originalName 1234";
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse();
}
@Test
public void isValidCachedDisplayName_nameIsDifferent_returnFalse() {
String originalName = "original Name";
String cacheString = "originalName 1234";
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse();
}
@Test
public void isValidCachedDisplayName_noNumber_returnFalse() {
String originalName = "original Name";
String cacheString = originalName;
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse();
}
@Test
public void isValidCachedDisplayName_noSpace_returnFalse() {
String originalName = "original Name";
String cacheString = originalName;
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse();
}
}