From 19859b63c9c082f7bb5ba0d99e683826a622f33c Mon Sep 17 00:00:00 2001 From: danielwbhuang Date: Tue, 15 Mar 2022 17:17:58 +0800 Subject: [PATCH] [Panlingual] Handle onLocaleSelected. 1. When a new locale is selected, onLocaleSelected(...) will get the LocaleInfo. 2. Set LocaleList to LocaleManager for apps. Bug: 223090738 Test: local test pass Change-Id: I20bc2e2349d0bad123661e0964a4e271dd319147 --- .../localepicker/AppLocalePickerActivity.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java index 80d3336c181..227b5e35bae 100644 --- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java +++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java @@ -17,7 +17,9 @@ package com.android.settings.localepicker; import android.app.FragmentTransaction; +import android.app.LocaleManager; import android.os.Bundle; +import android.os.LocaleList; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -36,11 +38,13 @@ public class AppLocalePickerActivity extends SettingsBaseActivity implements LocalePickerWithRegion.LocaleSelectedListener { private static final String TAG = AppLocalePickerActivity.class.getSimpleName(); + private String mPackageName; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String packageName = getIntent().getData().getSchemeSpecificPart(); - if (TextUtils.isEmpty(packageName)) { + mPackageName = getIntent().getData().getSchemeSpecificPart(); + if (TextUtils.isEmpty(mPackageName)) { Log.d(TAG, "There is no package name."); finish(); return; @@ -50,7 +54,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity setContentView(R.layout.app_locale_picker); // Create App locale info detail part. - AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(packageName); + AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(mPackageName); getSupportFragmentManager() .beginTransaction() .replace(R.id.app_locale_detail, appLocaleDetails) @@ -92,9 +96,24 @@ public class AppLocalePickerActivity extends SettingsBaseActivity } @Override - public void onLocaleSelected(LocaleStore.LocaleInfo locale) { - // TODO When locale is selected, this shall set per app language here. + public void onLocaleSelected(LocaleStore.LocaleInfo localeInfo) { + // TODO(b/223090003): check localeInfo.isSystemLocale() + if (localeInfo == null || localeInfo.getLocale() == null) { + setAppDefaultLocale(""); + } else { + setAppDefaultLocale(localeInfo.getLocale().getLanguage()); + } 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)); + } }