Throw NullPointerException on args to Time#compare

Check for null on arguments to Time#compare(Time, Time) before passing
it down to JNI code.

Bug: 5073949
Change-Id: I077e9d5194a89206d1e51fc89a72c8a72e29f8f1
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index c6ffe58..5926db3 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -281,10 +281,29 @@
     }
 
     /**
-     * return a negative number if a is less than b, a positive number if a is
-     * greater than b, and 0 if they are equal.
+     * Compare two {@code Time} objects and return a negative number if {@code
+     * a} is less than {@code b}, a positive number if {@code a} is greater than
+     * {@code b}, or 0 if they are equal.
+     *
+     * @param a first {@code Time} instance to compare
+     * @param b second {@code Time} instance to compare
+     * @throws NullPointerException if either argument is {@code null}
+     * @throws IllegalArgumentException if {@link #allDay} is true but {@code
+     *             hour}, {@code minute}, and {@code second} are not 0.
+     * @return a negative result if {@code a} is earlier, a positive result if
+     *         {@code a} is earlier, or 0 if they are equal.
      */
-    native public static int compare(Time a, Time b);
+    public static int compare(Time a, Time b) {
+        if (a == null) {
+            throw new NullPointerException("a == null");
+        } else if (b == null) {
+            throw new NullPointerException("b == null");
+        }
+
+        return nativeCompare(a, b);
+    }
+
+    private static native int nativeCompare(Time a, Time b);
 
     /**
      * Print the current value given the format string provided. See man
diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp
index c152aa8..69c6021 100644
--- a/core/jni/android_text_format_Time.cpp
+++ b/core/jni/android_text_format_Time.cpp
@@ -641,7 +641,7 @@
     /* name, signature, funcPtr */
     { "normalize",               "(Z)J",                                        (void*)android_text_format_Time_normalize },
     { "switchTimezone",          "(Ljava/lang/String;)V",                       (void*)android_text_format_Time_switchTimezone },
-    { "compare",                 "(Landroid/text/format/Time;Landroid/text/format/Time;)I",     (void*)android_text_format_Time_compare },
+    { "nativeCompare",           "(Landroid/text/format/Time;Landroid/text/format/Time;)I",     (void*)android_text_format_Time_compare },
     { "format1",                 "(Ljava/lang/String;)Ljava/lang/String;",      (void*)android_text_format_Time_format },
     { "format2445",              "()Ljava/lang/String;",                        (void*)android_text_format_Time_format2445 },
     { "toString",                "()Ljava/lang/String;",                        (void*)android_text_format_Time_toString },