Merge "Rename PromptContentListItem to PromptContentItem." into main
diff --git a/core/api/current.txt b/core/api/current.txt
index 0210fc3b..6fe0769d 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -18753,21 +18753,21 @@
     method @Nullable public java.security.Signature getSignature();
   }
 
-  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public interface PromptContentListItem {
+  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public interface PromptContentItem {
   }
 
-  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public final class PromptContentListItemBulletedText implements android.os.Parcelable android.hardware.biometrics.PromptContentListItem {
-    ctor public PromptContentListItemBulletedText(@NonNull CharSequence);
+  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public final class PromptContentItemBulletedText implements android.os.Parcelable android.hardware.biometrics.PromptContentItem {
+    ctor public PromptContentItemBulletedText(@NonNull CharSequence);
     method public int describeContents();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.biometrics.PromptContentListItemBulletedText> CREATOR;
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.biometrics.PromptContentItemBulletedText> CREATOR;
   }
 
-  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public final class PromptContentListItemPlainText implements android.os.Parcelable android.hardware.biometrics.PromptContentListItem {
-    ctor public PromptContentListItemPlainText(@NonNull CharSequence);
+  @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public final class PromptContentItemPlainText implements android.os.Parcelable android.hardware.biometrics.PromptContentItem {
+    ctor public PromptContentItemPlainText(@NonNull CharSequence);
     method public int describeContents();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.biometrics.PromptContentListItemPlainText> CREATOR;
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.biometrics.PromptContentItemPlainText> CREATOR;
   }
 
   @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public interface PromptContentView {
@@ -18776,7 +18776,7 @@
   @FlaggedApi("android.hardware.biometrics.custom_biometric_prompt") public final class PromptVerticalListContentView implements android.os.Parcelable android.hardware.biometrics.PromptContentView {
     method public int describeContents();
     method @Nullable public CharSequence getDescription();
-    method @NonNull public java.util.List<android.hardware.biometrics.PromptContentListItem> getListItems();
+    method @NonNull public java.util.List<android.hardware.biometrics.PromptContentItem> getListItems();
     method public static int getMaxEachItemCharacterNumber();
     method public static int getMaxItemCount();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
@@ -18785,7 +18785,8 @@
 
   public static final class PromptVerticalListContentView.Builder {
     ctor public PromptVerticalListContentView.Builder();
-    method @NonNull public android.hardware.biometrics.PromptVerticalListContentView.Builder addListItem(@NonNull android.hardware.biometrics.PromptContentListItem);
+    method @NonNull public android.hardware.biometrics.PromptVerticalListContentView.Builder addListItem(@NonNull android.hardware.biometrics.PromptContentItem);
+    method @NonNull public android.hardware.biometrics.PromptVerticalListContentView.Builder addListItem(@NonNull android.hardware.biometrics.PromptContentItem, int);
     method @NonNull public android.hardware.biometrics.PromptVerticalListContentView build();
     method @NonNull public android.hardware.biometrics.PromptVerticalListContentView.Builder setDescription(@NonNull CharSequence);
   }
diff --git a/core/java/android/hardware/biometrics/PromptContentListItem.java b/core/java/android/hardware/biometrics/PromptContentItem.java
similarity index 88%
rename from core/java/android/hardware/biometrics/PromptContentListItem.java
rename to core/java/android/hardware/biometrics/PromptContentItem.java
index fa3783d..c47b37a 100644
--- a/core/java/android/hardware/biometrics/PromptContentListItem.java
+++ b/core/java/android/hardware/biometrics/PromptContentItem.java
@@ -21,9 +21,9 @@
 import android.annotation.FlaggedApi;
 
 /**
- * A list item shown on {@link PromptVerticalListContentView}.
+ * An item shown on {@link PromptContentView}.
  */
 @FlaggedApi(FLAG_CUSTOM_BIOMETRIC_PROMPT)
-public interface PromptContentListItem {
+public interface PromptContentItem {
 }
 
diff --git a/core/java/android/hardware/biometrics/PromptContentListItemBulletedText.java b/core/java/android/hardware/biometrics/PromptContentItemBulletedText.java
similarity index 75%
rename from core/java/android/hardware/biometrics/PromptContentListItemBulletedText.java
rename to core/java/android/hardware/biometrics/PromptContentItemBulletedText.java
index c31f8a6..c5e5a80 100644
--- a/core/java/android/hardware/biometrics/PromptContentListItemBulletedText.java
+++ b/core/java/android/hardware/biometrics/PromptContentItemBulletedText.java
@@ -27,7 +27,7 @@
  * A list item with bulleted text shown on {@link PromptVerticalListContentView}.
  */
 @FlaggedApi(FLAG_CUSTOM_BIOMETRIC_PROMPT)
-public final class PromptContentListItemBulletedText implements PromptContentListItemParcelable {
+public final class PromptContentItemBulletedText implements PromptContentItemParcelable {
     private final CharSequence mText;
 
     /**
@@ -35,7 +35,7 @@
      *
      * @param text The text of this list item.
      */
-    public PromptContentListItemBulletedText(@NonNull CharSequence text) {
+    public PromptContentItemBulletedText(@NonNull CharSequence text) {
         mText = text;
     }
 
@@ -67,15 +67,15 @@
      * @see Parcelable.Creator
      */
     @NonNull
-    public static final Creator<PromptContentListItemBulletedText> CREATOR = new Creator<>() {
+    public static final Creator<PromptContentItemBulletedText> CREATOR = new Creator<>() {
         @Override
-        public PromptContentListItemBulletedText createFromParcel(Parcel in) {
-            return new PromptContentListItemBulletedText(in.readCharSequence());
+        public PromptContentItemBulletedText createFromParcel(Parcel in) {
+            return new PromptContentItemBulletedText(in.readCharSequence());
         }
 
         @Override
-        public PromptContentListItemBulletedText[] newArray(int size) {
-            return new PromptContentListItemBulletedText[size];
+        public PromptContentItemBulletedText[] newArray(int size) {
+            return new PromptContentItemBulletedText[size];
         }
     };
 }
diff --git a/core/java/android/hardware/biometrics/PromptContentListItemParcelable.java b/core/java/android/hardware/biometrics/PromptContentItemParcelable.java
similarity index 79%
rename from core/java/android/hardware/biometrics/PromptContentListItemParcelable.java
rename to core/java/android/hardware/biometrics/PromptContentItemParcelable.java
index 15271f0..668912cf 100644
--- a/core/java/android/hardware/biometrics/PromptContentListItemParcelable.java
+++ b/core/java/android/hardware/biometrics/PromptContentItemParcelable.java
@@ -22,9 +22,9 @@
 import android.os.Parcelable;
 
 /**
- * A parcelable {@link PromptContentListItem}.
+ * A parcelable {@link PromptContentItem}.
  */
 @FlaggedApi(FLAG_CUSTOM_BIOMETRIC_PROMPT)
-sealed interface PromptContentListItemParcelable extends PromptContentListItem, Parcelable
-        permits PromptContentListItemPlainText, PromptContentListItemBulletedText {
+sealed interface PromptContentItemParcelable extends PromptContentItem, Parcelable
+        permits PromptContentItemPlainText, PromptContentItemBulletedText {
 }
diff --git a/core/java/android/hardware/biometrics/PromptContentListItemPlainText.java b/core/java/android/hardware/biometrics/PromptContentItemPlainText.java
similarity index 76%
rename from core/java/android/hardware/biometrics/PromptContentListItemPlainText.java
rename to core/java/android/hardware/biometrics/PromptContentItemPlainText.java
index d72a758..6434c59 100644
--- a/core/java/android/hardware/biometrics/PromptContentListItemPlainText.java
+++ b/core/java/android/hardware/biometrics/PromptContentItemPlainText.java
@@ -27,7 +27,7 @@
  * A list item with plain text shown on {@link PromptVerticalListContentView}.
  */
 @FlaggedApi(FLAG_CUSTOM_BIOMETRIC_PROMPT)
-public final class PromptContentListItemPlainText implements PromptContentListItemParcelable {
+public final class PromptContentItemPlainText implements PromptContentItemParcelable {
     private final CharSequence mText;
 
     /**
@@ -35,7 +35,7 @@
      *
      * @param text The text of this list item.
      */
-    public PromptContentListItemPlainText(@NonNull CharSequence text) {
+    public PromptContentItemPlainText(@NonNull CharSequence text) {
         mText = text;
     }
 
@@ -67,15 +67,15 @@
      * @see Parcelable.Creator
      */
     @NonNull
-    public static final Creator<PromptContentListItemPlainText> CREATOR = new Creator<>() {
+    public static final Creator<PromptContentItemPlainText> CREATOR = new Creator<>() {
         @Override
-        public PromptContentListItemPlainText createFromParcel(Parcel in) {
-            return new PromptContentListItemPlainText(in.readCharSequence());
+        public PromptContentItemPlainText createFromParcel(Parcel in) {
+            return new PromptContentItemPlainText(in.readCharSequence());
         }
 
         @Override
-        public PromptContentListItemPlainText[] newArray(int size) {
-            return new PromptContentListItemPlainText[size];
+        public PromptContentItemPlainText[] newArray(int size) {
+            return new PromptContentItemPlainText[size];
         }
     };
 }
diff --git a/core/java/android/hardware/biometrics/PromptVerticalListContentView.java b/core/java/android/hardware/biometrics/PromptVerticalListContentView.java
index f3cb189..f3e6290 100644
--- a/core/java/android/hardware/biometrics/PromptVerticalListContentView.java
+++ b/core/java/android/hardware/biometrics/PromptVerticalListContentView.java
@@ -40,9 +40,9 @@
  *     .setSubTitle(...)
  *     .setContentView(new PromptVerticalListContentView.Builder()
  *         .setDescription("test description")
- *         .addListItem(new PromptContentListItemPlainText("test item 1"))
- *         .addListItem(new PromptContentListItemPlainText("test item 2"))
- *         .addListItem(new PromptContentListItemBulletedText("test item 3"))
+ *         .addListItem(new PromptContentItemPlainText("test item 1"))
+ *         .addListItem(new PromptContentItemPlainText("test item 2"))
+ *         .addListItem(new PromptContentItemBulletedText("test item 3"))
  *         .build())
  *     .build();
  * </pre>
@@ -51,11 +51,11 @@
 public final class PromptVerticalListContentView implements PromptContentViewParcelable {
     private static final int MAX_ITEM_NUMBER = 20;
     private static final int MAX_EACH_ITEM_CHARACTER_NUMBER = 640;
-    private final List<PromptContentListItemParcelable> mContentList;
+    private final List<PromptContentItemParcelable> mContentList;
     private final CharSequence mDescription;
 
     private PromptVerticalListContentView(
-            @NonNull List<PromptContentListItemParcelable> contentList,
+            @NonNull List<PromptContentItemParcelable> contentList,
             @NonNull CharSequence description) {
         mContentList = contentList;
         mDescription = description;
@@ -63,8 +63,8 @@
 
     private PromptVerticalListContentView(Parcel in) {
         mContentList = in.readArrayList(
-                PromptContentListItemParcelable.class.getClassLoader(),
-                PromptContentListItemParcelable.class);
+                PromptContentItemParcelable.class.getClassLoader(),
+                PromptContentItemParcelable.class);
         mDescription = in.readCharSequence();
     }
 
@@ -94,13 +94,13 @@
     }
 
     /**
-     * Gets the list of ListItem on the content view, as set by
-     * {@link PromptVerticalListContentView.Builder#addListItem(PromptContentListItem)}.
+     * Gets the list of items on the content view, as set by
+     * {@link PromptVerticalListContentView.Builder#addListItem(PromptContentItem)}.
      *
      * @return The item list on the content view.
      */
     @NonNull
-    public List<PromptContentListItem> getListItems() {
+    public List<PromptContentItem> getListItems() {
         return new ArrayList<>(mContentList);
     }
 
@@ -142,7 +142,7 @@
      * A builder that collects arguments to be shown on the vertical list view.
      */
     public static final class Builder {
-        private final List<PromptContentListItemParcelable> mContentList = new ArrayList<>();
+        private final List<PromptContentItemParcelable> mContentList = new ArrayList<>();
         private CharSequence mDescription;
 
         /**
@@ -159,28 +159,50 @@
 
         /**
          * Optional: Adds a list item in the current row. Maximum {@value MAX_ITEM_NUMBER} items in
-         * total.
+         * total. The maximum length for each item is {@value MAX_EACH_ITEM_CHARACTER_NUMBER}
+         * characters.
          *
          * @param listItem The list item view to display
          * @return This builder.
          */
         @NonNull
-        public Builder addListItem(@NonNull PromptContentListItem listItem) {
+        public Builder addListItem(@NonNull PromptContentItem listItem) {
             if (doesListItemExceedsCharLimit(listItem)) {
                 throw new IllegalStateException(
                         "The character number of list item exceeds "
                                 + MAX_EACH_ITEM_CHARACTER_NUMBER);
             }
-            mContentList.add((PromptContentListItemParcelable) listItem);
+            mContentList.add((PromptContentItemParcelable) listItem);
             return this;
         }
 
-        private boolean doesListItemExceedsCharLimit(PromptContentListItem listItem) {
-            if (listItem instanceof PromptContentListItemPlainText) {
-                return ((PromptContentListItemPlainText) listItem).getText().length()
+
+        /**
+         * Optional: Adds a list item in the current row. Maximum {@value MAX_ITEM_NUMBER} items in
+         * total. The maximum length for each item is {@value MAX_EACH_ITEM_CHARACTER_NUMBER}
+         * characters.
+         *
+         * @param listItem The list item view to display
+         * @param index The position at which to add the item
+         * @return This builder.
+         */
+        @NonNull
+        public Builder addListItem(@NonNull PromptContentItem listItem, int index) {
+            if (doesListItemExceedsCharLimit(listItem)) {
+                throw new IllegalStateException(
+                        "The character number of list item exceeds "
+                                + MAX_EACH_ITEM_CHARACTER_NUMBER);
+            }
+            mContentList.add(index, (PromptContentItemParcelable) listItem);
+            return this;
+        }
+
+        private boolean doesListItemExceedsCharLimit(PromptContentItem listItem) {
+            if (listItem instanceof PromptContentItemPlainText) {
+                return ((PromptContentItemPlainText) listItem).getText().length()
                         > MAX_EACH_ITEM_CHARACTER_NUMBER;
-            } else if (listItem instanceof PromptContentListItemBulletedText) {
-                return ((PromptContentListItemBulletedText) listItem).getText().length()
+            } else if (listItem instanceof PromptContentItemBulletedText) {
+                return ((PromptContentItemBulletedText) listItem).getText().length()
                         > MAX_EACH_ITEM_CHARACTER_NUMBER;
             } else {
                 return false;
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricCustomizedViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricCustomizedViewBinder.kt
index 22b02da..16e7f05 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricCustomizedViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricCustomizedViewBinder.kt
@@ -20,9 +20,9 @@
 import android.content.res.Resources
 import android.content.res.Resources.Theme
 import android.graphics.Paint
-import android.hardware.biometrics.PromptContentListItem
-import android.hardware.biometrics.PromptContentListItemBulletedText
-import android.hardware.biometrics.PromptContentListItemPlainText
+import android.hardware.biometrics.PromptContentItem
+import android.hardware.biometrics.PromptContentItemBulletedText
+import android.hardware.biometrics.PromptContentItemPlainText
 import android.hardware.biometrics.PromptContentView
 import android.hardware.biometrics.PromptVerticalListContentView
 import android.text.SpannableString
@@ -111,21 +111,21 @@
     return inflater.inflate(R.layout.biometric_prompt_content_row_layout, null) as LinearLayout
 }
 
-private fun PromptContentListItem.doesExceedMaxLinesIfTwoColumn(
+private fun PromptContentItem.doesExceedMaxLinesIfTwoColumn(
     resources: Resources,
 ): Boolean {
     val passedInText: CharSequence =
         when (this) {
-            is PromptContentListItemPlainText -> text
-            is PromptContentListItemBulletedText -> text
+            is PromptContentItemPlainText -> text
+            is PromptContentItemBulletedText -> text
             else -> {
-                throw IllegalStateException("No such ListItem: $this")
+                throw IllegalStateException("No such PromptContentItem: $this")
             }
         }
 
     when (this) {
-        is PromptContentListItemPlainText,
-        is PromptContentListItemBulletedText -> {
+        is PromptContentItemPlainText,
+        is PromptContentItemBulletedText -> {
             val dialogMargin =
                 resources.getDimensionPixelSize(R.dimen.biometric_dialog_border_padding)
             val halfDialogWidth =
@@ -155,12 +155,12 @@
             return numLines > maxLines
         }
         else -> {
-            throw IllegalStateException("No such ListItem: $this")
+            throw IllegalStateException("No such PromptContentItem: $this")
         }
     }
 }
 
-private fun PromptContentListItem.toView(
+private fun PromptContentItem.toView(
     resources: Resources,
     inflater: LayoutInflater,
     theme: Theme,
@@ -171,10 +171,10 @@
     textView.layoutParams = lp
 
     when (this) {
-        is PromptContentListItemPlainText -> {
+        is PromptContentItemPlainText -> {
             textView.text = text
         }
-        is PromptContentListItemBulletedText -> {
+        is PromptContentItemBulletedText -> {
             val bulletedText = SpannableString(text)
             val span =
                 BulletSpan(
@@ -186,25 +186,25 @@
             textView.text = bulletedText
         }
         else -> {
-            throw IllegalStateException("No such ListItem: $this")
+            throw IllegalStateException("No such PromptContentItem: $this")
         }
     }
     return textView
 }
 
-private fun PromptContentListItem.getListItemPadding(resources: Resources): Int {
+private fun PromptContentItem.getListItemPadding(resources: Resources): Int {
     var listItemPadding =
         resources.getDimensionPixelSize(
             R.dimen.biometric_prompt_content_list_item_padding_horizontal
         ) * 2
     when (this) {
-        is PromptContentListItemPlainText -> {}
-        is PromptContentListItemBulletedText -> {
+        is PromptContentItemPlainText -> {}
+        is PromptContentItemBulletedText -> {
             listItemPadding +=
                 getListItemBulletRadius(resources) * 2 + getListItemBulletGapWidth(resources)
         }
         else -> {
-            throw IllegalStateException("No such ListItem: $this")
+            throw IllegalStateException("No such PromptContentItem: $this")
         }
     }
     return listItemPadding
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/model/BiometricPromptRequestTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/model/BiometricPromptRequestTest.kt
index bd4973d..a57b890 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/model/BiometricPromptRequestTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/model/BiometricPromptRequestTest.kt
@@ -1,6 +1,6 @@
 package com.android.systemui.biometrics.domain.model
 
-import android.hardware.biometrics.PromptContentListItemBulletedText
+import android.hardware.biometrics.PromptContentItemBulletedText
 import android.hardware.biometrics.PromptVerticalListContentView
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
@@ -28,7 +28,8 @@
         val contentView =
             PromptVerticalListContentView.Builder()
                 .setDescription("content description")
-                .addListItem(PromptContentListItemBulletedText("content text"))
+                .addListItem(PromptContentItemBulletedText("content item 1"))
+                .addListItem(PromptContentItemBulletedText("content item 2"), 1)
                 .build()
 
         val fpPros = fingerprintSensorPropertiesInternal().first()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
index bf61c2e..3944054 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
@@ -18,7 +18,7 @@
 
 import android.content.res.Configuration
 import android.graphics.Point
-import android.hardware.biometrics.PromptContentListItemBulletedText
+import android.hardware.biometrics.PromptContentItemBulletedText
 import android.hardware.biometrics.PromptContentView
 import android.hardware.biometrics.PromptInfo
 import android.hardware.biometrics.PromptVerticalListContentView
@@ -140,7 +140,8 @@
         selector.resetPrompt()
         promptContentView =
             PromptVerticalListContentView.Builder()
-                .addListItem(PromptContentListItemBulletedText("test"))
+                .addListItem(PromptContentItemBulletedText("content item 1"))
+                .addListItem(PromptContentItemBulletedText("content item 2"), 1)
                 .build()
 
         viewModel =