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

Commit 98549230 authored by Mehdi Alizadeh's avatar Mehdi Alizadeh
Browse files

Allow owners of ACCESS_SHORTCUTS pin shortcuts on behalf of other apps

Test: atest com.android.server.pm.ShortcutManagerTest1 \
            com.android.server.pm.ShortcutManagerTest2 \
            com.android.server.pm.ShortcutManagerTest3 \
            com.android.server.pm.ShortcutManagerTest4 \
            com.android.server.pm.ShortcutManagerTest5 \
            com.android.server.pm.ShortcutManagerTest6 \
            com.android.server.pm.ShortcutManagerTest7 \
            com.android.server.pm.ShortcutManagerTest8 \
            com.android.server.pm.ShortcutManagerTest9 \
            com.android.server.pm.ShortcutManagerTest10
Bug: 148560664

Change-Id: I77f13d590dada20169ccf53a6fc4684ac25c77ea
parent 2a198f3b
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -1977,10 +1977,15 @@ public class ShortcutService extends IShortcutService.Stub {
     * After validating the caller, it passes the request to {@link #mShortcutRequestPinProcessor}.
     * Either {@param shortcut} or {@param appWidget} should be non-null.
     */
    private boolean requestPinItem(String packageName, int userId, ShortcutInfo shortcut,
    private boolean requestPinItem(String callingPackage, int userId, ShortcutInfo shortcut,
            AppWidgetProviderInfo appWidget, Bundle extras, IntentSender resultIntent) {
        verifyCaller(packageName, userId);
        verifyShortcutInfoPackage(packageName, shortcut);
        verifyCaller(callingPackage, userId);
        if (shortcut == null || !injectHasAccessShortcutsPermission(
                injectBinderCallingPid(), injectBinderCallingUid())) {
            // Verify if caller is the shortcut owner, only if caller doesn't have ACCESS_SHORTCUTS.
            verifyShortcutInfoPackage(callingPackage, shortcut);
        }
        final String shortcutPackage = shortcut.getPackage();

        final boolean ret;
        synchronized (mLock) {
@@ -1995,13 +2000,13 @@ public class ShortcutService extends IShortcutService.Stub {
            // and then proceed the rest of the process.
            if (shortcut != null) {
                final ShortcutPackage ps = getPackageShortcutsForPublisherLocked(
                        packageName, userId);
                        shortcutPackage, userId);
                final String id = shortcut.getId();
                if (ps.isShortcutExistsAndInvisibleToPublisher(id)) {

                    ps.updateInvisibleShortcutForPinRequestWith(shortcut);

                    packageShortcutsChanged(packageName, userId);
                    packageShortcutsChanged(shortcutPackage, userId);
                }
            }