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

Commit b6d3523d authored by Makoto Onuki's avatar Makoto Onuki
Browse files

ShortcutManager: Address API review feedback.

- "delete" -> "remove"
- add/deleteDynamicShortcut() now takes a list.
- Throttling default settings is now 2 calls / hour.

- Add categories to ShortcutInfo.
- getIconResourceId() is now public

Bug 27923857
Bug 27548047

Change-Id: I8457b30e4b2f7c63ab2988648b37178fd16ea45b
parent bc20320f
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -9500,8 +9500,6 @@ package android.content.pm {
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public boolean hasShortcutHostPermission();
    method public boolean hasShortcutHostPermission();
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
@@ -10042,7 +10040,9 @@ package android.content.pm {
  public final class ShortcutInfo implements android.os.Parcelable {
  public final class ShortcutInfo implements android.os.Parcelable {
    method public int describeContents();
    method public int describeContents();
    method public android.content.ComponentName getActivityComponent();
    method public android.content.ComponentName getActivityComponent();
    method public java.util.List<java.lang.String> getCategories();
    method public android.os.PersistableBundle getExtras();
    method public android.os.PersistableBundle getExtras();
    method public int getIconResourceId();
    method public java.lang.String getId();
    method public java.lang.String getId();
    method public android.content.Intent getIntent();
    method public android.content.Intent getIntent();
    method public long getLastChangedTimestamp();
    method public long getLastChangedTimestamp();
@@ -10066,12 +10066,14 @@ package android.content.pm {
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final java.lang.String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
  }
  }
  public static class ShortcutInfo.Builder {
  public static class ShortcutInfo.Builder {
    ctor public ShortcutInfo.Builder(android.content.Context);
    ctor public ShortcutInfo.Builder(android.content.Context);
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.List<java.lang.String>);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
@@ -10082,15 +10084,15 @@ package android.content.pm {
  }
  }
  public class ShortcutManager {
  public class ShortcutManager {
    method public boolean addDynamicShortcut(android.content.pm.ShortcutInfo);
    method public boolean addDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public void deleteAllDynamicShortcuts();
    method public void deleteDynamicShortcut(java.lang.String);
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public int getIconMaxDimensions();
    method public int getIconMaxDimensions();
    method public int getMaxDynamicShortcutCount();
    method public int getMaxDynamicShortcutCount();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public long getRateLimitResetTime();
    method public long getRateLimitResetTime();
    method public int getRemainingCallCount();
    method public int getRemainingCallCount();
    method public void removeAllDynamicShortcuts();
    method public void removeDynamicShortcuts(java.util.List<java.lang.String>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
  }
  }
+7 −5
Original line number Original line Diff line number Diff line
@@ -9838,8 +9838,6 @@ package android.content.pm {
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public boolean hasShortcutHostPermission();
    method public boolean hasShortcutHostPermission();
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
@@ -10442,7 +10440,9 @@ package android.content.pm {
  public final class ShortcutInfo implements android.os.Parcelable {
  public final class ShortcutInfo implements android.os.Parcelable {
    method public int describeContents();
    method public int describeContents();
    method public android.content.ComponentName getActivityComponent();
    method public android.content.ComponentName getActivityComponent();
    method public java.util.List<java.lang.String> getCategories();
    method public android.os.PersistableBundle getExtras();
    method public android.os.PersistableBundle getExtras();
    method public int getIconResourceId();
    method public java.lang.String getId();
    method public java.lang.String getId();
    method public android.content.Intent getIntent();
    method public android.content.Intent getIntent();
    method public long getLastChangedTimestamp();
    method public long getLastChangedTimestamp();
@@ -10466,12 +10466,14 @@ package android.content.pm {
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final java.lang.String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
  }
  }
  public static class ShortcutInfo.Builder {
  public static class ShortcutInfo.Builder {
    ctor public ShortcutInfo.Builder(android.content.Context);
    ctor public ShortcutInfo.Builder(android.content.Context);
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.List<java.lang.String>);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
@@ -10482,15 +10484,15 @@ package android.content.pm {
  }
  }
  public class ShortcutManager {
  public class ShortcutManager {
    method public boolean addDynamicShortcut(android.content.pm.ShortcutInfo);
    method public boolean addDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public void deleteAllDynamicShortcuts();
    method public void deleteDynamicShortcut(java.lang.String);
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public int getIconMaxDimensions();
    method public int getIconMaxDimensions();
    method public int getMaxDynamicShortcutCount();
    method public int getMaxDynamicShortcutCount();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public long getRateLimitResetTime();
    method public long getRateLimitResetTime();
    method public int getRemainingCallCount();
    method public int getRemainingCallCount();
    method public void removeAllDynamicShortcuts();
    method public void removeDynamicShortcuts(java.util.List<java.lang.String>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
  }
  }
+7 −5
Original line number Original line Diff line number Diff line
@@ -9510,8 +9510,6 @@ package android.content.pm {
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
    method public boolean hasShortcutHostPermission();
    method public boolean hasShortcutHostPermission();
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
@@ -10053,7 +10051,9 @@ package android.content.pm {
  public final class ShortcutInfo implements android.os.Parcelable {
  public final class ShortcutInfo implements android.os.Parcelable {
    method public int describeContents();
    method public int describeContents();
    method public android.content.ComponentName getActivityComponent();
    method public android.content.ComponentName getActivityComponent();
    method public java.util.List<java.lang.String> getCategories();
    method public android.os.PersistableBundle getExtras();
    method public android.os.PersistableBundle getExtras();
    method public int getIconResourceId();
    method public java.lang.String getId();
    method public java.lang.String getId();
    method public android.content.Intent getIntent();
    method public android.content.Intent getIntent();
    method public long getLastChangedTimestamp();
    method public long getLastChangedTimestamp();
@@ -10077,12 +10077,14 @@ package android.content.pm {
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_HAS_ICON_RES = 4; // 0x4
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_KEY_FIELDS_ONLY = 16; // 0x10
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final int FLAG_PINNED = 2; // 0x2
    field public static final java.lang.String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
  }
  }
  public static class ShortcutInfo.Builder {
  public static class ShortcutInfo.Builder {
    ctor public ShortcutInfo.Builder(android.content.Context);
    ctor public ShortcutInfo.Builder(android.content.Context);
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo build();
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setActivityComponent(android.content.ComponentName);
    method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.List<java.lang.String>);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
    method public android.content.pm.ShortcutInfo.Builder setId(java.lang.String);
@@ -10094,15 +10096,15 @@ package android.content.pm {
  public class ShortcutManager {
  public class ShortcutManager {
    ctor public ShortcutManager(android.content.Context);
    ctor public ShortcutManager(android.content.Context);
    method public boolean addDynamicShortcut(android.content.pm.ShortcutInfo);
    method public boolean addDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public void deleteAllDynamicShortcuts();
    method public void deleteDynamicShortcut(java.lang.String);
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
    method public int getIconMaxDimensions();
    method public int getIconMaxDimensions();
    method public int getMaxDynamicShortcutCount();
    method public int getMaxDynamicShortcutCount();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
    method public long getRateLimitResetTime();
    method public long getRateLimitResetTime();
    method public int getRemainingCallCount();
    method public int getRemainingCallCount();
    method public void removeAllDynamicShortcuts();
    method public void removeDynamicShortcuts(java.util.List<java.lang.String>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
  }
  }
+4 −3
Original line number Original line Diff line number Diff line
@@ -28,11 +28,12 @@ interface IShortcutService {


    ParceledListSlice getDynamicShortcuts(String packageName, int userId);
    ParceledListSlice getDynamicShortcuts(String packageName, int userId);


    boolean addDynamicShortcut(String packageName, in ShortcutInfo shortcutInfo, int userId);
    boolean addDynamicShortcuts(String packageName, in ParceledListSlice shortcutInfoList,
            int userId);


    void deleteDynamicShortcut(String packageName, in String shortcutId, int userId);
    void removeDynamicShortcuts(String packageName, in List shortcutIds, int userId);


    void deleteAllDynamicShortcuts(String packageName, int userId);
    void removeAllDynamicShortcuts(String packageName, int userId);


    ParceledListSlice getPinnedShortcuts(String packageName, int userId);
    ParceledListSlice getPinnedShortcuts(String packageName, int userId);


+10 −28
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@ import android.util.Log;
import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
import java.util.List;
import java.util.List;


@@ -493,43 +494,24 @@ public class LauncherApps {
    }
    }


    /**
    /**
     * Return the icon resource ID, if {@code shortcut} has one
     * @hide kept for testing.
     * (i.e. when {@link ShortcutInfo#hasIconResource()} returns {@code true}).
     *
     * <p>Callers must be allowed to access the shortcut information, as defined in {@link
     * #hasShortcutHostPermission()}.
     *
     * @param shortcut The target shortcut.
     */
     */
    public int getShortcutIconResId(@NonNull ShortcutInfo shortcut) {
    public int getShortcutIconResId(@NonNull ShortcutInfo shortcut) {
        return getShortcutIconResId(shortcut.getPackageName(), shortcut.getId(),
        return shortcut.getIconResourceId();
                shortcut.getUserId());
    }
    }


    /**
    /**
     * Return the icon resource ID, if {@code shortcut} has one
     * @hide kept for testing.
     * (i.e. when {@link ShortcutInfo#hasIconResource()} returns {@code true}).
     *
     * <p>Callers must be allowed to access the shortcut information, as defined in {@link
     * #hasShortcutHostPermission()}.
     *
     * @param packageName The target package name.
     * @param shortcutId The ID of the shortcut to lad rom.
     * @param user The UserHandle of the profile.
     */
     */
    public int getShortcutIconResId(@NonNull String packageName, @NonNull String shortcutId,
    public int getShortcutIconResId(@NonNull String packageName, @NonNull String shortcutId,
            @NonNull UserHandle user) {
            @NonNull UserHandle user) {
        return getShortcutIconResId(packageName, shortcutId, user.getIdentifier());
        final ShortcutQuery q = new ShortcutQuery();
    }
        q.setPackage(packageName);
        q.setShortcutIds(Arrays.asList(shortcutId));
        q.setQueryFlags(ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_PINNED);
        final List<ShortcutInfo> shortcuts = getShortcuts(q, user);


    private int getShortcutIconResId(@NonNull String packageName, @NonNull String shortcutId,
        return shortcuts.size() > 0 ? shortcuts.get(0).getIconResourceId() : 0;
            int userId) {
        try {
            return mService.getShortcutIconResId(mContext.getPackageName(),
                    packageName, shortcutId, userId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    }


    /**
    /**
Loading