diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1ef7680c04f22faa8fe95c48804f079e3d7a507b..e0a1d9c7d02b7f7936d7e29954247f4ac7254219 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2402,7 +2402,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 02237b886d979656f4cb6370afb2fd17f1a8d2e1..14e54eb5b03cfb9ae5e9755f647eef922a1154e0 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());