Fix NPE in toBundle if reference time is not set

Test: ./gradlew textclassifier:connectedCheck --info --daemon

BUG: 72307474

Change-Id: I43e41f2075632b075901ffc8539307c75b76179d
diff --git a/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java b/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
index 2e7c612..83cca22 100644
--- a/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
+++ b/textclassifier/src/androidTest/java/androidx/textclassifier/TextClassificationTest.java
@@ -105,6 +105,20 @@
     }
 
     @Test
+    public void testMinimalBundleRequest() {
+        TextClassification.Request reference =
+                new TextClassification.Request.Builder(TEXT, START_INDEX, END_INDEX).build();
+        // Serialize/deserialize.
+        TextClassification.Request result = TextClassification.Request.createFromBundle(
+                reference.toBundle());
+
+        assertEquals(TEXT, result.getText());
+        assertEquals(START_INDEX, result.getStartIndex());
+        assertEquals(END_INDEX, result.getEndIndex());
+        assertEquals(null, result.getReferenceTime());
+    }
+
+    @Test
     @SdkSuppress(minSdkVersion = 28)
     public void testToPlatformRequest() {
         TextClassification.Request request = createTextClassificationRequest();
diff --git a/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java b/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
index 72e0908..b55e708 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/BundleUtils.java
@@ -140,4 +140,20 @@
         }
         return LocaleListCompat.forLanguageTags(localeTags);
     }
+
+    static void putLong(@NonNull Bundle bundle, @NonNull String key, @Nullable Long value) {
+        if (value == null) {
+            bundle.remove(key);
+            return;
+        }
+        bundle.putLong(key, value);
+    }
+
+    @Nullable
+    static Long getLong(@NonNull Bundle bundle, @NonNull String key) {
+        if (!bundle.containsKey(key)) {
+            return null;
+        }
+        return bundle.getLong(key);
+    }
 }
diff --git a/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java b/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
index ee99614..aac53ff 100644
--- a/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
+++ b/textclassifier/src/main/java/androidx/textclassifier/TextClassification.java
@@ -538,7 +538,7 @@
             bundle.putInt(EXTRA_START_INDEX, mStartIndex);
             bundle.putInt(EXTRA_END_INDEX, mEndIndex);
             BundleUtils.putLocaleList(bundle, EXTRA_DEFAULT_LOCALES, mDefaultLocales);
-            bundle.putLong(EXTRA_REFERENCE_TIME, mReferenceTime);
+            BundleUtils.putLong(bundle, EXTRA_REFERENCE_TIME, mReferenceTime);
             return bundle;
         }
 
@@ -551,9 +551,8 @@
                     bundle.getInt(EXTRA_START_INDEX),
                     bundle.getInt(EXTRA_END_INDEX))
                     .setDefaultLocales(BundleUtils.getLocaleList(bundle, EXTRA_DEFAULT_LOCALES))
-                    .setReferenceTime(bundle.getLong(EXTRA_REFERENCE_TIME));
-            final Request request = builder.build();
-            return request;
+                    .setReferenceTime(BundleUtils.getLong(bundle, EXTRA_REFERENCE_TIME));
+            return builder.build();
         }
     }
 }