Properly handle InlineSuggestionsRequest with 0 max suggestion count

Test: manual, atest InlineSuggestionsRequestTest
Bug: 150142709

Change-Id: Id0bba142526641964087d29bf515b7d7a817bae0
diff --git a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
index e50da40..8e8c7df 100644
--- a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
+++ b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
@@ -44,15 +44,15 @@
     public static final int SUGGESTION_COUNT_UNLIMITED = Integer.MAX_VALUE;
 
     /**
-     * Max number of suggestions expected from the response. Defaults to {@code
-     * SUGGESTION_COUNT_UNLIMITED} if not set.
+     * Max number of suggestions expected from the response. It must be a positive value.
+     * Defaults to {@code SUGGESTION_COUNT_UNLIMITED} if not set.
      */
     private final int mMaxSuggestionCount;
 
     /**
      * The {@link InlinePresentationSpec} for each suggestion in the response. If the max suggestion
      * count is larger than the number of specs in the list, then the last spec is used for the
-     * remainder of the suggestions.
+     * remainder of the suggestions. The list should not be empty.
      */
     private final @NonNull List<InlinePresentationSpec> mPresentationSpecs;
 
@@ -72,6 +72,7 @@
     /**
      * The extras state propagated from the IME to pass extra data.
      */
+    @DataClass.MaySetToNull
     private @Nullable Bundle mExtras;
 
     /**
@@ -80,6 +81,7 @@
      *
      * @hide
      */
+    @DataClass.MaySetToNull
     private @Nullable IBinder mHostInputToken;
 
     /**
@@ -117,6 +119,7 @@
     }
 
     private void onConstructed() {
+        Preconditions.checkState(!mPresentationSpecs.isEmpty());
         Preconditions.checkState(mMaxSuggestionCount >= mPresentationSpecs.size());
     }
 
@@ -162,7 +165,7 @@
 
 
 
-    // Code below generated by codegen v1.0.14.
+    // Code below generated by codegen v1.0.15.
     //
     // DO NOT MODIFY!
     // CHECKSTYLE:OFF Generated code
@@ -202,8 +205,8 @@
     }
 
     /**
-     * Max number of suggestions expected from the response. Defaults to {@code
-     * SUGGESTION_COUNT_UNLIMITED} if not set.
+     * Max number of suggestions expected from the response. It must be a positive value.
+     * Defaults to {@code SUGGESTION_COUNT_UNLIMITED} if not set.
      */
     @DataClass.Generated.Member
     public int getMaxSuggestionCount() {
@@ -213,7 +216,7 @@
     /**
      * The {@link InlinePresentationSpec} for each suggestion in the response. If the max suggestion
      * count is larger than the number of specs in the list, then the last spec is used for the
-     * remainder of the suggestions.
+     * remainder of the suggestions. The list should not be empty.
      */
     @DataClass.Generated.Member
     public @NonNull List<InlinePresentationSpec> getPresentationSpecs() {
@@ -419,7 +422,7 @@
          * @param presentationSpecs
          *   The {@link InlinePresentationSpec} for each suggestion in the response. If the max suggestion
          *   count is larger than the number of specs in the list, then the last spec is used for the
-         *   remainder of the suggestions.
+         *   remainder of the suggestions. The list should not be empty.
          */
         public Builder(
                 @NonNull List<InlinePresentationSpec> presentationSpecs) {
@@ -429,8 +432,8 @@
         }
 
         /**
-         * Max number of suggestions expected from the response. Defaults to {@code
-         * SUGGESTION_COUNT_UNLIMITED} if not set.
+         * Max number of suggestions expected from the response. It must be a positive value.
+         * Defaults to {@code SUGGESTION_COUNT_UNLIMITED} if not set.
          */
         @DataClass.Generated.Member
         public @NonNull Builder setMaxSuggestionCount(int value) {
@@ -443,7 +446,7 @@
         /**
          * The {@link InlinePresentationSpec} for each suggestion in the response. If the max suggestion
          * count is larger than the number of specs in the list, then the last spec is used for the
-         * remainder of the suggestions.
+         * remainder of the suggestions. The list should not be empty.
          */
         @DataClass.Generated.Member
         @Override
@@ -575,10 +578,10 @@
     }
 
     @DataClass.Generated(
-            time = 1582339908980L,
-            codegenVersion = "1.0.14",
+            time = 1583975428858L,
+            codegenVersion = "1.0.15",
             sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java",
-            inputSignatures = "public static final  int SUGGESTION_COUNT_UNLIMITED\nprivate final  int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.view.inline.InlinePresentationSpec> mPresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.Nullable android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate  int mHostDisplayId\npublic  void setHostInputToken(android.os.IBinder)\nprivate  void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic  void setHostDisplayId(int)\nprivate  void onConstructed()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.Nullable android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setPresentationSpecs(java.util.List<android.view.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
+            inputSignatures = "public static final  int SUGGESTION_COUNT_UNLIMITED\nprivate final  int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.view.inline.InlinePresentationSpec> mPresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @com.android.internal.util.DataClass.MaySetToNull @android.annotation.Nullable android.os.Bundle mExtras\nprivate @com.android.internal.util.DataClass.MaySetToNull @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate  int mHostDisplayId\npublic  void setHostInputToken(android.os.IBinder)\nprivate  void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic  void setHostDisplayId(int)\nprivate  void onConstructed()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.Nullable android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setPresentationSpecs(java.util.List<android.view.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
     @Deprecated
     private void __metadata() {}