diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java index 5f75b6b3a6d..acdc32d80a2 100644 --- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java +++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java @@ -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, diff --git a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java index 38e655c7fc6..f406d8763ff 100644 --- a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 22a4ea74606..f11aafd84d8 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -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); diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java index 34b7472072c..b099866d218 100644 --- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java +++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java @@ -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;