Loading core/java/android/content/pm/ShortcutInfo.java +17 −3 Original line number Diff line number Diff line Loading @@ -261,6 +261,12 @@ public final class ShortcutInfo implements Parcelable { */ public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; /** * The maximum length of Shortcut ID. IDs will be truncated at this limit. * @hide */ public static final int MAX_ID_LENGTH = 1000; /** @hide */ @IntDef(prefix = { "DISABLED_REASON_" }, value = { DISABLED_REASON_NOT_DISABLED, Loading Loading @@ -436,8 +442,7 @@ public final class ShortcutInfo implements Parcelable { private ShortcutInfo(Builder b) { mUserId = b.mContext.getUserId(); mId = Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided"); mId = getSafeId(Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided")); // Note we can't do other null checks here because SM.updateShortcuts() takes partial // information. Loading Loading @@ -539,6 +544,14 @@ public final class ShortcutInfo implements Parcelable { return ret; } @NonNull private static String getSafeId(@NonNull String id) { if (id.length() > MAX_ID_LENGTH) { return id.substring(0, MAX_ID_LENGTH); } return id; } /** * Throws if any of the mandatory fields is not set. * Loading Loading @@ -2090,7 +2103,8 @@ public final class ShortcutInfo implements Parcelable { final ClassLoader cl = getClass().getClassLoader(); mUserId = source.readInt(); mId = source.readString8(); mId = getSafeId(Preconditions.checkStringNotEmpty(source.readString8(), "Shortcut ID must be provided")); mPackageName = source.readString8(); mActivity = source.readParcelable(cl); mFlags = source.readInt(); Loading services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +10 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Collections; import java.util.Locale; /** Loading Loading @@ -223,6 +224,15 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { }); } public void testShortcutIdTruncated() { ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), String.join("", Collections.nCopies(Short.MAX_VALUE, "s"))).build(); assertTrue( "id must be truncated to MAX_ID_LENGTH", si.getId().length() <= ShortcutInfo.MAX_ID_LENGTH); } public void testShortcutInfoParcel() { setCaller(CALLING_PACKAGE_1, USER_10); ShortcutInfo si = parceled(new ShortcutInfo.Builder(mClientContext) Loading Loading
core/java/android/content/pm/ShortcutInfo.java +17 −3 Original line number Diff line number Diff line Loading @@ -261,6 +261,12 @@ public final class ShortcutInfo implements Parcelable { */ public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; /** * The maximum length of Shortcut ID. IDs will be truncated at this limit. * @hide */ public static final int MAX_ID_LENGTH = 1000; /** @hide */ @IntDef(prefix = { "DISABLED_REASON_" }, value = { DISABLED_REASON_NOT_DISABLED, Loading Loading @@ -436,8 +442,7 @@ public final class ShortcutInfo implements Parcelable { private ShortcutInfo(Builder b) { mUserId = b.mContext.getUserId(); mId = Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided"); mId = getSafeId(Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided")); // Note we can't do other null checks here because SM.updateShortcuts() takes partial // information. Loading Loading @@ -539,6 +544,14 @@ public final class ShortcutInfo implements Parcelable { return ret; } @NonNull private static String getSafeId(@NonNull String id) { if (id.length() > MAX_ID_LENGTH) { return id.substring(0, MAX_ID_LENGTH); } return id; } /** * Throws if any of the mandatory fields is not set. * Loading Loading @@ -2090,7 +2103,8 @@ public final class ShortcutInfo implements Parcelable { final ClassLoader cl = getClass().getClassLoader(); mUserId = source.readInt(); mId = source.readString8(); mId = getSafeId(Preconditions.checkStringNotEmpty(source.readString8(), "Shortcut ID must be provided")); mPackageName = source.readString8(); mActivity = source.readParcelable(cl); mFlags = source.readInt(); Loading
services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +10 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Collections; import java.util.Locale; /** Loading Loading @@ -223,6 +224,15 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { }); } public void testShortcutIdTruncated() { ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), String.join("", Collections.nCopies(Short.MAX_VALUE, "s"))).build(); assertTrue( "id must be truncated to MAX_ID_LENGTH", si.getId().length() <= ShortcutInfo.MAX_ID_LENGTH); } public void testShortcutInfoParcel() { setCaller(CALLING_PACKAGE_1, USER_10); ShortcutInfo si = parceled(new ShortcutInfo.Builder(mClientContext) Loading