Changes getProperty methods to return primitive type

Bug: 143789408
Test: atest FrameworksCoreTests:android.app.appsearch
Change-Id: I2ae6d37c266211f8c6742d08ee2c778b48c67f54
diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchDocument.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchDocument.java
index ff0f0dd..6ac0956 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchDocument.java
+++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchDocument.java
@@ -71,7 +71,7 @@
     private final Map<String, Object> mProperties;
 
     /**
-     * Create a new {@link AppSearchDocument}.
+     * Creates a new {@link AppSearchDocument}.
      * @param proto Contains {@link AppSearchDocument} basic information (uri, schemaType etc) and
      *               properties ordered by keys.
      * @param propertiesMap Contains all properties in {@link #mProto} to support get properties
@@ -84,7 +84,7 @@
     }
 
     /**
-     * Create a new {@link AppSearchDocument} from an existing instance.
+     * Creates a new {@link AppSearchDocument} from an existing instance.
      *
      * <p>This method should be only used by constructor of a subclass.
      */
@@ -142,7 +142,7 @@
     }
 
     /**
-     * Get the {@link DocumentProto} of the {@link AppSearchDocument}.
+     * Returns the {@link DocumentProto} of the {@link AppSearchDocument}.
      *
      * <p>The {@link DocumentProto} contains {@link AppSearchDocument}'s basic information and all
      *    properties ordered by keys.
@@ -154,30 +154,21 @@
         return mProto;
     }
 
-    /**
-     * Get the uri of the {@link AppSearchDocument}.
-     *
-     * @hide
-     */
+    /** Returns the URI of the {@link AppSearchDocument}. */
     @NonNull
     public String getUri() {
         return mProto.getUri();
     }
 
