Loading src/com/android/settings/localepicker/LocaleListEditor.java +25 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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"); } } Loading
src/com/android/settings/localepicker/LocaleListEditor.java +25 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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"); } }