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

Commit 2c0ceb7c authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Implement a global maximum on number of shortcuts an app can...

Merge "Merge "Implement a global maximum on number of shortcuts an app can publish" into tm-dev am: 118fcda1 am: cb312928"
parents adf6a849 ba10dac7
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1470,9 +1470,15 @@ class ShortcutPackage extends ShortcutPackageItem {
        }

        // Then make sure none of the activities have more than the max number of shortcuts.
        int total = 0;
        for (int i = counts.size() - 1; i >= 0; i--) {
            service.enforceMaxActivityShortcuts(counts.valueAt(i));
            int count = counts.valueAt(i);
            service.enforceMaxActivityShortcuts(count);
            total += count;
        }

        // Finally make sure that the app doesn't have more than the max number of shortcuts.
        service.enforceMaxAppShortcuts(total);
    }

    /**
+42 −7
Original line number Diff line number Diff line
@@ -180,6 +180,9 @@ public class ShortcutService extends IShortcutService.Stub {
    @VisibleForTesting
    static final int DEFAULT_MAX_SHORTCUTS_PER_ACTIVITY = 15;

    @VisibleForTesting
    static final int DEFAULT_MAX_SHORTCUTS_PER_APP = 60;

    @VisibleForTesting
    static final int DEFAULT_MAX_ICON_DIMENSION_DP = 96;

@@ -256,6 +259,11 @@ public class ShortcutService extends IShortcutService.Stub {
         */
        String KEY_MAX_SHORTCUTS = "max_shortcuts";

        /**
         * Key name for the max dynamic shortcuts per app. (int)
         */
        String KEY_MAX_SHORTCUTS_PER_APP = "max_shortcuts_per_app";

        /**
         * Key name for icon compression quality, 0-100.
         */
@@ -328,10 +336,15 @@ public class ShortcutService extends IShortcutService.Stub {
    private final SparseArray<ShortcutNonPersistentUser> mShortcutNonPersistentUsers =
            new SparseArray<>();

    /**
     * Max number of dynamic + manifest shortcuts that each activity can have at a time.
     */
    private int mMaxShortcutsPerActivity;

    /**
     * Max number of dynamic + manifest shortcuts that each application can have at a time.
     */
    private int mMaxShortcuts;
    private int mMaxShortcutsPerApp;

    /**
     * Max number of updating API calls that each application can make during the interval.
@@ -804,9 +817,12 @@ public class ShortcutService extends IShortcutService.Stub {
        mMaxUpdatesPerInterval = Math.max(0, (int) parser.getLong(
                ConfigConstants.KEY_MAX_UPDATES_PER_INTERVAL, DEFAULT_MAX_UPDATES_PER_INTERVAL));

        mMaxShortcuts = Math.max(0, (int) parser.getLong(
        mMaxShortcutsPerActivity = Math.max(0, (int) parser.getLong(
                ConfigConstants.KEY_MAX_SHORTCUTS, DEFAULT_MAX_SHORTCUTS_PER_ACTIVITY));

        mMaxShortcutsPerApp = Math.max(0, (int) parser.getLong(
                ConfigConstants.KEY_MAX_SHORTCUTS_PER_APP, DEFAULT_MAX_SHORTCUTS_PER_APP));

        final int iconDimensionDp = Math.max(1, injectIsLowRamDevice()
                ? (int) parser.getLong(
                ConfigConstants.KEY_MAX_ICON_DIMENSION_DP_LOWRAM,
@@ -1746,16 +1762,33 @@ public class ShortcutService extends IShortcutService.Stub {
     *                                  {@link #getMaxActivityShortcuts()}.
     */
    void enforceMaxActivityShortcuts(int numShortcuts) {
        if (numShortcuts > mMaxShortcuts) {
        if (numShortcuts > mMaxShortcutsPerActivity) {
            throw new IllegalArgumentException("Max number of dynamic shortcuts exceeded");
        }
    }

    /**
     * @throws IllegalArgumentException if {@code numShortcuts} is bigger than
     *                                  {@link #getMaxAppShortcuts()}.
     */
    void enforceMaxAppShortcuts(int numShortcuts) {
        if (numShortcuts > mMaxShortcutsPerApp) {
            throw new IllegalArgumentException("Max number of dynamic shortcuts per app exceeded");
        }
    }

    /**
     * Return the max number of dynamic + manifest shortcuts for each launcher icon.
     */
    int getMaxActivityShortcuts() {
        return mMaxShortcuts;
        return mMaxShortcutsPerActivity;
    }

    /**
     * Return the max number of dynamic + manifest shortcuts for each launcher icon.
     */
    int getMaxAppShortcuts() {
        return mMaxShortcutsPerApp;
    }

    /**
@@ -2188,6 +2221,8 @@ public class ShortcutService extends IShortcutService.Stub {
            ps.ensureNotImmutable(shortcut.getId(), /*ignoreInvisible=*/ true);
            fillInDefaultActivity(Arrays.asList(shortcut));

            enforceMaxAppShortcuts(ps.getShortcutCount());

            if (!shortcut.hasRank()) {
                shortcut.setRank(0);
            }
@@ -2575,7 +2610,7 @@ public class ShortcutService extends IShortcutService.Stub {
            throws RemoteException {
        verifyCaller(packageName, userId);

        return mMaxShortcuts;
        return mMaxShortcutsPerActivity;
    }

    @Override
@@ -4724,7 +4759,7 @@ public class ShortcutService extends IShortcutService.Stub {
                pw.print("    maxUpdatesPerInterval: ");
                pw.println(mMaxUpdatesPerInterval);
                pw.print("    maxShortcutsPerActivity: ");
                pw.println(mMaxShortcuts);
                pw.println(mMaxShortcutsPerActivity);
                pw.println();

                mStatLogger.dump(pw, "  ");
@@ -5211,7 +5246,7 @@ public class ShortcutService extends IShortcutService.Stub {

    @VisibleForTesting
    int getMaxShortcutsForTest() {
        return mMaxShortcuts;
        return mMaxShortcutsPerActivity;
    }

    @VisibleForTesting