Check permission of the calling package in multi-pane devices Bug: 430047417 Test: manual test Flag: EXEMPT BUGFIX (cherry picked from commit bd4d57ade07792f2a9160acbe480603b30e79917) Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:2860bd01810adb2d0f00fba8f327cdae3f20ab9d Merged-In: I91dafa77d07970fdf2628b4d9e89ca1c4b74194c Change-Id: I91dafa77d07970fdf2628b4d9e89ca1c4b74194c
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ed19890..e2d249a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml
@@ -2488,7 +2488,7 @@ android:name="Settings$AppUsageAccessSettingsActivity" android:exported="true" android:label="@string/usage_access_title"> - <intent-filter> + <intent-filter android:priority="1"> <action android:name="android.settings.USAGE_ACCESS_SETTINGS"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="package"/>
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index 02237b8..14e54eb 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -49,6 +49,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -178,6 +179,25 @@ if (!(activity instanceof SettingsActivity)) { return false; } + // Check the permission of the calling package if the device supports multi-pane. + if (ActivityEmbeddingUtils.isEmbeddingActivityEnabled(activity)) { + final String callingPackageName = + ((SettingsActivity) activity).getInitialCallingPackage(); + + if (TextUtils.isEmpty(callingPackageName)) { + Log.w(TAG, "Not able to get calling package name for permission check"); + return false; + } + if (mPm.checkPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, + callingPackageName) + != PackageManager.PERMISSION_GRANTED) { + Log.w(TAG, "Package " + callingPackageName + " does not have required permission " + + Manifest.permission.INTERACT_ACROSS_USERS_FULL); + return false; + } + return true; + } + try { int callerUid = ActivityManager.getService().getLaunchedFromUid( activity.getActivityToken());