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

Commit 627d4db7 authored by Mehdi Alizadeh's avatar Mehdi Alizadeh
Browse files

Enforce MANAGE_APP_PREDICTIONS on hasShareTargets

ShortcutManager#hasShareTargets() is used in ShareSheet, which is moving
out of system process. So we need to annotate hasShareTargets as systemApi
and enforce permission on the caller.

Bug: 123779604
Test: atest ShortcutManagerTest1
Change-Id: Ib2352f0e8600b0e792405af5b9b61b380c050d28
parent f24aad94
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1713,6 +1713,7 @@ package android.content.pm {
  public class ShortcutManager {
    method @NonNull public java.util.List<android.content.pm.ShortcutManager.ShareShortcutInfo> getShareTargets(@NonNull android.content.IntentFilter);
    method public boolean hasShareTargets(@NonNull String);
  }
  public static final class ShortcutManager.ShareShortcutInfo implements android.os.Parcelable {
+1 −0
Original line number Diff line number Diff line
@@ -644,6 +644,7 @@ public class ShortcutManager {
     * @return True if the package has any share target definitions, False otherwise.
     * @hide
     */
    @SystemApi
    public boolean hasShareTargets(@NonNull String packageName) {
        try {
            return mService.hasShareTargets(mContext.getPackageName(), packageName,
+2 −1
Original line number Diff line number Diff line
@@ -2173,7 +2173,8 @@ public class ShortcutService extends IShortcutService.Stub {
    public boolean hasShareTargets(String packageName, String packageToCheck,
            @UserIdInt int userId) {
        verifyCaller(packageName, userId);
        enforceSystem();
        enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APP_PREDICTIONS,
                "hasShareTargets");

        synchronized (mLock) {
            throwIfUserLockedL(userId);
+9 −0
Original line number Diff line number Diff line
@@ -6286,6 +6286,15 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
        mManager.getShareTargets(filter);
    }

    public void testHasShareTargets_permission() {
        assertExpectException(SecurityException.class, "Missing permission", () ->
                mManager.hasShareTargets(CALLING_PACKAGE_1));

        // Has permission, now it should pass.
        mCallerPermissions.add(permission.MANAGE_APP_PREDICTIONS);
        mManager.hasShareTargets(CALLING_PACKAGE_1);
    }

    public void testDumpsys_crossProfile() {
        prepareCrossProfileDataSet();
        dumpsysOnLogcat("test1", /* force= */ true);