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

This commit is contained in:
Josh Hou
2022-04-01 07:38:00 +00:00
committed by Android (Google) Code Review
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.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.LocaleList; import android.os.LocaleList;
import android.os.UserHandle;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -40,6 +41,7 @@ import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppInfoBase;
import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.LayoutPreference;
import java.util.Locale; import java.util.Locale;
@@ -214,8 +216,10 @@ public class AppLocaleDetails extends SettingsPreferenceFragment {
* TODO (b209962418) Do a performance test to low end device. * TODO (b209962418) Do a performance test to low end device.
* @return Return the summary to show the current app's language. * @return Return the summary to show the current app's language.
*/ */
public static CharSequence getSummary(Context context, String packageName) { public static CharSequence getSummary(Context context, AppEntry entry) {
Locale appLocale = getAppDefaultLocale(context, packageName); 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) { if (appLocale == null) {
Locale systemLocale = Locale.getDefault(); Locale systemLocale = Locale.getDefault();
return context.getString(R.string.preference_of_system_locale_summary, 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 androidx.preference.Preference;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.AppLocaleUtil; import com.android.settings.applications.AppLocaleUtil;
import com.android.settings.localepicker.AppLocalePickerActivity; import com.android.settings.localepicker.AppLocalePickerActivity;
@@ -62,7 +63,7 @@ public class AppLocalePreferenceController extends AppInfoPreferenceControllerBa
@Override @Override
public CharSequence getSummary() { public CharSequence getSummary() {
return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry().info.packageName); return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry());
} }
@Override @Override
@@ -74,6 +75,7 @@ public class AppLocalePreferenceController extends AppInfoPreferenceControllerBa
if (mParent != null) { if (mParent != null) {
Intent intent = new Intent(mContext, AppLocalePickerActivity.class); Intent intent = new Intent(mContext, AppLocalePickerActivity.class);
intent.setData(Uri.parse("package:" + mParent.getAppEntry().info.packageName)); intent.setData(Uri.parse("package:" + mParent.getAppEntry().info.packageName));
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mParent.getAppEntry().info.uid);
mContext.startActivity(intent); mContext.startActivity(intent);
return true; return true;
} else { } else {

View File

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

View File

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