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

Commit 26a1866b authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "Remove the cached display name" into udc-qpr-dev

parents 2d7a4692 d21f14a0
Loading
Loading
Loading
Loading
+34 −9
Original line number Original line Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.settings.network;


import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;

import static com.android.internal.util.CollectionUtils.emptyIfNull;
import static com.android.internal.util.CollectionUtils.emptyIfNull;


import android.annotation.Nullable;
import android.annotation.Nullable;
@@ -56,6 +55,8 @@ import java.util.Map;
import java.util.Set;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.Stream;


@@ -66,6 +67,9 @@ public class SubscriptionUtil {
    static final String SUB_ID = "sub_id";
    static final String SUB_ID = "sub_id";
    @VisibleForTesting
    @VisibleForTesting
    static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName";
    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> sAvailableResultsForTesting;
    private static List<SubscriptionInfo> sActiveResultsForTesting;
    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.
        // 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
        // Creates a mapping of Subscription id to original display name + phone number display name
        final Supplier<Stream<DisplayInfo>> uniqueInfos = () -> originalInfos.get().map(info -> {
        final Supplier<Stream<DisplayInfo>> uniqueInfos = () -> originalInfos.get().map(info -> {
            int infoSubId = info.subscriptionInfo.getSubscriptionId();
            String cachedDisplayName = getDisplayNameFromSharedPreference(
            String cachedDisplayName = getDisplayNameFromSharedPreference(
                    context, info.subscriptionInfo.getSubscriptionId());
                    context, infoSubId);
            if (!TextUtils.isEmpty(cachedDisplayName)) {
            if (isValidCachedDisplayName(cachedDisplayName, info.originalName.toString())) {
                Log.d(TAG, "use cached display name : " + cachedDisplayName);
                Log.d(TAG, "use cached display name : for subId : " + infoSubId
                        + "cached display name : " + cachedDisplayName);
                info.uniqueName = cachedDisplayName;
                info.uniqueName = cachedDisplayName;
                return info;
                return info;
            } else {
                Log.d(TAG, "remove cached display name : " + infoSubId);
                removeItemFromDisplayNameSharedPreference(context, infoSubId);
            }
            }


            if (duplicateOriginalNames.contains(info.originalName)) {
            if (duplicateOriginalNames.contains(info.originalName)) {
@@ -320,9 +329,8 @@ public class SubscriptionUtil {
                } else {
                } else {
                    info.uniqueName = info.originalName + " " + lastFourDigits;
                    info.uniqueName = info.originalName + " " + lastFourDigits;
                    Log.d(TAG, "Cache display name [" + info.uniqueName + "] for sub id "
                    Log.d(TAG, "Cache display name [" + info.uniqueName + "] for sub id "
                            + info.subscriptionInfo.getSubscriptionId());
                            + infoSubId);
                    saveDisplayNameToSharedPreference(
                    saveDisplayNameToSharedPreference(context, infoSubId, info.uniqueName);
                            context, info.subscriptionInfo.getSubscriptionId(), info.uniqueName);
                }
                }
            } else {
            } else {
                info.uniqueName = info.originalName;
                info.uniqueName = info.originalName;
@@ -404,10 +412,27 @@ public class SubscriptionUtil {
                .apply();
                .apply();
    }
    }


    private static void removeItemFromDisplayNameSharedPreference(Context context, int subId) {
        getDisplayNameSharedPreferenceEditor(context)
                .remove(SUB_ID + subId)
                .commit();
    }

    private static String getDisplayNameFromSharedPreference(Context context, int subid) {
    private static String getDisplayNameFromSharedPreference(Context context, int subid) {
        return getDisplayNameSharedPreferences(context).getString(SUB_ID + 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) {
    public static String getDisplayName(SubscriptionInfo info) {
        final CharSequence name = info.getDisplayName();
        final CharSequence name = info.getDisplayName();
        if (name != null) {
        if (name != null) {
+99 −12
Original line number Original line Diff line number Diff line
@@ -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.KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME;
import static com.android.settings.network.SubscriptionUtil.SUB_ID;
import static com.android.settings.network.SubscriptionUtil.SUB_ID;

import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
@@ -185,7 +183,7 @@ public class SubscriptionUtilTest {
    @Ignore
    @Ignore
    @Test
    @Test
    public void getUniqueDisplayNames_identicalCarriers_fourDigitsUsed() {
    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 info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -215,7 +213,7 @@ public class SubscriptionUtilTest {
    @Ignore
    @Ignore
    @Test
    @Test
    public void getUniqueDisplayNames_identicalCarriersAfterTrim_fourDigitsUsed() {
    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 info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -244,8 +242,8 @@ public class SubscriptionUtilTest {


    @Ignore
    @Ignore
    @Test
    @Test
    public void getUniqueDisplayNames_phoneNumberBlocked_subscriptoinIdFallback() {
    public void getUniqueDisplayNames_phoneNumberBlocked_subscriptionIdFallback() {
        // Both subscriptoins have the same display name.
        // Both subscriptions have the same display name.
        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
        when(info1.getSubscriptionId()).thenReturn(SUBID_1);
@@ -273,9 +271,9 @@ public class SubscriptionUtilTest {


    @Ignore
    @Ignore
    @Test
    @Test
    public void getUniqueDisplayNames_phoneNumberIdentical_subscriptoinIdFallback() {
    public void getUniqueDisplayNames_phoneNumberIdentical_subscriptionIdFallback() {
        // TODO have three here from the same carrier
        // 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 info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
@@ -479,6 +477,39 @@ public class SubscriptionUtilTest {
        assertEquals(CARRIER_1 + " 4321", nameOfSub2.toString());
        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
    @Test
    public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
    public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
        assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
        assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
@@ -501,4 +532,60 @@ public class SubscriptionUtilTest {


        assertTrue(SubscriptionUtil.isSimHardwareVisible(mContext));
        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();
    }
}
}