Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 556a17b7 authored by Mill Chen's avatar Mill Chen Committed by Nishith Khanna
Browse files

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
parent 3006e5be
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2277,7 +2277,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"/>
+20 −0
Original line number Diff line number Diff line
@@ -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());