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

-When the user adds a new system language, this new language can not
 have the current unicode tags. Hence, it shall append current unicode tags to the new system language.

Bug: b/268025290
Test: Manual test passed.
Test: make RunSettingsRoboTests ROBOTEST_FILTER=LocaleListEditorTest
Change-Id: I76671908ad01dcb8b04714aa3ca44d3614a0428b
This commit is contained in:
tom hsu
2023-02-06 22:24:16 +08:00
committed by Tom Hsu
parent 5a2088e232
commit d68e04ff04
2 changed files with 39 additions and 2 deletions

View File

@@ -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);