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

Commit 62a8514d authored by tom hsu's avatar tom hsu Committed by Tom Hsu
Browse files

[Panlingual] Fix duplicated locale show on suggested group

 - When User select 2 same locale but different region, current logic
   will also check 2 times and add these same results into cache.
 - Use hashSet to resolve this problem

Bug: 220804297
Test: local
Test: atest pass
Change-Id: I60c63a1eb570373fd714cf9b29ed926d15b2daa7
parent d3a7ec88
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.settingslib.widget.RadioButtonPreference;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;

/**
@@ -292,7 +293,7 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen
            });

            // Other locales in suggested languages group.
            Collection<Locale> supportedSystemLocales = new ArrayList<>();
            Collection<Locale> supportedSystemLocales = new HashSet<>();
            getCurrentSystemLocales().forEach(systemLocale -> {
                mAppSupportedLocales.forEach(supportedLocale -> {
                    if (compareLocale(systemLocale, supportedLocale)) {
+36 −4
Original line number Diff line number Diff line
@@ -43,7 +43,9 @@ import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

/**
 * Unittest for ApplocaleDetails
@@ -151,8 +153,9 @@ public class AppLocaleDetailsTest {
    @Test
    @UiThreadTest
    public void
            handleAllLocalesData_noAppAndNoSupportedSimLocale_1stSuggestedLocaleIsAssetLocale() {
        Locale firstAssetLocale = new Locale("en", "GB");
            handleAllLocalesData_noAppAndNoSupportedSimLocale_suggestedLocaleIsSupported() {
        Locale testEnAssetLocale = new Locale("en", "GB");
        Locale testJaAssetLocale = new Locale("ja", "JP");
        setupInitialLocales(
                /* appLocale= */ "",
                /* simCountry= */ "tw",
@@ -166,8 +169,8 @@ public class AppLocaleDetailsTest {
        helper.handleAllLocalesData();

        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
        Locale locale = suggestedLocales.iterator().next();
        assertTrue(locale.equals(firstAssetLocale));
        assertTrue(suggestedLocales.contains(testEnAssetLocale));
        assertTrue(suggestedLocales.contains(testJaAssetLocale));
    }

    @Test
@@ -295,6 +298,35 @@ public class AppLocaleDetailsTest {
        assertTrue(locale.equals(systemLocale));
    }

    @Test
    @UiThreadTest
    public void handleAllLocalesData_sameLocaleButDifferentRegion_notShowDuplicatedLocale() {
        setupInitialLocales(
                /* appLocale= */ "",
                /* simCountry= */ "",
                /* networkCountry= */ "",
                /* systemLocales= */ "en-us, en-gb, jp, ne",
                /* packageLocales= */ "pa, cn, tw, en-us, en-gb",
                /* assetLocales= */ new String[]{});
        DummyAppLocaleDetailsHelper helper =
                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);

        helper.handleAllLocalesData();

        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
        assertFalse(hasDuplicatedResult(suggestedLocales));
    }

    private boolean hasDuplicatedResult(Collection<Locale> locales) {
        Set<Locale> tempSet = new HashSet<>();
        for (Locale locale : locales) {
            if (!tempSet.add(locale)) {
                return true;
            }
        }
        return false;
    }

    @Test
    @UiThreadTest
    public void handleAllLocalesData_supportLocaleListIsNotEmpty() {