-    /**
-     * Get the schema type of the {@link AppSearchDocument}.
-     * @hide
-     */
+    /** Returns the schema type of the {@link AppSearchDocument}. */
     @NonNull
     public String getSchemaType() {
         return mProto.getSchema();
     }
 
     /**
-     * Get the creation timestamp in milliseconds of the {@link AppSearchDocument}. Value will be in
-     * the {@link System#currentTimeMillis()} time base.
-     *
-     * @hide
+     * Returns the creation timestamp in milliseconds of the {@link AppSearchDocument}. Value will
+     * be in the {@link System#currentTimeMillis()} time base.
      */
     @CurrentTimeMillisLong
     public long getCreationTimestampMillis() {
@@ -189,8 +180,6 @@
      *
      * <p>The default value is 0, which means the document is permanent and won't be auto-deleted
      *    until the app is uninstalled.
-     *
-     * @hide
      */
     @DurationMillisLong
     public long getTtlMillis() {
@@ -204,8 +193,6 @@
      * {@link AppSearchDocument}s of the same type.
      *
      * <p>The default value is 0.
-     *
-     * @hide
      */
     public int getScore() {
         return mProto.getScore();
@@ -217,7 +204,6 @@
      * @param key The key to look for.
      * @return The first {@link String} associated with the given key or {@code null} if there
      *         is no such key or the value is of a different type.
-     * @hide
      */
     @Nullable
     public String getPropertyString(@NonNull String key) {
@@ -230,55 +216,49 @@
     }
 
     /**
-     * Retrieve a {@link Long} value by key.
+     * Retrieve a {@code long} value by key.
      *
      * @param key The key to look for.
-     * @return The first {@link Long} associated with the given key or {@code null} if there
-     *         is no such key or the value is of a different type.
-     * @hide
+     * @return The first {@code long} associated with the given key or default value {@code 0} if
+     *         there is no such key or the value is of a different type.
      */
-    @Nullable
-    public Long getPropertyLong(@NonNull String key) {
+    public long getPropertyLong(@NonNull String key) {
         long[] propertyArray = getPropertyLongArray(key);
         if (ArrayUtils.isEmpty(propertyArray)) {
-            return null;
+            return 0;
         }
         warnIfSinglePropertyTooLong("Long", key, propertyArray.length);
         return propertyArray[0];
     }
 
     /**
-     * Retrieve a {@link Double} value by key.
+     * Retrieve a {@code double} value by key.
      *
      * @param key The key to look for.
-     * @return The first {@link Double} associated with the given key or {@code null} if there
-     *         is no such key or the value is of a different type.
-     * @hide
+     * @return The first {@code double} associated with the given key or default value {@code 0.0}
+     *         if there is no such key or the value is of a different type.
      */
-    @Nullable
-    public Double getPropertyDouble(@NonNull String key) {
+    public double getPropertyDouble(@NonNull String key) {
         double[] propertyArray = getPropertyDoubleArray(key);
         // TODO(tytytyww): Add support double array to ArraysUtils.isEmpty().
         if (propertyArray == null || propertyArray.length == 0) {
-            return null;
+            return 0.0;
         }
         warnIfSinglePropertyTooLong("Double", key, propertyArray.length);
         return propertyArray[0];
     }
 
     /**
-     * Retrieve a {@link Boolean} value by key.
+     * Retrieve a {@code boolean} value by key.
      *
      * @param key The key to look for.
-     * @return The first {@link Boolean} associated with the given key or {@code null} if there
-     *         is no such key or the value is of a different type.
-     * @hide
+     * @return The first {@code boolean} associated with the given key or default value
+     *         {@code false} if there is no such key or the value is of a different type.
      */
-    @Nullable
-    public Boolean getPropertyBoolean(@NonNull String key) {
+    public boolean getPropertyBoolean(@NonNull String key) {
         boolean[] propertyArray = getPropertyBooleanArray(key);
         if (ArrayUtils.isEmpty(propertyArray)) {
-            return null;
+            return false;
         }
         warnIfSinglePropertyTooLong("Boolean", key, propertyArray.length);
         return propertyArray[0];
@@ -330,12 +310,11 @@
     }
 
     /**
-     * Retrieve a repeated {@code String} property by key.
+     * Retrieve a repeated {@link String} property by key.
      *
      * @param key The key to look for.
      * @return The {@code String[]} associated with the given key, or {@code null} if no value
      *         is set or the value is of a different type.
-     * @hide
      */
     @Nullable
     public String[] getPropertyStringArray(@NonNull String key) {
@@ -348,7 +327,6 @@
      * @param key The key to look for.
      * @return The {@code long[]} associated with the given key, or {@code null} if no value is
      *         set or the value is of a different type.
-     * @hide
      */
     @Nullable
     public long[] getPropertyLongArray(@NonNull String key) {
@@ -361,7 +339,6 @@
      * @param key The key to look for.
      * @return The {@code double[]} associated with the given key, or {@code null} if no value
      *         is set or the value is of a different type.
-     * @hide
      */
     @Nullable
     public double[] getPropertyDoubleArray(@NonNull String key) {
@@ -374,7 +351,6 @@
      * @param key The key to look for.
      * @return The {@code boolean[]} associated with the given key, or {@code null} if no value
      *         is set or the value is of a different type.
-     * @hide
      */
     @Nullable
     public boolean[] getPropertyBooleanArray(@NonNull String key) {
@@ -453,7 +429,6 @@
      * The builder class for {@link AppSearchDocument}.
      *
      * @param <BuilderType> Type of subclass who extend this.
-     * @hide
      */
     public static class Builder<BuilderType extends Builder> {
 
@@ -462,7 +437,9 @@
         private final BuilderType mBuilderTypeInstance;
 
         /**
-         * Create a new {@link AppSearchDocument.Builder}.
+         * Creates a new {@link AppSearchDocument.Builder}.
+         *
+         * <p>The URI is a unique string opaque to AppSearch.
          *
          * @param uri The uri of {@link AppSearchDocument}.
          * @param schemaType The schema type of the {@link AppSearchDocument}. The passed-in
@@ -470,7 +447,6 @@
          *       to inserting a document of this {@code schemaType} into the AppSearch index using
          *       {@link AppSearchManager#putDocuments(List)}. Otherwise, the document will be
          *       rejected by {@link AppSearchManager#putDocuments(List)}.
-         * @hide
          */
         public Builder(@NonNull String uri, @NonNull String schemaType) {
             mBuilderTypeInstance = (BuilderType) this;
@@ -486,7 +462,6 @@
          * other {@link AppSearchDocument}s of the same type.
          *
          * @throws IllegalArgumentException If the provided value is negative.
-         * @hide
          */
         @NonNull
         public BuilderType setScore(@IntRange(from = 0, to = Integer.MAX_VALUE) int score) {
@@ -500,8 +475,6 @@
         /**
          * Set the creation timestamp in milliseconds of the {@link AppSearchDocument}. Should be
          * set using a value obtained from the {@link System#currentTimeMillis()} time base.
-         *
-         * @hide
          */
         @NonNull
         public BuilderType setCreationTimestampMillis(
@@ -533,7 +506,6 @@
          *
          * @param key The key associated with the {@code values}.
          * @param values The {@code String} values of the property.
-         * @hide
          */
         @NonNull
         public BuilderType setProperty(@NonNull String key, @NonNull String... values) {
@@ -673,10 +645,8 @@
             }
         }
 
-        /**
-         * Builds the {@link AppSearchDocument} object.
-         * @hide
-         */
+        /** Builds the {@link AppSearchDocument} object. */
+        @NonNull
         public AppSearchDocument build() {
             // Build proto by sorting the keys in mProperties to exclude the influence of
             // order. Therefore documents will generate same proto as long as the contents are
diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchEmail.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchEmail.java
index 5b9457b..4931282 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchEmail.java
+++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchEmail.java
@@ -90,6 +90,7 @@
      * {@link AppSearchDocument}.
      *
      * @param document The {@link AppSearchDocument} containing the email content.
+     * @hide
      */
     public AppSearchEmail(@NonNull AppSearchDocument document) {
         super(document);
diff --git a/core/tests/coretests/src/android/app/appsearch/AppSearchDocumentTest.java b/core/tests/coretests/src/android/app/appsearch/AppSearchDocumentTest.java
index 4a4f1367..a56f0ab 100644
--- a/core/tests/coretests/src/android/app/appsearch/AppSearchDocumentTest.java
+++ b/core/tests/coretests/src/android/app/appsearch/AppSearchDocumentTest.java
@@ -134,6 +134,7 @@
                 .setCreationTimestampMillis(5L)
                 .setScore(1)
                 .setTtlMillis(1L)
+                .setScore(1)
                 .setProperty("longKey1", 1L)
                 .setProperty("doubleKey1", 1.0)
                 .setProperty("booleanKey1", true)
@@ -192,7 +193,7 @@
                 .build();
 
         // Get a value for a key that doesn't exist
-        assertThat(document.getPropertyDouble("doubleKey1")).isNull();
+        assertThat(document.getPropertyDouble("doubleKey1")).isEqualTo(0.0);
         assertThat(document.getPropertyDoubleArray("doubleKey1")).isNull();
 
         // Get a value with a single element as an array and as a single value
@@ -205,7 +206,7 @@
                 .containsExactly("test-value1", "test-value2", "test-value3");
 
         // Get a value of the wrong type
-        assertThat(document.getPropertyDouble("longKey1")).isNull();
+        assertThat(document.getPropertyDouble("longKey1")).isEqualTo(0.0);
         assertThat(document.getPropertyDoubleArray("longKey1")).isNull();
     }
 
@@ -254,8 +255,8 @@
                         .addDocumentValues(sDocumentProperties1.getProto()));
         List<String> sortedKey = new ArrayList<>(propertyProtoMap.keySet());
         Collections.sort(sortedKey);
-        for (String key : sortedKey) {
-            documentProtoBuilder.addProperties(propertyProtoMap.get(key));
+        for (int i = 0; i < sortedKey.size(); i++) {
+            documentProtoBuilder.addProperties(propertyProtoMap.get(sortedKey.get(i)));
         }
         assertThat(document.getProto()).isEqualTo(documentProtoBuilder.build());
     }