Merge "API updated for ICU4J 59.1" am: 365178394d
am: b418181e01

Change-Id: I6cf0840b5a8d1e32e0e872e44aa381f2c6ee15f8
diff --git a/api/current.txt b/api/current.txt
index e4084e5..4281b2d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -17736,6 +17736,7 @@
     field public static final java.lang.String ABBR_UTC_TZ = "ZZZZ";
     field public static final java.lang.String ABBR_WEEKDAY = "E";
     field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
     field public static final int DATE_FIELD = 3; // 0x3
     field public static final java.lang.String DAY = "d";
     field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
@@ -17745,6 +17746,7 @@
     field public static final int DOW_LOCAL_FIELD = 19; // 0x13
     field public static final int ERA_FIELD = 0; // 0x0
     field public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+    field public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
     field public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
     field public static final int FULL = 0; // 0x0
     field public static final java.lang.String GENERIC_TZ = "vvvv";
@@ -17833,6 +17835,7 @@
     method public int getCalendarField();
     method public static android.icu.text.DateFormat.Field ofCalendarField(int);
     field public static final android.icu.text.DateFormat.Field AM_PM;
+    field public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
     field public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
@@ -17840,6 +17843,7 @@
     field public static final android.icu.text.DateFormat.Field DOW_LOCAL;
     field public static final android.icu.text.DateFormat.Field ERA;
     field public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+    field public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
     field public static final android.icu.text.DateFormat.Field HOUR0;
     field public static final android.icu.text.DateFormat.Field HOUR1;
     field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
@@ -18011,70 +18015,70 @@
     ctor public DecimalFormat(java.lang.String);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols, android.icu.text.CurrencyPluralInfo, int);
