Merge "[Regional Preference] Append unicode tags to new system language."
This commit is contained in:
committed by
Android (Google) Code Review
commit
8fe240626a
@@ -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);
|
||||
|
@@ -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");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user