From 556a17b75489ec585f72b73b6cfed83decd94d22 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Fri, 26 Sep 2025 09:02:26 +0000 Subject: [PATCH] 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:1d92f64b49e676e9606c6de97b542a9ae25216aa Merged-In: I91dafa77d07970fdf2628b4d9e89ca1c4b74194c Change-Id: I91dafa77d07970fdf2628b4d9e89ca1c4b74194c --- AndroidManifest.xml | 2 +- .../settings/applications/AppInfoBase.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index db633fca6a4..a4be00e3087 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2277,7 +2277,7 @@ android:name="Settings$AppUsageAccessSettingsActivity" android:exported="true" android:label="@string/usage_access_title"> - + diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index 8422ece89d6..851fc44303c 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -49,6 +49,7 @@ import androidx.fragment.app.Fragment; 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 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment 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()); -- GitLab