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

Commit 8fe24062 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Regional Preference] Append unicode tags to new system language."

parents 163bb0bc d68e04ff
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.LocaleList;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -178,15 +180,36 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_LOCALE_PICKER && resultCode == Activity.RESULT_OK
                && data != null) {
            final LocaleStore.LocaleInfo locale =
            final LocaleStore.LocaleInfo localeInfo =
                    (LocaleStore.LocaleInfo) data.getSerializableExtra(
                            INTENT_LOCALE_KEY);
            mAdapter.addLocale(locale);

            String preferencesTags = Settings.System.getString(
                    getContext().getContentResolver(), Settings.System.LOCALE_PREFERENCES);

            mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags));
            updateVisibilityOfRemoveMenu();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    @VisibleForTesting
    static LocaleStore.LocaleInfo mayAppendUnicodeTags(
            LocaleStore.LocaleInfo localeInfo, String recordTags) {
        if (TextUtils.isEmpty(recordTags) || TextUtils.equals("und", recordTags)) {
            // No recorded tag, return inputted LocaleInfo.
            return localeInfo;
        }
        Locale recordLocale = Locale.forLanguageTag(recordTags);
        Locale.Builder builder = new Locale.Builder()
                .setLocale(localeInfo.getLocale());
        recordLocale.getUnicodeLocaleKeys().forEach(key ->
                builder.setUnicodeLocaleKeyword(key, recordLocale.getUnicodeLocaleType(key)));
        LocaleStore.LocaleInfo newLocaleInfo = LocaleStore.fromLocale(builder.build());
        newLocaleInfo.setTranslated(localeInfo.isTranslated());
        return newLocaleInfo;
    }

    private void setRemoveMode(boolean mRemoveMode) {
        this.mRemoveMode = mRemoveMode;
        mAdapter.setRemoveMode(mRemoveMode);
+14 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;

import com.android.internal.app.LocaleStore;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
@@ -44,6 +45,8 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

import java.util.Locale;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowAlertDialogCompat.class)
public class LocaleListEditorTest {
@@ -160,4 +163,15 @@ public class LocaleListEditorTest {

        assertThat(shadowDialog.getMessage()).isNull();
    }

    @Test
    public void mayAppendUnicodeTags_appendUnicodeTags_success() {
        LocaleStore.LocaleInfo localeInfo = LocaleStore.fromLocale(Locale.forLanguageTag("en-US"));

        LocaleStore.LocaleInfo result =
                LocaleListEditor.mayAppendUnicodeTags(localeInfo, "und-u-fw-wed-mu-celsius");

        assertThat(result.getLocale().getUnicodeLocaleType("fw")).isEqualTo("wed");
        assertThat(result.getLocale().getUnicodeLocaleType("mu")).isEqualTo("celsius");
    }
}