diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index 8c90156d159d5..f0b613ee0468b 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -32,7 +32,6 @@ import android.text.BidiFormatter;
import android.text.TextUtils;
import android.view.View;
-import java.lang.reflect.Constructor;
import java.math.BigDecimal;
import java.util.Locale;
@@ -195,29 +194,13 @@ public final class Formatter {
/**
* ICU doesn't support PETABYTE yet. Fake it so that we can treat all units the same way.
+ * {@hide}
*/
- private static final MeasureUnit PETABYTE = createPetaByte();
+ public static final MeasureUnit PETABYTE = MeasureUnit.internalGetInstance(
+ "digital", "petabyte");
- /**
- * Create a petabyte MeasureUnit without registering it with ICU.
- * ICU doesn't support user-create MeasureUnit and the only public (but hidden) method to do so
- * is {@link MeasureUnit#internalGetInstance(String, String)} which also registers the unit as
- * an available type and thus leaks it to code that doesn't expect or support it.
- *
This method uses reflection to create an instance of MeasureUnit to avoid leaking it. This
- * instance is only to be used in this class.
- */
- private static MeasureUnit createPetaByte() {
- try {
- Constructor constructor = MeasureUnit.class
- .getDeclaredConstructor(String.class, String.class);
- constructor.setAccessible(true);
- return constructor.newInstance("digital", "petabyte");
- } catch (ReflectiveOperationException e) {
- throw new RuntimeException("Failed to create petabyte MeasureUnit", e);
- }
- }
-
- private static class RoundedBytesResult {
+ /** {@hide} */
+ public static class RoundedBytesResult {
public final float value;
public final MeasureUnit units;
public final int fractionDigits;
@@ -235,7 +218,7 @@ public final class Formatter {
* Returns a RoundedBytesResult object based on the input size in bytes and the rounding
* flags. The result can be used for formatting.
*/
- static RoundedBytesResult roundBytes(long sizeBytes, int flags) {
+ public static RoundedBytesResult roundBytes(long sizeBytes, int flags) {
final boolean isNegative = (sizeBytes < 0);
float result = isNegative ? -sizeBytes : sizeBytes;
MeasureUnit units = MeasureUnit.BYTE;
diff --git a/core/tests/coretests/src/android/text/format/FormatterTest.java b/core/tests/coretests/src/android/text/format/FormatterTest.java
index 9c544f47717ca..04d2dad4e2241 100644
--- a/core/tests/coretests/src/android/text/format/FormatterTest.java
+++ b/core/tests/coretests/src/android/text/format/FormatterTest.java
@@ -17,7 +17,6 @@
package android.text.format;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
import android.content.Context;
import android.content.res.Configuration;
@@ -210,24 +209,4 @@ public class FormatterTest {
Locale.setDefault(locale);
}
-
- /**
- * Verifies that Formatter doesn't "leak" the locally defined petabyte unit into ICU via the
- * {@link MeasureUnit} registry. This test can fail for two reasons:
- * 1. we regressed and started leaking again. In this case the code needs to be fixed.
- * 2. ICU started supporting petabyte as a unit, in which case change one needs to revert this
- * change (I494fb59a3b3742f35cbdf6b8705817f404a2c6b0), remove Formatter.PETABYTE and replace any
- * usages of that field with just MeasureUnit.PETABYTE.
- */
- // http://b/65632959
- @Test
- public void doesNotLeakPetabyte() {
- // Ensure that the Formatter class is loaded when we call .getAvailable().
- Formatter.formatFileSize(mContext, Long.MAX_VALUE);
- Set digitalUnits = MeasureUnit.getAvailable("digital");
- for (MeasureUnit unit : digitalUnits) {
- // This assert can fail if we don't leak PETABYTE, but ICU has added it, see #2 above.
- assertNotEquals("petabyte", unit.getSubtype());
- }
- }
}