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

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

Add UserHandle to ShortcutInfo, and simplify LauncherApps APIs.

- Also fixes the bitmap recycle bug in the service.

Fixes 28053541

Change-Id: I2b244feda0f85c60e2c15af427fcad95ad5e6da5
parent 8eb8a32f
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -9460,9 +9460,10 @@ package android.content.pm {
  public class LauncherApps {
  public class LauncherApps {
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    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, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcutInfo(java.lang.String, java.util.List<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);
@@ -9474,6 +9475,7 @@ package android.content.pm {
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(android.content.pm.ShortcutInfo, android.graphics.Rect, android.os.Bundle);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
  }
  }
@@ -9495,6 +9497,7 @@ package android.content.pm {
    method public void setChangedSince(long);
    method public void setChangedSince(long);
    method public void setPackage(java.lang.String);
    method public void setPackage(java.lang.String);
    method public void setQueryFlags(int);
    method public void setQueryFlags(int);
    method public void setShortcutIds(java.util.List<java.lang.String>);
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_PINNED = 2; // 0x2
    field public static final int FLAG_GET_PINNED = 2; // 0x2
@@ -10008,6 +10011,7 @@ package android.content.pm {
    method public java.lang.String getPackageName();
    method public java.lang.String getPackageName();
    method public java.lang.String getText();
    method public java.lang.String getText();
    method public java.lang.String getTitle();
    method public java.lang.String getTitle();
    method public android.os.UserHandle getUserHandle();
    method public int getWeight();
    method public int getWeight();
    method public boolean hasIconFile();
    method public boolean hasIconFile();
    method public boolean hasIconResource();
    method public boolean hasIconResource();
+7 −3
Original line number Original line Diff line number Diff line
@@ -9797,9 +9797,10 @@ package android.content.pm {
  public class LauncherApps {
  public class LauncherApps {
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    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, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcutInfo(java.lang.String, java.util.List<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);
@@ -9811,6 +9812,7 @@ package android.content.pm {
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(android.content.pm.ShortcutInfo, android.graphics.Rect, android.os.Bundle);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
  }
  }
@@ -9832,6 +9834,7 @@ package android.content.pm {
    method public void setChangedSince(long);
    method public void setChangedSince(long);
    method public void setPackage(java.lang.String);
    method public void setPackage(java.lang.String);
    method public void setQueryFlags(int);
    method public void setQueryFlags(int);
    method public void setShortcutIds(java.util.List<java.lang.String>);
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_PINNED = 2; // 0x2
    field public static final int FLAG_GET_PINNED = 2; // 0x2
@@ -10407,6 +10410,7 @@ package android.content.pm {
    method public java.lang.String getPackageName();
    method public java.lang.String getPackageName();
    method public java.lang.String getText();
    method public java.lang.String getText();
    method public java.lang.String getTitle();
    method public java.lang.String getTitle();
    method public android.os.UserHandle getUserHandle();
    method public int getWeight();
    method public int getWeight();
    method public boolean hasIconFile();
    method public boolean hasIconFile();
    method public boolean hasIconResource();
    method public boolean hasIconResource();
+7 −3
Original line number Original line Diff line number Diff line
@@ -9469,9 +9469,10 @@ package android.content.pm {
  public class LauncherApps {
  public class LauncherApps {
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
    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, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(android.content.pm.ShortcutInfo);
    method public int getShortcutIconResId(android.content.pm.ShortcutInfo, android.os.UserHandle);
    method public android.os.ParcelFileDescriptor getShortcutIconFd(java.lang.String, java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ShortcutInfo> getShortcutInfo(java.lang.String, java.util.List<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);
@@ -9483,6 +9484,7 @@ package android.content.pm {
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
    method public boolean startShortcut(android.content.pm.ShortcutInfo, android.graphics.Rect, android.os.Bundle);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
  }
  }
@@ -9504,6 +9506,7 @@ package android.content.pm {
    method public void setChangedSince(long);
    method public void setChangedSince(long);
    method public void setPackage(java.lang.String);
    method public void setPackage(java.lang.String);
    method public void setQueryFlags(int);
    method public void setQueryFlags(int);
    method public void setShortcutIds(java.util.List<java.lang.String>);
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_DYNAMIC = 1; // 0x1
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
    field public static final int FLAG_GET_PINNED = 2; // 0x2
    field public static final int FLAG_GET_PINNED = 2; // 0x2
@@ -10018,6 +10021,7 @@ package android.content.pm {
    method public java.lang.String getPackageName();
    method public java.lang.String getPackageName();
    method public java.lang.String getText();
    method public java.lang.String getText();
    method public java.lang.String getTitle();
    method public java.lang.String getTitle();
    method public android.os.UserHandle getUserHandle();
    method public int getWeight();
    method public int getWeight();
    method public boolean hasIconFile();
    method public boolean hasIconFile();
    method public boolean hasIconResource();
    method public boolean hasIconResource();
+6 −7
Original line number Original line Diff line number Diff line
@@ -47,17 +47,16 @@ interface ILauncherApps {
    ApplicationInfo getApplicationInfo(String packageName, int flags, in UserHandle user);
    ApplicationInfo getApplicationInfo(String packageName, int flags, in UserHandle user);


    ParceledListSlice getShortcuts(String callingPackage, long changedSince, String packageName,
    ParceledListSlice getShortcuts(String callingPackage, long changedSince, String packageName,
            in ComponentName componentName, int flags, in UserHandle user);
            in List shortcutIds, in ComponentName componentName, int flags, in UserHandle user);
    ParceledListSlice getShortcutInfo(String callingPackage, String packageName, in List<String> ids,
            in UserHandle user);
    void pinShortcuts(String callingPackage, String packageName, in List<String> shortcutIds,
    void pinShortcuts(String callingPackage, String packageName, in List<String> shortcutIds,
            in UserHandle user);
            in UserHandle user);
    boolean startShortcut(String callingPackage, String packageName, String id,
    boolean startShortcut(String callingPackage, String packageName, String id,
            in Rect sourceBounds, in Bundle startActivityOptions, in UserHandle user);
            in Rect sourceBounds, in Bundle startActivityOptions, int userId);


    int getShortcutIconResId(String callingPackage, in ShortcutInfo shortcut, in UserHandle user);
    int getShortcutIconResId(String callingPackage, String packageName, String id,
    ParcelFileDescriptor getShortcutIconFd(String callingPackage, in ShortcutInfo shortcut,
            int userId);
            in UserHandle user);
    ParcelFileDescriptor getShortcutIconFd(String callingPackage, String packageName, String id,
            int userId);


    boolean hasShortcutHostPermission(String callingPackage);
    boolean hasShortcutHostPermission(String callingPackage);
}
}
+94 −23
Original line number Original line Diff line number Diff line
@@ -204,6 +204,9 @@ public class LauncherApps {
        @Nullable
        @Nullable
        String mPackage;
        String mPackage;


        @Nullable
        List<String> mShortcutIds;

        @Nullable
        @Nullable
        ComponentName mActivity;
        ComponentName mActivity;


@@ -228,6 +231,14 @@ public class LauncherApps {
            mPackage = packageName;
            mPackage = packageName;
        }
        }


        /**
         * If non-null, return only the specified shortcuts by ID.  When setting this field,
         * a packange name must also be set with {@link #setPackage}.
         */
        public void setShortcutIds(@Nullable List<String> shortcutIds) {
            mShortcutIds = shortcutIds;
        }

        /**
        /**
         * If non-null, returns only shortcuts associated with the activity.
         * If non-null, returns only shortcuts associated with the activity.
         */
         */
@@ -429,7 +440,8 @@ public class LauncherApps {
            @NonNull UserHandle user) {
            @NonNull UserHandle user) {
        try {
        try {
            return mService.getShortcuts(mContext.getPackageName(),
            return mService.getShortcuts(mContext.getPackageName(),
                    query.mChangedSince, query.mPackage, query.mActivity, query.mQueryFlags, user)
                    query.mChangedSince, query.mPackage, query.mShortcutIds, query.mActivity,
                    query.mQueryFlags, user)
                    .getList();
                    .getList();
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
@@ -437,28 +449,17 @@ public class LauncherApps {
    }
    }


    /**
    /**
     * Returns {@link ShortcutInfo}s with the given IDs from a package.
     * @hide // No longer used.  Use getShortcuts() instead.  Kept for unit tests.
     *
     * <p>Callers must be allowed to access the shortcut information, as defined in {@link
     * #hasShortcutHostPermission()}.
     *
     * @param packageName The target package.
     * @param ids IDs of the shortcuts to retrieve.
     * @param user The UserHandle of the profile.
     *
     * @return list of {@link ShortcutInfo} associated with the package.
     */
     */
    @Nullable
    @Nullable
    public List<ShortcutInfo> getShortcutInfo(@NonNull String packageName,
    public List<ShortcutInfo> getShortcutInfo(@NonNull String packageName,
            @NonNull List<String> ids, @NonNull UserHandle user) {
            @NonNull List<String> ids, @NonNull UserHandle user) {
        try {
        final ShortcutQuery q = new ShortcutQuery();
            return mService.getShortcutInfo(mContext.getPackageName(), packageName, ids, user)
        q.setPackage(packageName);
                    .getList();
        q.setShortcutIds(ids);
        } catch (RemoteException e) {
        q.setQueryFlags(ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_PINNED);
            throw e.rethrowFromSystemServer();
        return getShortcuts(q, user);
    }
    }
    }



    /**
    /**
     * Pin shortcuts on a package.
     * Pin shortcuts on a package.
@@ -490,11 +491,33 @@ public class LauncherApps {
     * #hasShortcutHostPermission()}.
     * #hasShortcutHostPermission()}.
     *
     *
     * @param shortcut The target shortcut.
     * @param shortcut The target shortcut.
     */
    public int getShortcutIconResId(@NonNull ShortcutInfo shortcut) {
        return getShortcutIconResId(shortcut.getPackageName(), shortcut.getId(),
                shortcut.getUserId());
    }

    /**
     * Return the icon resource ID, if {@code shortcut} has one
     * (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.
     * @param user The UserHandle of the profile.
     */
     */
    public int getShortcutIconResId(@NonNull ShortcutInfo shortcut, @NonNull UserHandle user) {
    public int getShortcutIconResId(@NonNull String packageName, @NonNull String shortcutId,
            @NonNull UserHandle user) {
        return getShortcutIconResId(packageName, shortcutId, user.getIdentifier());
    }

    private int getShortcutIconResId(@NonNull String packageName, @NonNull String shortcutId,
            int userId) {
        try {
        try {
            return mService.getShortcutIconResId(mContext.getPackageName(), shortcut, user);
            return mService.getShortcutIconResId(mContext.getPackageName(),
                    packageName, shortcutId, userId);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
@@ -508,12 +531,34 @@ public class LauncherApps {
     * #hasShortcutHostPermission()}.
     * #hasShortcutHostPermission()}.
     *
     *
     * @param shortcut The target shortcut.
     * @param shortcut The target shortcut.
     */
    public ParcelFileDescriptor getShortcutIconFd(
            @NonNull ShortcutInfo shortcut) {
        return getShortcutIconFd(shortcut.getPackageName(), shortcut.getId(),
                shortcut.getUserId());
    }

    /**
     * Return the icon as {@link ParcelFileDescriptor}, when it's stored as a file
     * (i.e. when {@link ShortcutInfo#hasIconFile()} 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.
     * @param user The UserHandle of the profile.
     */
     */
    public ParcelFileDescriptor getShortcutIconFd(
    public ParcelFileDescriptor getShortcutIconFd(
            @NonNull ShortcutInfo shortcut, @NonNull UserHandle user) {
            @NonNull String packageName, @NonNull String shortcutId, @NonNull UserHandle user) {
        return getShortcutIconFd(packageName, shortcutId, user.getIdentifier());
    }

    private ParcelFileDescriptor getShortcutIconFd(
            @NonNull String packageName, @NonNull String shortcutId, int userId) {
        try {
        try {
            return mService.getShortcutIconFd(mContext.getPackageName(), shortcut, user);
            return mService.getShortcutIconFd(mContext.getPackageName(),
                    packageName, shortcutId, userId);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
@@ -536,9 +581,35 @@ public class LauncherApps {
    public boolean startShortcut(@NonNull String packageName, @NonNull String shortcutId,
    public boolean startShortcut(@NonNull String packageName, @NonNull String shortcutId,
            @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions,
            @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions,
            @NonNull UserHandle user) {
            @NonNull UserHandle user) {
        return startShortcut(packageName, shortcutId, sourceBounds, startActivityOptions,
                user.getIdentifier());
    }

    /**
     * Launches a shortcut.
     *
     * <p>Callers must be allowed to access the shortcut information, as defined in {@link
     * #hasShortcutHostPermission()}.
     *
     * @param shortcut The target shortcut.
     * @param sourceBounds The Rect containing the source bounds of the clicked icon.
     * @param startActivityOptions Options to pass to startActivity.
     * @return {@code false} when the shortcut is no longer valid (e.g. the creator application
     *   has been uninstalled). {@code true} when the shortcut is still valid.
     */
    public boolean startShortcut(@NonNull ShortcutInfo shortcut,
            @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions) {
        return startShortcut(shortcut.getPackageName(), shortcut.getId(),
                sourceBounds, startActivityOptions,
                shortcut.getUserId());
    }

    private boolean startShortcut(@NonNull String packageName, @NonNull String shortcutId,
            @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions,
            int userId) {
        try {
        try {
            return mService.startShortcut(mContext.getPackageName(), packageName, shortcutId,
            return mService.startShortcut(mContext.getPackageName(), packageName, shortcutId,
                    sourceBounds, startActivityOptions, user);
                    sourceBounds, startActivityOptions, userId);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
Loading