Merge "Truncate ShortcutInfo Id" into tm-dev am: c3b422079b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22898060

Change-Id: I5b70669897b9e6309648e47126792937e54ae7b1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
András Kurucz
2023-05-03 13:28:28 +00:00
committed by Automerger Merge Worker
2 changed files with 26 additions and 3 deletions

View File

@@ -283,6 +283,12 @@ public final class ShortcutInfo implements Parcelable {
*/ */
public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; 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 */ /** @hide */
@IntDef(prefix = { "DISABLED_REASON_" }, value = { @IntDef(prefix = { "DISABLED_REASON_" }, value = {
DISABLED_REASON_NOT_DISABLED, DISABLED_REASON_NOT_DISABLED,
@@ -475,8 +481,7 @@ public final class ShortcutInfo implements Parcelable {
private ShortcutInfo(Builder b) { private ShortcutInfo(Builder b) {
mUserId = b.mContext.getUserId(); mUserId = b.mContext.getUserId();
mId = getSafeId(Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided"));
mId = Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided");
// Note we can't do other null checks here because SM.updateShortcuts() takes partial // Note we can't do other null checks here because SM.updateShortcuts() takes partial
// information. // information.
@@ -582,6 +587,14 @@ public final class ShortcutInfo implements Parcelable {
return ret; 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. * Throws if any of the mandatory fields is not set.
* *
@@ -2336,7 +2349,8 @@ public final class ShortcutInfo implements Parcelable {
final ClassLoader cl = getClass().getClassLoader(); final ClassLoader cl = getClass().getClassLoader();
mUserId = source.readInt(); mUserId = source.readInt();
mId = source.readString8(); mId = getSafeId(Preconditions.checkStringNotEmpty(source.readString8(),
"Shortcut ID must be provided"));
mPackageName = source.readString8(); mPackageName = source.readString8();
mActivity = source.readParcelable(cl, android.content.ComponentName.class); mActivity = source.readParcelable(cl, android.content.ComponentName.class);
mFlags = source.readInt(); mFlags = source.readInt();

View File

@@ -228,6 +228,15 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest {
}); });
} }
public void testShortcutIdTruncated() {
ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(),
"s".repeat(Short.MAX_VALUE)).build();
assertTrue(
"id must be truncated to MAX_ID_LENGTH",
si.getId().length() <= ShortcutInfo.MAX_ID_LENGTH);
}
public void testShortcutInfoParcel() { public void testShortcutInfoParcel() {
setCaller(CALLING_PACKAGE_1, USER_10); setCaller(CALLING_PACKAGE_1, USER_10);
ShortcutInfo si = parceled(new ShortcutInfo.Builder(mClientContext) ShortcutInfo si = parceled(new ShortcutInfo.Builder(mClientContext)