Merge "Fix the security vulnerability issue in AppLocalePickerActivity"
This commit is contained in:
@@ -19,6 +19,7 @@ package com.android.settings.localepicker;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.app.LocaleManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.LocaleList;
|
||||
@@ -34,6 +35,7 @@ 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.AppLocaleUtil;
|
||||
import com.android.settings.applications.appinfo.AppLocaleDetails;
|
||||
import com.android.settings.core.SettingsBaseActivity;
|
||||
|
||||
@@ -64,12 +66,18 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
}
|
||||
mContextAsUser = this;
|
||||
if (getIntent().hasExtra(AppInfoBase.ARG_PACKAGE_UID)) {
|
||||
int userId = getIntent().getIntExtra(AppInfoBase.ARG_PACKAGE_UID, -1);
|
||||
if (userId != -1) {
|
||||
UserHandle userHandle = UserHandle.getUserHandleForUid(userId);
|
||||
int uid = getIntent().getIntExtra(AppInfoBase.ARG_PACKAGE_UID, -1);
|
||||
|
||||
if (uid != -1) {
|
||||
UserHandle userHandle = UserHandle.getUserHandleForUid(uid);
|
||||
mContextAsUser = createContextAsUser(userHandle, 0);
|
||||
}
|
||||
}
|
||||
if (!canDisplayLocaleUi() || mContextAsUser.getUserId() != UserHandle.myUserId()) {
|
||||
Log.w(TAG, "Not allow to display Locale Settings UI.");
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
setTitle(R.string.app_locale_picker_title);
|
||||
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
@@ -161,4 +169,18 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
.replace(R.id.content_frame, mLocalePickerWithRegion)
|
||||
.commit();
|
||||
}
|
||||
|
||||
private boolean canDisplayLocaleUi() {
|
||||
try {
|
||||
PackageManager packageManager = mContextAsUser.getPackageManager();
|
||||
return AppLocaleUtil.canDisplayLocaleUi(mContextAsUser,
|
||||
packageManager.getApplicationInfo(mPackageName, 0),
|
||||
packageManager.queryIntentActivities(AppLocaleUtil.LAUNCHER_ENTRY_INTENT,
|
||||
PackageManager.GET_META_DATA));
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
Log.e(TAG, "Unable to find info for package: " + mPackageName);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user