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());