Merge "[Panlingual] Fix the app language is shown incorrectly in the work profile" into tm-dev am: 6ead6df534

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/17524431

Change-Id: Ida5deaf3abd029a81b2210207acc0a243c95afbc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Josh Hou
2022-04-01 07:57:08 +00:00
committed by Automerger Merge Worker
4 changed files with 27 additions and 7 deletions

View File

@@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.LocaleList;
import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -40,6 +41,7 @@ import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.widget.LayoutPreference;
import java.util.Locale;
@@ -214,8 +216,10 @@ public class AppLocaleDetails extends SettingsPreferenceFragment {
* TODO (b209962418) Do a performance test to low end device.
* @return Return the summary to show the current app's language.
*/
public static CharSequence getSummary(Context context, String packageName) {
Locale appLocale = getAppDefaultLocale(context, packageName);
public static CharSequence getSummary(Context context, AppEntry entry) {
final UserHandle userHandle = UserHandle.getUserHandleForUid(entry.info.uid);
final Context contextAsUser = context.createContextAsUser(userHandle, 0);
Locale appLocale = getAppDefaultLocale(contextAsUser, entry.info.packageName);
if (appLocale == null) {
Locale systemLocale = Locale.getDefault();
return context.getString(R.string.preference_of_system_locale_summary,

View File

@@ -29,6 +29,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.AppLocaleUtil;
import com.android.settings.localepicker.AppLocalePickerActivity;
@@ -62,7 +63,7 @@ public class AppLocalePreferenceController extends AppInfoPreferenceControllerBa
@Override
public CharSequence getSummary() {
return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry().info.packageName);
return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry());
}
@Override
@@ -74,6 +75,7 @@ public class AppLocalePreferenceController extends AppInfoPreferenceControllerBa
if (mParent != null) {
Intent intent = new Intent(mContext, AppLocalePickerActivity.class);
intent.setData(Uri.parse("package:" + mParent.getAppEntry().info.packageName));
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mParent.getAppEntry().info.uid);
mContext.startActivity(intent);
return true;
} else {

View File

@@ -638,6 +638,7 @@ public class ManageApplications extends InstrumentedFragment
case LIST_TYPE_APPS_LOCALE:
Intent intent = new Intent(getContext(), AppLocalePickerActivity.class);
intent.setData(Uri.parse("package:" + mCurrentPkgName));
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mCurrentUid);
startActivity(intent);
break;
// TODO: Figure out if there is a way where we can spin up the profile's settings
@@ -1561,8 +1562,7 @@ public class ManageApplications extends InstrumentedFragment
holder.setSummary(MediaManagementAppsDetails.getSummary(mContext, entry));
break;
case LIST_TYPE_APPS_LOCALE:
holder.setSummary(AppLocaleDetails
.getSummary(mContext, entry.info.packageName));
holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
break;
default:
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);

View File

@@ -18,9 +18,11 @@ package com.android.settings.localepicker;
import android.app.FragmentTransaction;
import android.app.LocaleManager;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.LocaleList;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
@@ -31,6 +33,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.LocalePickerWithRegion;
import com.android.internal.app.LocaleStore;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.appinfo.AppLocaleDetails;
import com.android.settings.core.SettingsBaseActivity;
@@ -45,6 +48,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
private String mPackageName;
private LocalePickerWithRegion mLocalePickerWithRegion;
private AppLocaleDetails mAppLocaleDetails;
private Context mContextAsUser;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -61,11 +65,21 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
finish();
return;
}
int uid = getIntent().getIntExtra(AppInfoBase.ARG_PACKAGE_UID, -1);
if (uid == -1) {
Log.w(TAG, "Unexpected user id");
finish();
}
UserHandle userHandle = UserHandle.getUserHandleForUid(uid);
mContextAsUser = createContextAsUser(userHandle, 0);
getActionBar().setDisplayHomeAsUpEnabled(true);
mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
this, AppLocalePickerActivity.this, false /* translate only */, mPackageName);
mContextAsUser,
AppLocalePickerActivity.this,
false /* translate only */,
mPackageName);
mAppLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
// Launch Locale picker part.
@@ -107,7 +121,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
/** Sets the app's locale to the supplied language tag */
private void setAppDefaultLocale(String languageTag) {
LocaleManager localeManager = getSystemService(LocaleManager.class);
LocaleManager localeManager = mContextAsUser.getSystemService(LocaleManager.class);
if (localeManager == null) {
Log.w(TAG, "LocaleManager is null, cannot set default app locale");
return;