[Panlingual] Handle onLocaleSelected.

1. When a new locale is selected, onLocaleSelected(...) will get the LocaleInfo.
2. Set LocaleList to LocaleManager for apps.
3. Check isSystemLocale().

Bug: 223090738
Test: local test pass
Change-Id: I20bc2e2349d0bad123661e0964a4e271dd319147
Merged-In: I20bc2e2349d0bad123661e0964a4e271dd319147
This commit is contained in:
danielwbhuang
2022-03-31 18:05:04 +08:00
parent 092fe80396
commit 963abde2dc

View File

@@ -17,7 +17,9 @@
package com.android.settings.localepicker; package com.android.settings.localepicker;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.app.LocaleManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.LocaleList;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
@@ -36,11 +38,13 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
implements LocalePickerWithRegion.LocaleSelectedListener { implements LocalePickerWithRegion.LocaleSelectedListener {
private static final String TAG = AppLocalePickerActivity.class.getSimpleName(); private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
private String mPackageName;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
String packageName = getIntent().getData().getSchemeSpecificPart(); mPackageName = getIntent().getData().getSchemeSpecificPart();
if (TextUtils.isEmpty(packageName)) { if (TextUtils.isEmpty(mPackageName)) {
Log.d(TAG, "There is no package name."); Log.d(TAG, "There is no package name.");
finish(); finish();
return; return;
@@ -50,7 +54,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
setContentView(R.layout.app_locale_picker); setContentView(R.layout.app_locale_picker);
// Create App locale info detail part. // Create App locale info detail part.
AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(packageName); AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
getSupportFragmentManager() getSupportFragmentManager()
.beginTransaction() .beginTransaction()
.replace(R.id.app_locale_detail, appLocaleDetails) .replace(R.id.app_locale_detail, appLocaleDetails)
@@ -92,9 +96,23 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
} }
@Override @Override
public void onLocaleSelected(LocaleStore.LocaleInfo locale) { public void onLocaleSelected(LocaleStore.LocaleInfo localeInfo) {
// TODO When locale is selected, this shall set per app language here. if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) {
setAppDefaultLocale("");
} else {
setAppDefaultLocale(localeInfo.getLocale().getLanguage());
}
finish(); finish();
} }
/** Sets the app's locale to the supplied language tag */
private void setAppDefaultLocale(String languageTag) {
LocaleManager localeManager = getSystemService(LocaleManager.class);
if (localeManager == null) {
Log.w(TAG, "LocaleManager is null, cannot set default app locale");
return;
}
localeManager.setApplicationLocales(mPackageName, LocaleList.forLanguageTags(languageTag));
}
} }