summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Build.java19
-rw-r--r--core/tests/coretests/src/android/os/BuildTest.java24
2 files changed, 43 insertions, 0 deletions
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index e9ce759248ae..9b39c62ad03e 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -1578,6 +1578,25 @@ public class Build {
}
/**
+ * Convert an int representing a major.minor version like SDK_INT_FULL to a
+ * human readable string. The returned string is only intended for debug
+ * and error messages.
+ *
+ * @param version the int to convert to a string
+ * @return a String representing the same major.minor version as the int passed in
+ * @throws IllegalArgumentException if {@code version} is negative
+ *
+ * @hide
+ */
+ public static String fullVersionToString(@SdkIntFull int version) {
+ if (version < 0) {
+ throw new IllegalArgumentException("failed to convert '" + version
+ + "' to string: not a valid major.minor version code");
+ }
+ return String.format("%d.%d", getMajorSdkVersion(version), getMinorSdkVersion(version));
+ }
+
+ /**
* The vendor API for 2024 Q2
*
* <p>For Android 14-QPR3 and later, the vendor API level is completely decoupled from the SDK
diff --git a/core/tests/coretests/src/android/os/BuildTest.java b/core/tests/coretests/src/android/os/BuildTest.java
index 9cb2b93da6ab..2a67716aa215 100644
--- a/core/tests/coretests/src/android/os/BuildTest.java
+++ b/core/tests/coretests/src/android/os/BuildTest.java
@@ -176,4 +176,28 @@ public class BuildTest {
Build.parseFullVersion("12.-34");
});
}
+
+ @Test
+ public void testFullVersionToStringCorrectInput() throws Exception {
+ assertEquals("0.0", Build.fullVersionToString(0));
+ assertEquals("1.0", Build.fullVersionToString(1 * 100000 + 0));
+ assertEquals("1.1", Build.fullVersionToString(1 * 100000 + 1));
+ assertEquals("12.34", Build.fullVersionToString(12 * 100000 + 34));
+ }
+
+ @Test
+ public void testFullVersionToStringSameStringAfterRoundTripViaParseFullVersion()
+ throws Exception {
+ String s = "12.34";
+ int major = Build.getMajorSdkVersion(Build.parseFullVersion(s));
+ int minor = Build.getMinorSdkVersion(Build.parseFullVersion(s));
+ assertEquals(s, Build.fullVersionToString(major * 100000 + minor));
+ }
+
+ @Test
+ public void testFullVersionToStringIncorrectInputNegativeVersion() throws Exception {
+ assertThrows(IllegalArgumentException.class, () -> {
+ Build.fullVersionToString(-1);
+ });
+ }
}