diff options
| -rw-r--r-- | core/java/android/os/Build.java | 19 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/os/BuildTest.java | 24 |
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); + }); + } } |