-    method public void applyLocalizedPattern(java.lang.String);
-    method public void applyPattern(java.lang.String);
-    method public boolean areSignificantDigitsUsed();
+    method public synchronized void applyLocalizedPattern(java.lang.String);
+    method public synchronized void applyPattern(java.lang.String);
+    method public synchronized boolean areSignificantDigitsUsed();
     method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigInteger, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(android.icu.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
-    method public android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
-    method public android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
-    method public android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
-    method public int getFormatWidth();
-    method public int getGroupingSize();
-    method public java.math.MathContext getMathContext();
-    method public android.icu.math.MathContext getMathContextICU();
-    method public int getMaximumSignificantDigits();
-    method public byte getMinimumExponentDigits();
-    method public int getMinimumSignificantDigits();
-    method public int getMultiplier();
-    method public java.lang.String getNegativePrefix();
-    method public java.lang.String getNegativeSuffix();
-    method public char getPadCharacter();
-    method public int getPadPosition();
-    method public int getParseMaxDigits();
-    method public java.lang.String getPositivePrefix();
-    method public java.lang.String getPositiveSuffix();
-    method public java.math.BigDecimal getRoundingIncrement();
-    method public int getSecondaryGroupingSize();
-    method public boolean isDecimalPatternMatchRequired();
-    method public boolean isDecimalSeparatorAlwaysShown();
-    method public boolean isExponentSignAlwaysShown();
-    method public boolean isParseBigDecimal();
-    method public boolean isScientificNotation();
+    method public synchronized android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
+    method public synchronized android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
+    method public synchronized android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public synchronized int getFormatWidth();
+    method public synchronized int getGroupingSize();
+    method public synchronized java.math.MathContext getMathContext();
+    method public synchronized android.icu.math.MathContext getMathContextICU();
+    method public synchronized int getMaximumSignificantDigits();
+    method public synchronized byte getMinimumExponentDigits();
+    method public synchronized int getMinimumSignificantDigits();
+    method public synchronized int getMultiplier();
+    method public synchronized java.lang.String getNegativePrefix();
+    method public synchronized java.lang.String getNegativeSuffix();
+    method public synchronized char getPadCharacter();
+    method public synchronized int getPadPosition();
+    method public deprecated int getParseMaxDigits();
+    method public synchronized java.lang.String getPositivePrefix();
+    method public synchronized java.lang.String getPositiveSuffix();
+    method public synchronized java.math.BigDecimal getRoundingIncrement();
+    method public synchronized int getSecondaryGroupingSize();
+    method public synchronized boolean isDecimalPatternMatchRequired();
+    method public synchronized boolean isDecimalSeparatorAlwaysShown();
+    method public synchronized boolean isExponentSignAlwaysShown();
+    method public synchronized boolean isParseBigDecimal();
+    method public synchronized boolean isScientificNotation();
     method public java.lang.Number parse(java.lang.String, java.text.ParsePosition);
-    method public void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
-    method public void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
-    method public void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
-    method public void setDecimalPatternMatchRequired(boolean);
-    method public void setDecimalSeparatorAlwaysShown(boolean);
-    method public void setExponentSignAlwaysShown(boolean);
-    method public void setFormatWidth(int);
-    method public void setGroupingSize(int);
-    method public void setMathContext(java.math.MathContext);
-    method public void setMathContextICU(android.icu.math.MathContext);
-    method public void setMaximumSignificantDigits(int);
-    method public void setMinimumExponentDigits(byte);
-    method public void setMinimumSignificantDigits(int);
-    method public void setMultiplier(int);
-    method public void setNegativePrefix(java.lang.String);
-    method public void setNegativeSuffix(java.lang.String);
-    method public void setPadCharacter(char);
-    method public void setPadPosition(int);
-    method public void setParseBigDecimal(boolean);
-    method public void setParseMaxDigits(int);
-    method public void setPositivePrefix(java.lang.String);
-    method public void setPositiveSuffix(java.lang.String);
-    method public void setRoundingIncrement(java.math.BigDecimal);
-    method public void setRoundingIncrement(android.icu.math.BigDecimal);
-    method public void setRoundingIncrement(double);
-    method public void setScientificNotation(boolean);
-    method public void setSecondaryGroupingSize(int);
-    method public void setSignificantDigitsUsed(boolean);
-    method public java.lang.String toLocalizedPattern();
-    method public java.lang.String toPattern();
+    method public synchronized void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
+    method public synchronized void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
+    method public synchronized void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
+    method public synchronized void setDecimalPatternMatchRequired(boolean);
+    method public synchronized void setDecimalSeparatorAlwaysShown(boolean);
+    method public synchronized void setExponentSignAlwaysShown(boolean);
+    method public synchronized void setFormatWidth(int);
+    method public synchronized void setGroupingSize(int);
+    method public synchronized void setMathContext(java.math.MathContext);
+    method public synchronized void setMathContextICU(android.icu.math.MathContext);
+    method public synchronized void setMaximumSignificantDigits(int);
+    method public synchronized void setMinimumExponentDigits(byte);
+    method public synchronized void setMinimumSignificantDigits(int);
+    method public synchronized void setMultiplier(int);
+    method public synchronized void setNegativePrefix(java.lang.String);
+    method public synchronized void setNegativeSuffix(java.lang.String);
+    method public synchronized void setPadCharacter(char);
+    method public synchronized void setPadPosition(int);
+    method public synchronized void setParseBigDecimal(boolean);
+    method public deprecated void setParseMaxDigits(int);
+    method public synchronized void setPositivePrefix(java.lang.String);
+    method public synchronized void setPositiveSuffix(java.lang.String);
+    method public synchronized void setRoundingIncrement(java.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(android.icu.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(double);
+    method public synchronized void setScientificNotation(boolean);
+    method public synchronized void setSecondaryGroupingSize(int);
+    method public synchronized void setSignificantDigitsUsed(boolean);
+    method public synchronized java.lang.String toLocalizedPattern();
+    method public synchronized java.lang.String toPattern();
     field public static final int PAD_AFTER_PREFIX = 1; // 0x1
     field public static final int PAD_AFTER_SUFFIX = 3; // 0x3
     field public static final int PAD_BEFORE_PREFIX = 0; // 0x0
@@ -18622,6 +18626,8 @@
     method public java.lang.String combineDateAndTime(java.lang.String, java.lang.String);
     method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
     method public java.lang.String format(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public java.lang.String formatNumeric(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
     method public android.icu.text.DisplayContext getCapitalizationContext();
     method public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle();
     method public static android.icu.text.RelativeDateTimeFormatter getInstance();
@@ -18661,6 +18667,26 @@
     enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction THIS;
   }
 
+  public static final class RelativeDateTimeFormatter.RelativeDateTimeUnit extends java.lang.Enum {
+    method public static android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit valueOf(java.lang.String);
+    method public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit[] values();
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SECOND;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit YEAR;
+  }
+
   public static final class RelativeDateTimeFormatter.RelativeUnit extends java.lang.Enum {
     method public static android.icu.text.RelativeDateTimeFormatter.RelativeUnit valueOf(java.lang.String);
     method public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit[] values();
@@ -19731,6 +19757,7 @@
     field public static final android.icu.util.MeasureUnit FOOT;
     field public static final android.icu.util.MeasureUnit FURLONG;
     field public static final android.icu.util.MeasureUnit GALLON;
+    field public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
     field public static final android.icu.util.MeasureUnit GIGABIT;
     field public static final android.icu.util.MeasureUnit GIGABYTE;
@@ -19779,11 +19806,13 @@
     field public static final android.icu.util.MeasureUnit MICROSECOND;
     field public static final android.icu.util.MeasureUnit MILE;
     field public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
     field public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
     field public static final android.icu.util.MeasureUnit MILLIAMPERE;
     field public static final android.icu.util.MeasureUnit MILLIBAR;
     field public static final android.icu.util.MeasureUnit MILLIGRAM;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
     field public static final android.icu.util.MeasureUnit MILLILITER;
     field public static final android.icu.util.MeasureUnit MILLIMETER;
     field public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
@@ -20087,7 +20116,7 @@
     field public static final int JAVA_TIME = 0; // 0x0
     field public static final int MAC_OLD_TIME = 5; // 0x5
     field public static final int MAC_TIME = 6; // 0x6
-    field public static final int MAX_SCALE = 10; // 0xa
+    field public static final deprecated int MAX_SCALE = 10; // 0xa
     field public static final int TO_MAX_VALUE = 5; // 0x5
     field public static final int TO_MIN_VALUE = 4; // 0x4
     field public static final int UNITS_VALUE = 0; // 0x0
diff --git a/api/system-current.txt b/api/system-current.txt
index bb5c81e..08d2235 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -19244,6 +19244,7 @@
     field public static final java.lang.String ABBR_UTC_TZ = "ZZZZ";
     field public static final java.lang.String ABBR_WEEKDAY = "E";
     field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
     field public static final int DATE_FIELD = 3; // 0x3
     field public static final java.lang.String DAY = "d";
     field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
@@ -19253,6 +19254,7 @@
     field public static final int DOW_LOCAL_FIELD = 19; // 0x13
     field public static final int ERA_FIELD = 0; // 0x0
     field public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+    field public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
     field public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
     field public static final int FULL = 0; // 0x0
     field public static final java.lang.String GENERIC_TZ = "vvvv";
@@ -19341,6 +19343,7 @@
     method public int getCalendarField();
     method public static android.icu.text.DateFormat.Field ofCalendarField(int);
     field public static final android.icu.text.DateFormat.Field AM_PM;
+    field public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
     field public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
@@ -19348,6 +19351,7 @@
     field public static final android.icu.text.DateFormat.Field DOW_LOCAL;
     field public static final android.icu.text.DateFormat.Field ERA;
     field public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+    field public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
     field public static final android.icu.text.DateFormat.Field HOUR0;
     field public static final android.icu.text.DateFormat.Field HOUR1;
     field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
@@ -19519,70 +19523,70 @@
     ctor public DecimalFormat(java.lang.String);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols, android.icu.text.CurrencyPluralInfo, int);
-    method public void applyLocalizedPattern(java.lang.String);
-    method public void applyPattern(java.lang.String);
-    method public boolean areSignificantDigitsUsed();
+    method public synchronized void applyLocalizedPattern(java.lang.String);
+    method public synchronized void applyPattern(java.lang.String);
+    method public synchronized boolean areSignificantDigitsUsed();
     method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigInteger, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(android.icu.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
-    method public android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
-    method public android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
-    method public android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
-    method public int getFormatWidth();
-    method public int getGroupingSize();
-    method public java.math.MathContext getMathContext();
-    method public android.icu.math.MathContext getMathContextICU();
-    method public int getMaximumSignificantDigits();
-    method public byte getMinimumExponentDigits();
-    method public int getMinimumSignificantDigits();
-    method public int getMultiplier();
-    method public java.lang.String getNegativePrefix();
-    method public java.lang.String getNegativeSuffix();
-    method public char getPadCharacter();
-    method public int getPadPosition();
-    method public int getParseMaxDigits();
-    method public java.lang.String getPositivePrefix();
-    method public java.lang.String getPositiveSuffix();
-    method public java.math.BigDecimal getRoundingIncrement();
-    method public int getSecondaryGroupingSize();
-    method public boolean isDecimalPatternMatchRequired();
-    method public boolean isDecimalSeparatorAlwaysShown();
-    method public boolean isExponentSignAlwaysShown();
-    method public boolean isParseBigDecimal();
-    method public boolean isScientificNotation();
+    method public synchronized android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
+    method public synchronized android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
+    method public synchronized android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public synchronized int getFormatWidth();
+    method public synchronized int getGroupingSize();
+    method public synchronized java.math.MathContext getMathContext();
+    method public synchronized android.icu.math.MathContext getMathContextICU();
+    method public synchronized int getMaximumSignificantDigits();
+    method public synchronized byte getMinimumExponentDigits();
+    method public synchronized int getMinimumSignificantDigits();
+    method public synchronized int getMultiplier();
+    method public synchronized java.lang.String getNegativePrefix();
+    method public synchronized java.lang.String getNegativeSuffix();
+    method public synchronized char getPadCharacter();
+    method public synchronized int getPadPosition();
+    method public deprecated int getParseMaxDigits();
+    method public synchronized java.lang.String getPositivePrefix();
+    method public synchronized java.lang.String getPositiveSuffix();
+    method public synchronized java.math.BigDecimal getRoundingIncrement();
+    method public synchronized int getSecondaryGroupingSize();
+    method public synchronized boolean isDecimalPatternMatchRequired();
+    method public synchronized boolean isDecimalSeparatorAlwaysShown();
+    method public synchronized boolean isExponentSignAlwaysShown();
+    method public synchronized boolean isParseBigDecimal();
+    method public synchronized boolean isScientificNotation();
     method public java.lang.Number parse(java.lang.String, java.text.ParsePosition);
-    method public void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
-    method public void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
-    method public void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
-    method public void setDecimalPatternMatchRequired(boolean);
-    method public void setDecimalSeparatorAlwaysShown(boolean);
-    method public void setExponentSignAlwaysShown(boolean);
-    method public void setFormatWidth(int);
-    method public void setGroupingSize(int);
-    method public void setMathContext(java.math.MathContext);
-    method public void setMathContextICU(android.icu.math.MathContext);
-    method public void setMaximumSignificantDigits(int);
-    method public void setMinimumExponentDigits(byte);
-    method public void setMinimumSignificantDigits(int);
-    method public void setMultiplier(int);
-    method public void setNegativePrefix(java.lang.String);
-    method public void setNegativeSuffix(java.lang.String);
-    method public void setPadCharacter(char);
-    method public void setPadPosition(int);
-    method public void setParseBigDecimal(boolean);
-    method public void setParseMaxDigits(int);
-    method public void setPositivePrefix(java.lang.String);
-    method public void setPositiveSuffix(java.lang.String);
-    method public void setRoundingIncrement(java.math.BigDecimal);
-    method public void setRoundingIncrement(android.icu.math.BigDecimal);
-    method public void setRoundingIncrement(double);
-    method public void setScientificNotation(boolean);
-    method public void setSecondaryGroupingSize(int);
-    method public void setSignificantDigitsUsed(boolean);
-    method public java.lang.String toLocalizedPattern();
-    method public java.lang.String toPattern();
+    method public synchronized void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
+    method public synchronized void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
+    method public synchronized void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
+    method public synchronized void setDecimalPatternMatchRequired(boolean);
+    method public synchronized void setDecimalSeparatorAlwaysShown(boolean);
+    method public synchronized void setExponentSignAlwaysShown(boolean);
+    method public synchronized void setFormatWidth(int);
+    method public synchronized void setGroupingSize(int);
+    method public synchronized void setMathContext(java.math.MathContext);
+    method public synchronized void setMathContextICU(android.icu.math.MathContext);
+    method public synchronized void setMaximumSignificantDigits(int);
+    method public synchronized void setMinimumExponentDigits(byte);
+    method public synchronized void setMinimumSignificantDigits(int);
+    method public synchronized void setMultiplier(int);
+    method public synchronized void setNegativePrefix(java.lang.String);
+    method public synchronized void setNegativeSuffix(java.lang.String);
+    method public synchronized void setPadCharacter(char);
+    method public synchronized void setPadPosition(int);
+    method public synchronized void setParseBigDecimal(boolean);
+    method public deprecated void setParseMaxDigits(int);
+    method public synchronized void setPositivePrefix(java.lang.String);
+    method public synchronized void setPositiveSuffix(java.lang.String);
+    method public synchronized void setRoundingIncrement(java.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(android.icu.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(double);
+    method public synchronized void setScientificNotation(boolean);
+    method public synchronized void setSecondaryGroupingSize(int);
+    method public synchronized void setSignificantDigitsUsed(boolean);
+    method public synchronized java.lang.String toLocalizedPattern();
+    method public synchronized java.lang.String toPattern();
     field public static final int PAD_AFTER_PREFIX = 1; // 0x1
     field public static final int PAD_AFTER_SUFFIX = 3; // 0x3
     field public static final int PAD_BEFORE_PREFIX = 0; // 0x0
@@ -20130,6 +20134,8 @@
     method public java.lang.String combineDateAndTime(java.lang.String, java.lang.String);
     method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
     method public java.lang.String format(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public java.lang.String formatNumeric(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
     method public android.icu.text.DisplayContext getCapitalizationContext();
     method public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle();
     method public static android.icu.text.RelativeDateTimeFormatter getInstance();
@@ -20169,6 +20175,26 @@
     enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction THIS;
   }
 
+  public static final class RelativeDateTimeFormatter.RelativeDateTimeUnit extends java.lang.Enum {
+    method public static android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit valueOf(java.lang.String);
+    method public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit[] values();
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SECOND;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit YEAR;
+  }
+
   public static final class RelativeDateTimeFormatter.RelativeUnit extends java.lang.Enum {
     method public static android.icu.text.RelativeDateTimeFormatter.RelativeUnit valueOf(java.lang.String);
     method public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit[] values();
@@ -21239,6 +21265,7 @@
     field public static final android.icu.util.MeasureUnit FOOT;
     field public static final android.icu.util.MeasureUnit FURLONG;
     field public static final android.icu.util.MeasureUnit GALLON;
+    field public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
     field public static final android.icu.util.MeasureUnit GIGABIT;
     field public static final android.icu.util.MeasureUnit GIGABYTE;
@@ -21287,11 +21314,13 @@
     field public static final android.icu.util.MeasureUnit MICROSECOND;
     field public static final android.icu.util.MeasureUnit MILE;
     field public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
     field public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
     field public static final android.icu.util.MeasureUnit MILLIAMPERE;
     field public static final android.icu.util.MeasureUnit MILLIBAR;
     field public static final android.icu.util.MeasureUnit MILLIGRAM;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
     field public static final android.icu.util.MeasureUnit MILLILITER;
     field public static final android.icu.util.MeasureUnit MILLIMETER;
     field public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
@@ -21595,7 +21624,7 @@
     field public static final int JAVA_TIME = 0; // 0x0
     field public static final int MAC_OLD_TIME = 5; // 0x5
     field public static final int MAC_TIME = 6; // 0x6
-    field public static final int MAX_SCALE = 10; // 0xa
+    field public static final deprecated int MAX_SCALE = 10; // 0xa
     field public static final int TO_MAX_VALUE = 5; // 0x5
     field public static final int TO_MIN_VALUE = 4; // 0x4
     field public static final int UNITS_VALUE = 0; // 0x0
diff --git a/api/test-current.txt b/api/test-current.txt
index cc78d4d..f06b8f5 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -17787,6 +17787,7 @@
     field public static final java.lang.String ABBR_UTC_TZ = "ZZZZ";
     field public static final java.lang.String ABBR_WEEKDAY = "E";
     field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
     field public static final int DATE_FIELD = 3; // 0x3
     field public static final java.lang.String DAY = "d";
     field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
@@ -17796,6 +17797,7 @@
     field public static final int DOW_LOCAL_FIELD = 19; // 0x13
     field public static final int ERA_FIELD = 0; // 0x0
     field public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+    field public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
     field public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
     field public static final int FULL = 0; // 0x0
     field public static final java.lang.String GENERIC_TZ = "vvvv";
@@ -17884,6 +17886,7 @@
     method public int getCalendarField();
     method public static android.icu.text.DateFormat.Field ofCalendarField(int);
     field public static final android.icu.text.DateFormat.Field AM_PM;
+    field public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
     field public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
     field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
@@ -17891,6 +17894,7 @@
     field public static final android.icu.text.DateFormat.Field DOW_LOCAL;
     field public static final android.icu.text.DateFormat.Field ERA;
     field public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+    field public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
     field public static final android.icu.text.DateFormat.Field HOUR0;
     field public static final android.icu.text.DateFormat.Field HOUR1;
     field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
@@ -18062,70 +18066,70 @@
     ctor public DecimalFormat(java.lang.String);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols);
     ctor public DecimalFormat(java.lang.String, android.icu.text.DecimalFormatSymbols, android.icu.text.CurrencyPluralInfo, int);
-    method public void applyLocalizedPattern(java.lang.String);
-    method public void applyPattern(java.lang.String);
-    method public boolean areSignificantDigitsUsed();
+    method public synchronized void applyLocalizedPattern(java.lang.String);
+    method public synchronized void applyPattern(java.lang.String);
+    method public synchronized boolean areSignificantDigitsUsed();
     method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigInteger, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(java.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
     method public java.lang.StringBuffer format(android.icu.math.BigDecimal, java.lang.StringBuffer, java.text.FieldPosition);
-    method public android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
-    method public android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
-    method public android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
-    method public int getFormatWidth();
-    method public int getGroupingSize();
-    method public java.math.MathContext getMathContext();
-    method public android.icu.math.MathContext getMathContextICU();
-    method public int getMaximumSignificantDigits();
-    method public byte getMinimumExponentDigits();
-    method public int getMinimumSignificantDigits();
-    method public int getMultiplier();
-    method public java.lang.String getNegativePrefix();
-    method public java.lang.String getNegativeSuffix();
-    method public char getPadCharacter();
-    method public int getPadPosition();
-    method public int getParseMaxDigits();
-    method public java.lang.String getPositivePrefix();
-    method public java.lang.String getPositiveSuffix();
-    method public java.math.BigDecimal getRoundingIncrement();
-    method public int getSecondaryGroupingSize();
-    method public boolean isDecimalPatternMatchRequired();
-    method public boolean isDecimalSeparatorAlwaysShown();
-    method public boolean isExponentSignAlwaysShown();
-    method public boolean isParseBigDecimal();
-    method public boolean isScientificNotation();
+    method public synchronized android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
+    method public synchronized android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
+    method public synchronized android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public synchronized int getFormatWidth();
+    method public synchronized int getGroupingSize();
+    method public synchronized java.math.MathContext getMathContext();
+    method public synchronized android.icu.math.MathContext getMathContextICU();
+    method public synchronized int getMaximumSignificantDigits();
+    method public synchronized byte getMinimumExponentDigits();
+    method public synchronized int getMinimumSignificantDigits();
+    method public synchronized int getMultiplier();
+    method public synchronized java.lang.String getNegativePrefix();
+    method public synchronized java.lang.String getNegativeSuffix();
+    method public synchronized char getPadCharacter();
+    method public synchronized int getPadPosition();
+    method public deprecated int getParseMaxDigits();
+    method public synchronized java.lang.String getPositivePrefix();
+    method public synchronized java.lang.String getPositiveSuffix();
+    method public synchronized java.math.BigDecimal getRoundingIncrement();
+    method public synchronized int getSecondaryGroupingSize();
+    method public synchronized boolean isDecimalPatternMatchRequired();
+    method public synchronized boolean isDecimalSeparatorAlwaysShown();
+    method public synchronized boolean isExponentSignAlwaysShown();
+    method public synchronized boolean isParseBigDecimal();
+    method public synchronized boolean isScientificNotation();
     method public java.lang.Number parse(java.lang.String, java.text.ParsePosition);
-    method public void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
-    method public void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
-    method public void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
-    method public void setDecimalPatternMatchRequired(boolean);
-    method public void setDecimalSeparatorAlwaysShown(boolean);
-    method public void setExponentSignAlwaysShown(boolean);
-    method public void setFormatWidth(int);
-    method public void setGroupingSize(int);
-    method public void setMathContext(java.math.MathContext);
-    method public void setMathContextICU(android.icu.math.MathContext);
-    method public void setMaximumSignificantDigits(int);
-    method public void setMinimumExponentDigits(byte);
-    method public void setMinimumSignificantDigits(int);
-    method public void setMultiplier(int);
-    method public void setNegativePrefix(java.lang.String);
-    method public void setNegativeSuffix(java.lang.String);
-    method public void setPadCharacter(char);
-    method public void setPadPosition(int);
-    method public void setParseBigDecimal(boolean);
-    method public void setParseMaxDigits(int);
-    method public void setPositivePrefix(java.lang.String);
-    method public void setPositiveSuffix(java.lang.String);
-    method public void setRoundingIncrement(java.math.BigDecimal);
-    method public void setRoundingIncrement(android.icu.math.BigDecimal);
-    method public void setRoundingIncrement(double);
-    method public void setScientificNotation(boolean);
-    method public void setSecondaryGroupingSize(int);
-    method public void setSignificantDigitsUsed(boolean);
-    method public java.lang.String toLocalizedPattern();
-    method public java.lang.String toPattern();
+    method public synchronized void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
+    method public synchronized void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
+    method public synchronized void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
+    method public synchronized void setDecimalPatternMatchRequired(boolean);
+    method public synchronized void setDecimalSeparatorAlwaysShown(boolean);
+    method public synchronized void setExponentSignAlwaysShown(boolean);
+    method public synchronized void setFormatWidth(int);
+    method public synchronized void setGroupingSize(int);
+    method public synchronized void setMathContext(java.math.MathContext);
+    method public synchronized void setMathContextICU(android.icu.math.MathContext);
+    method public synchronized void setMaximumSignificantDigits(int);
+    method public synchronized void setMinimumExponentDigits(byte);
+    method public synchronized void setMinimumSignificantDigits(int);
+    method public synchronized void setMultiplier(int);
+    method public synchronized void setNegativePrefix(java.lang.String);
+    method public synchronized void setNegativeSuffix(java.lang.String);
+    method public synchronized void setPadCharacter(char);
+    method public synchronized void setPadPosition(int);
+    method public synchronized void setParseBigDecimal(boolean);
+    method public deprecated void setParseMaxDigits(int);
+    method public synchronized void setPositivePrefix(java.lang.String);
+    method public synchronized void setPositiveSuffix(java.lang.String);
+    method public synchronized void setRoundingIncrement(java.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(android.icu.math.BigDecimal);
+    method public synchronized void setRoundingIncrement(double);
+    method public synchronized void setScientificNotation(boolean);
+    method public synchronized void setSecondaryGroupingSize(int);
+    method public synchronized void setSignificantDigitsUsed(boolean);
+    method public synchronized java.lang.String toLocalizedPattern();
+    method public synchronized java.lang.String toPattern();
     field public static final int PAD_AFTER_PREFIX = 1; // 0x1
     field public static final int PAD_AFTER_SUFFIX = 3; // 0x3
     field public static final int PAD_BEFORE_PREFIX = 0; // 0x0
@@ -18673,6 +18677,8 @@
     method public java.lang.String combineDateAndTime(java.lang.String, java.lang.String);
     method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
     method public java.lang.String format(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public java.lang.String format(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public java.lang.String formatNumeric(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
     method public android.icu.text.DisplayContext getCapitalizationContext();
     method public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle();
     method public static android.icu.text.RelativeDateTimeFormatter getInstance();
@@ -18712,6 +18718,26 @@
     enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction THIS;
   }
 
+  public static final class RelativeDateTimeFormatter.RelativeDateTimeUnit extends java.lang.Enum {
+    method public static android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit valueOf(java.lang.String);
+    method public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit[] values();
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SECOND;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit YEAR;
+  }
+
   public static final class RelativeDateTimeFormatter.RelativeUnit extends java.lang.Enum {
     method public static android.icu.text.RelativeDateTimeFormatter.RelativeUnit valueOf(java.lang.String);
     method public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit[] values();
@@ -19782,6 +19808,7 @@
     field public static final android.icu.util.MeasureUnit FOOT;
     field public static final android.icu.util.MeasureUnit FURLONG;
     field public static final android.icu.util.MeasureUnit GALLON;
+    field public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
     field public static final android.icu.util.MeasureUnit GIGABIT;
     field public static final android.icu.util.MeasureUnit GIGABYTE;
@@ -19830,11 +19857,13 @@
     field public static final android.icu.util.MeasureUnit MICROSECOND;
     field public static final android.icu.util.MeasureUnit MILE;
     field public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
     field public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
     field public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
     field public static final android.icu.util.MeasureUnit MILLIAMPERE;
     field public static final android.icu.util.MeasureUnit MILLIBAR;
     field public static final android.icu.util.MeasureUnit MILLIGRAM;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
     field public static final android.icu.util.MeasureUnit MILLILITER;
     field public static final android.icu.util.MeasureUnit MILLIMETER;
     field public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
@@ -20138,7 +20167,7 @@
     field public static final int JAVA_TIME = 0; // 0x0
     field public static final int MAC_OLD_TIME = 5; // 0x5
     field public static final int MAC_TIME = 6; // 0x6
-    field public static final int MAX_SCALE = 10; // 0xa
+    field public static final deprecated int MAX_SCALE = 10; // 0xa
     field public static final int TO_MAX_VALUE = 5; // 0x5
     field public static final int TO_MIN_VALUE = 4; // 0x4
     field public static final int UNITS_VALUE = 0; // 0x0