diff options
| author | 2020-12-17 02:27:12 +0000 | |
|---|---|---|
| committer | 2020-12-17 02:27:12 +0000 | |
| commit | 6fe207d72b128b924034d2da513ac0536c68e02d (patch) | |
| tree | f8d8487fb1de5a8db74facdf69f6f4495a45c37c | |
| parent | 63c5fe5d33889aa3251d6bcdfe5c735a5b5d9261 (diff) | |
| parent | 7d9e11576fdf40fd94a6f63b035742f8d37bab72 (diff) | |
Merge "Replace LanguageTag.isLanguage with public API"
| -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 bbd5ac3b5ccc..ddb0141d42a5 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.stats.hdmi.HdmiStatsEnums; import android.util.Slog; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; import com.android.server.hdmi.HdmiAnnotations.IoThreadOnly; @@ -49,8 +52,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 @@ -352,13 +353,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 42f88dcae635..2f2e97c5c7a2 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java @@ -30,6 +30,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.hdmi.HdmiControlManager; @@ -257,4 +259,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 + } } |