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

Change-Id: Ib719b796bb3dc5c64c95839a0d2f8f3c24cd2c7c
diff --git a/api/current.txt b/api/current.txt
index 093df08..97facec 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -17835,6 +17835,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
@@ -17844,6 +17845,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";
@@ -17932,6 +17934,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;
@@ -17939,6 +17942,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;
@@ -18111,70 +18115,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
@@ -18722,6 +18726,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();
@@ -18761,6 +18767,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();
@@ -19833,6 +19859,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;
@@ -19881,11 +19908,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;
@@ -20189,7 +20218,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 b2a9202..2212fd0 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -19379,6 +19379,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
@@ -19388,6 +19389,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";
@@ -19476,6 +19478,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;
@@ -19483,6 +19486,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;
@@ -19655,70 +19659,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
@@ -20266,6 +20270,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();
@@ -20305,6 +20311,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();
@@ -21377,6 +21403,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;
@@ -21425,11 +21452,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;
@@ -21733,7 +21762,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 1bc0403..36515a55 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -17913,6 +17913,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
@@ -17922,6 +17923,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";
@@ -18010,6 +18012,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;
@@ -18017,6 +18020,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;
@@ -18189,70 +18193,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
@@ -18800,6 +18804,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();
@@ -18839,6 +18845,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();
@@ -19911,6 +19937,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;
@@ -19959,11 +19986,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;
@@ -20267,7 +20296,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