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

This commit is contained in:
TreeHugger Robot
2023-02-14 13:47:59 +00:00
committed by Android (Google) Code Review
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.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.LocaleList; import android.os.LocaleList;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@@ -178,15 +180,36 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_LOCALE_PICKER && resultCode == Activity.RESULT_OK if (requestCode == REQUEST_LOCALE_PICKER && resultCode == Activity.RESULT_OK
&& data != null) { && data != null) {
final LocaleStore.LocaleInfo locale = final LocaleStore.LocaleInfo localeInfo =
(LocaleStore.LocaleInfo) data.getSerializableExtra( (LocaleStore.LocaleInfo) data.getSerializableExtra(
INTENT_LOCALE_KEY); INTENT_LOCALE_KEY);
mAdapter.addLocale(locale);
String preferencesTags = Settings.System.getString(
getContext().getContentResolver(), Settings.System.LOCALE_PREFERENCES);
mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags));
updateVisibilityOfRemoveMenu(); updateVisibilityOfRemoveMenu();
} }
super.onActivityResult(requestCode, resultCode, data); 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) { private void setRemoveMode(boolean mRemoveMode) {
this.mRemoveMode = mRemoveMode; this.mRemoveMode = mRemoveMode;
mAdapter.setRemoveMode(mRemoveMode); mAdapter.setRemoveMode(mRemoveMode);

View File

@@ -28,6 +28,7 @@ import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.android.internal.app.LocaleStore;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
@@ -44,6 +45,8 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
import java.util.Locale;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowAlertDialogCompat.class) @Config(shadows = ShadowAlertDialogCompat.class)
public class LocaleListEditorTest { public class LocaleListEditorTest {
@@ -160,4 +163,15 @@ public class LocaleListEditorTest {
assertThat(shadowDialog.getMessage()).isNull(); 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");
}
} }