Merge "Expose NumberFormatter and NumberRangeFormatter APIs" am: b9f3853452 am: ce0b381c4c

Change-Id: I92675100b4a017dc82e53a43e7522a7801771665
diff --git a/android_icu4j/src/main/java/android/icu/number/CompactNotation.java b/android_icu4j/src/main/java/android/icu/number/CompactNotation.java
index d497a73..d0c7012 100644
--- a/android_icu4j/src/main/java/android/icu/number/CompactNotation.java
+++ b/android_icu4j/src/main/java/android/icu/number/CompactNotation.java
@@ -33,7 +33,6 @@
  * methods in {@link Notation}.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class CompactNotation extends Notation {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/CurrencyPrecision.java b/android_icu4j/src/main/java/android/icu/number/CurrencyPrecision.java
index 4148a5e..65efc22 100644
--- a/android_icu4j/src/main/java/android/icu/number/CurrencyPrecision.java
+++ b/android_icu4j/src/main/java/android/icu/number/CurrencyPrecision.java
@@ -13,7 +13,6 @@
  * To create a CurrencyPrecision, use one of the factory methods on Precision.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class CurrencyPrecision extends Precision {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/FormattedNumber.java b/android_icu4j/src/main/java/android/icu/number/FormattedNumber.java
index bf1b931..04790ff 100644
--- a/android_icu4j/src/main/java/android/icu/number/FormattedNumber.java
+++ b/android_icu4j/src/main/java/android/icu/number/FormattedNumber.java
@@ -23,7 +23,6 @@
  * Instances of this class are immutable and thread-safe.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class FormattedNumber implements FormattedValue {
     final FormattedStringBuilder string;
@@ -74,6 +73,8 @@
 
     /**
      * {@inheritDoc}
+     *
+     * @hide unsupported on Android
      */
     @Override
     public <A extends Appendable> A appendTo(A appendable) {
diff --git a/android_icu4j/src/main/java/android/icu/number/FormattedNumberRange.java b/android_icu4j/src/main/java/android/icu/number/FormattedNumberRange.java
index a72e0cf..c9a6183 100644
--- a/android_icu4j/src/main/java/android/icu/number/FormattedNumberRange.java
+++ b/android_icu4j/src/main/java/android/icu/number/FormattedNumberRange.java
@@ -25,7 +25,6 @@
  *
  * @author sffc
  * @see NumberRangeFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class FormattedNumberRange implements FormattedValue {
     final FormattedStringBuilder string;
@@ -51,6 +50,8 @@
 
     /**
      * {@inheritDoc}
+     *
+     * @hide unsupported on Android
      */
     @Override
     public <A extends Appendable> A appendTo(A appendable) {
diff --git a/android_icu4j/src/main/java/android/icu/number/FractionPrecision.java b/android_icu4j/src/main/java/android/icu/number/FractionPrecision.java
index 2a27a56..7e9aa66 100644
--- a/android_icu4j/src/main/java/android/icu/number/FractionPrecision.java
+++ b/android_icu4j/src/main/java/android/icu/number/FractionPrecision.java
@@ -13,7 +13,6 @@
  * To create a FractionPrecision, use one of the factory methods on Precision.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class FractionPrecision extends Precision {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/IntegerWidth.java b/android_icu4j/src/main/java/android/icu/number/IntegerWidth.java
index e7b53d2..48cc528 100644
--- a/android_icu4j/src/main/java/android/icu/number/IntegerWidth.java
+++ b/android_icu4j/src/main/java/android/icu/number/IntegerWidth.java
@@ -12,7 +12,6 @@
  * To create an IntegerWidth, use one of the factory methods.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class IntegerWidth {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/LocalizedNumberFormatter.java b/android_icu4j/src/main/java/android/icu/number/LocalizedNumberFormatter.java
index 5ded0f8..99acd6a 100644
--- a/android_icu4j/src/main/java/android/icu/number/LocalizedNumberFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/LocalizedNumberFormatter.java
@@ -26,7 +26,6 @@
  *
  * @see NumberFormatter
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class LocalizedNumberFormatter extends NumberFormatterSettings<LocalizedNumberFormatter> {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/LocalizedNumberRangeFormatter.java b/android_icu4j/src/main/java/android/icu/number/LocalizedNumberRangeFormatter.java
index 958cde7..cc7ed61 100644
--- a/android_icu4j/src/main/java/android/icu/number/LocalizedNumberRangeFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/LocalizedNumberRangeFormatter.java
@@ -13,7 +13,6 @@
  *
  * @author sffc
  * @see NumberRangeFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class LocalizedNumberRangeFormatter extends NumberRangeFormatterSettings<LocalizedNumberRangeFormatter> {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/Notation.java b/android_icu4j/src/main/java/android/icu/number/Notation.java
index 8473206..cb7e963 100644
--- a/android_icu4j/src/main/java/android/icu/number/Notation.java
+++ b/android_icu4j/src/main/java/android/icu/number/Notation.java
@@ -10,7 +10,6 @@
  * A class that defines the notation style to be used when formatting numbers in NumberFormatter.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class Notation {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/NumberFormatter.java b/android_icu4j/src/main/java/android/icu/number/NumberFormatter.java
index e7a6f03..1178292 100644
--- a/android_icu4j/src/main/java/android/icu/number/NumberFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/NumberFormatter.java
@@ -62,7 +62,6 @@
  * design doc</a>.
  *
  * @author Shane Carr
- * @hide Only a subset of ICU is exposed in Android
  */
 public final class NumberFormatter {
 
@@ -84,7 +83,6 @@
      * This enum is similar to {@link android.icu.text.MeasureFormat.FormatWidth}.
      *
      * @see NumberFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum UnitWidth {
         /**
@@ -174,7 +172,6 @@
      * grouping separator, use the "symbols" setter.
      *
      * @see NumberFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum GroupingStrategy {
         /**
@@ -258,7 +255,6 @@
      * The exact format, including the position and the code point of the sign, differ by locale.
      *
      * @see NumberFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum SignDisplay {
         /**
@@ -340,7 +336,6 @@
      * </ul>
      *
      * @see NumberFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum DecimalSeparatorDisplay {
         /**
@@ -414,6 +409,7 @@
      *            The skeleton string off of which to base this NumberFormatter.
      * @return An {@link UnlocalizedNumberFormatter}, to be used for chaining.
      * @throws SkeletonSyntaxException If the given string is not a valid number formatting skeleton.
+     * @hide unsupported on Android
      */
     public static UnlocalizedNumberFormatter forSkeleton(String skeleton) {
         return NumberSkeletonImpl.getOrCreate(skeleton);
diff --git a/android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java b/android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java
index b35fb35..1f7d267 100644
--- a/android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java
+++ b/android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java
@@ -25,7 +25,6 @@
  * for public subclassing.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class NumberFormatterSettings<T extends NumberFormatterSettings<?>> {
 
@@ -130,9 +129,6 @@
      * <p>
      * See {@link #perUnit} for information on how to format strings like "5 meters per second".
      *
-     * <p>
-     * The default is to render without units (equivalent to {@link NoUnit#BASE}).
-     *
      * @param unit
      *            The unit to render.
      * @return The fluent chain.
@@ -522,6 +518,7 @@
      * @return A number skeleton string with behavior corresponding to this number formatter.
      * @throws UnsupportedOperationException
      *             If the number formatter has an option that cannot be represented in a skeleton string.
+     * @hide unsupported on Android
      */
     public String toSkeleton() {
         return NumberSkeletonImpl.generate(resolve());
diff --git a/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatter.java b/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatter.java
index 80be6e2..57944d8 100644
--- a/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatter.java
@@ -28,7 +28,6 @@
  *
  * @author sffc
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class NumberRangeFormatter {
 
@@ -36,7 +35,6 @@
      * Defines how to merge fields that are identical across the range sign.
      *
      * @see NumberRangeFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public enum RangeCollapse {
         /**
@@ -78,7 +76,6 @@
      * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber.
      *
      * @see NumberRangeFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum RangeIdentityFallback {
         /**
@@ -118,7 +115,6 @@
      * were equal or not, and whether or not the identity fallback was applied.
      *
      * @see NumberRangeFormatter
-     * @hide Only a subset of ICU is exposed in Android
      */
     public static enum RangeIdentityResult {
         /**
diff --git a/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatterSettings.java b/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatterSettings.java
index 18535cf..af85bb5 100644
--- a/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatterSettings.java
+++ b/android_icu4j/src/main/java/android/icu/number/NumberRangeFormatterSettings.java
@@ -15,7 +15,6 @@
  *
  * @author sffc
  * @see NumberRangeFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class NumberRangeFormatterSettings<T extends NumberRangeFormatterSettings<?>> {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/Precision.java b/android_icu4j/src/main/java/android/icu/number/Precision.java
index 4ca3e11..0de71b5 100644
--- a/android_icu4j/src/main/java/android/icu/number/Precision.java
+++ b/android_icu4j/src/main/java/android/icu/number/Precision.java
@@ -20,7 +20,6 @@
  * To create a Precision, use one of the factory methods.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public abstract class Precision implements Cloneable {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/Scale.java b/android_icu4j/src/main/java/android/icu/number/Scale.java
index 8acdaf5..28e116e 100644
--- a/android_icu4j/src/main/java/android/icu/number/Scale.java
+++ b/android_icu4j/src/main/java/android/icu/number/Scale.java
@@ -17,7 +17,6 @@
  * To create a Multiplier, use one of the factory methods.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class Scale {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/ScientificNotation.java b/android_icu4j/src/main/java/android/icu/number/ScientificNotation.java
index 769f5d1..a144a79 100644
--- a/android_icu4j/src/main/java/android/icu/number/ScientificNotation.java
+++ b/android_icu4j/src/main/java/android/icu/number/ScientificNotation.java
@@ -26,7 +26,6 @@
  * To create a ScientificNotation, use one of the factory methods in {@link Notation}.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class ScientificNotation extends Notation implements Cloneable {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/SimpleNotation.java b/android_icu4j/src/main/java/android/icu/number/SimpleNotation.java
index c062f23..c422681 100644
--- a/android_icu4j/src/main/java/android/icu/number/SimpleNotation.java
+++ b/android_icu4j/src/main/java/android/icu/number/SimpleNotation.java
@@ -11,7 +11,6 @@
  * in {@link Notation}.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class SimpleNotation extends Notation {
     /* package-private */ SimpleNotation() {
diff --git a/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberFormatter.java b/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberFormatter.java
index 2509eb6..3ca7cfe 100644
--- a/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberFormatter.java
@@ -14,7 +14,6 @@
  * Instances of this class are immutable and thread-safe.
  *
  * @see NumberFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class UnlocalizedNumberFormatter extends NumberFormatterSettings<UnlocalizedNumberFormatter> {
 
diff --git a/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberRangeFormatter.java b/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberRangeFormatter.java
index 128e1c8..08211a1 100644
--- a/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberRangeFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/number/UnlocalizedNumberRangeFormatter.java
@@ -14,7 +14,6 @@
  *
  * @author sffc
  * @see NumberRangeFormatter
- * @hide Only a subset of ICU is exposed in Android
  */
 public class UnlocalizedNumberRangeFormatter extends NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter> {
 
diff --git a/tools/srcgen/javadoc_patches/patches/src/main/java/android/icu/number/NumberFormatterSettings.java.patch b/tools/srcgen/javadoc_patches/patches/src/main/java/android/icu/number/NumberFormatterSettings.java.patch
new file mode 100644
index 0000000..2a4a88e
--- /dev/null
+++ b/tools/srcgen/javadoc_patches/patches/src/main/java/android/icu/number/NumberFormatterSettings.java.patch
@@ -0,0 +1,12 @@
+--- android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java	2019-12-20 13:19:52.721019722 +0000
++++ android_icu4j/src/main/java/android/icu/number/NumberFormatterSettings.java	2019-12-20 13:19:51.069006835 +0000
+@@ -129,9 +129,6 @@
+      * <p>
+      * See {@link #perUnit} for information on how to format strings like "5 meters per second".
+      *
+-     * <p>
+-     * The default is to render without units (equivalent to {@link NoUnit#BASE}).
+-     *
+      * @param unit
+      *            The unit to render.
+      * @return The fluent chain.
diff --git a/tools/srcgen/src/main/java/com/android/icu4j/srcgen/Icu4jTransform.java b/tools/srcgen/src/main/java/com/android/icu4j/srcgen/Icu4jTransform.java
index 04649b5..bc9c4e2 100644
--- a/tools/srcgen/src/main/java/com/android/icu4j/srcgen/Icu4jTransform.java
+++ b/tools/srcgen/src/main/java/com/android/icu4j/srcgen/Icu4jTransform.java
@@ -86,6 +86,32 @@
       "android.icu.lang.UScript$ScriptUsage",
       "android.icu.math.BigDecimal",
       "android.icu.math.MathContext",
+      "android.icu.number.CompactNotation",
+      "android.icu.number.CurrencyPrecision",
+      "android.icu.number.FormattedNumber",
+      "android.icu.number.FormattedNumberRange",
+      "android.icu.number.FractionPrecision",
+      "android.icu.number.IntegerWidth",
+      "android.icu.number.LocalizedNumberFormatter",
+      "android.icu.number.LocalizedNumberRangeFormatter",
+      "android.icu.number.Notation",
+      "android.icu.number.NumberFormatter",
+      "android.icu.number.NumberFormatter$DecimalSeparatorDisplay",
+      "android.icu.number.NumberFormatter$GroupingStrategy",
+      "android.icu.number.NumberFormatter$SignDisplay",
+      "android.icu.number.NumberFormatter$UnitWidth",
+      "android.icu.number.NumberFormatterSettings",
+      "android.icu.number.NumberRangeFormatter",
+      "android.icu.number.NumberRangeFormatter$RangeCollapse",
+      "android.icu.number.NumberRangeFormatter$RangeIdentityFallback",
+      "android.icu.number.NumberRangeFormatter$RangeIdentityResult",
+      "android.icu.number.NumberRangeFormatterSettings",
+      "android.icu.number.Precision",
+      "android.icu.number.Scale",
+      "android.icu.number.ScientificNotation",
+      "android.icu.number.SimpleNotation",
+      "android.icu.number.UnlocalizedNumberFormatter",
+      "android.icu.number.UnlocalizedNumberRangeFormatter",
       "android.icu.text.AlphabeticIndex",
       "android.icu.text.AlphabeticIndex$Bucket",
       "android.icu.text.AlphabeticIndex$Bucket$LabelType",
@@ -644,6 +670,16 @@
       "field:android.icu.util.LocaleData#ES_INDEX",
       "field:android.icu.util.LocaleData#ES_PUNCTUATION",
       "field:android.icu.util.LocaleData#ES_STANDARD",
+      // Hide appendTo APIs until we find the value of these APIs.
+      // Particularly, the open question is throwing ICUUncheckedIOException/checked IOException.
+      "method:android.icu.number.FormattedNumber#appendTo(A)",
+      "method:android.icu.number.FormattedNumberRange#appendTo(A)",
+      // Skeleton syntax can evolve over time. Currently, the skeleton APIs are not prioritized to
+      // be public. Android developers could easily miss the API version check for new syntax and
+      // cause app crashing on older devices.
+      // See the syntax details in https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md.
+      "method:android.icu.number.NumberFormatterSettings#toSkeleton()",
+      "method:android.icu.number.NumberFormatter#forSkeleton(String)",
       "method:android.icu.text.BreakIterator#registerInstance(BreakIterator,Locale,int)",
       "method:android.icu.text.BreakIterator#registerInstance(BreakIterator,ULocale,int)",
       "method:android.icu.text.BreakIterator#unregister(Object)",