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
This commit is contained in:
Mehdi Alizadeh
2020-01-31 19:26:29 -08:00
parent 2a198f3bf5
commit 9854923028

View File

@@ -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);
}
}