diff options
| author | 2020-12-16 12:22:17 +0000 | |
|---|---|---|
| committer | 2020-12-17 00:14:51 +0000 | |
| commit | 8ddbc54f5f34ea6d4790c282e0df988c3c461eed (patch) | |
| tree | 233b7d9db21393be9884eb21d24b6d37591f795f | |
| parent | e8f300c360ca8ae2697fc22d0a312669def614fb (diff) | |
Replace LanguageTag.isLanguage with public API
Libcore will be modulized and updatable, and thus
avoid using libcore's private API.
No behavior change.
Bug: 154796679
Test: HdmiCecControllerTest#testIsLanguage
Merged-In: If9cc4df26182141d292a218a5f4cba442e802309
Change-Id: If9cc4df26182141d292a218a5f4cba442e802309
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiCecController.java | 25 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java | 17 |
2 files changed, 39 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java index 535284083d11..0fdb8798af6f 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecController.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java @@ -26,6 +26,8 @@ import android.hardware.tv.cec.V1_0.IHdmiCec.getPhysicalAddressCallback; import android.hardware.tv.cec.V1_0.IHdmiCecCallback; import android.hardware.tv.cec.V1_0.Result; import android.hardware.tv.cec.V1_0.SendMessageResult; +import android.icu.util.IllformedLocaleException; +import android.icu.util.ULocale; import android.os.Handler; import android.os.IHwBinder; import android.os.Looper; @@ -33,6 +35,7 @@ import android.os.RemoteException; import android.util.Slog; import android.util.SparseArray; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import com.android.server.hdmi.HdmiAnnotations.IoThreadOnly; import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly; @@ -48,8 +51,6 @@ import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.function.Predicate; -import sun.util.locale.LanguageTag; - /** * Manages HDMI-CEC command and behaviors. It converts user's command into CEC command * and pass it to CEC HAL so that it sends message to other device. For incoming @@ -369,13 +370,31 @@ final class HdmiCecController { @ServiceThreadOnly void setLanguage(String language) { assertRunOnServiceThread(); - if (!LanguageTag.isLanguage(language)) { + if (!isLanguage(language)) { return; } mNativeWrapperImpl.nativeSetLanguage(language); } /** + * Returns true if the language code is well-formed. + */ + @VisibleForTesting static boolean isLanguage(String language) { + // Handle null and empty string because because ULocale.Builder#setLanguage accepts them. + if (language == null || language.isEmpty()) { + return false; + } + + ULocale.Builder builder = new ULocale.Builder(); + try { + builder.setLanguage(language); + return true; + } catch (IllformedLocaleException e) { + return false; + } + } + + /** * Configure ARC circuit in the hardware logic to start or stop the feature. * * @param port ID of HDMI port to which AVR is connected diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java index 5d8131f35eb7..d905b69ce37f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java @@ -28,6 +28,8 @@ import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; import android.content.Context; import android.hardware.tv.cec.V1_0.SendMessageResult; @@ -189,4 +191,19 @@ public class HdmiCecControllerTest { mTestLooper.dispatchAll(); assertEquals(ADDR_UNREGISTERED, mLogicalAddress); } + + @Test + public void testIsLanguage() { + assertTrue(HdmiCecController.isLanguage("en")); + assertTrue(HdmiCecController.isLanguage("eng")); + assertTrue(HdmiCecController.isLanguage("ger")); + assertTrue(HdmiCecController.isLanguage("zh")); + assertTrue(HdmiCecController.isLanguage("zhi")); + assertTrue(HdmiCecController.isLanguage("zho")); + + assertFalse(HdmiCecController.isLanguage(null)); + assertFalse(HdmiCecController.isLanguage("")); + assertFalse(HdmiCecController.isLanguage("e")); + assertFalse(HdmiCecController.isLanguage("δΈ€")); // language code must be ASCII + } } |