From ec0aac9c8b7278f516e5c6709f6c760b2bb1316e Mon Sep 17 00:00:00 2001 From: "Kyeongkab.Nam" Date: Wed, 10 Oct 2018 13:47:29 +0900 Subject: [PATCH] Convert to ISO 639-2/B for menu language According to HDMI specification 1.4b, the Bibliographic codes of ISO/FDIS 639-2 shall be used. So add the logic to convert terminology codes to Bibliographic codes. Test: see the 3 alphabets as a parameter of CEC command () and check that they were replaced by ISO 639-2/B Change-Id: I8581ae7d9dfe7b75ac8b8a8984c9af3074da67fd --- .../server/hdmi/HdmiControlService.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index b06dba9f9627c..8920014b6ba62 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -80,8 +80,10 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import libcore.util.EmptyArray; /** @@ -93,6 +95,31 @@ public final class HdmiControlService extends SystemService { private final Locale HONG_KONG = new Locale("zh", "HK"); private final Locale MACAU = new Locale("zh", "MO"); + private static final Map mTerminologyToBibliographicMap; + static { + mTerminologyToBibliographicMap = new HashMap<>(); + // NOTE: (TERMINOLOGY_CODE, BIBLIOGRAPHIC_CODE) + mTerminologyToBibliographicMap.put("sqi", "alb"); // Albanian + mTerminologyToBibliographicMap.put("hye", "arm"); // Armenian + mTerminologyToBibliographicMap.put("eus", "baq"); // Basque + mTerminologyToBibliographicMap.put("mya", "bur"); // Burmese + mTerminologyToBibliographicMap.put("ces", "cze"); // Czech + mTerminologyToBibliographicMap.put("nld", "dut"); // Dutch + mTerminologyToBibliographicMap.put("kat", "geo"); // Georgian + mTerminologyToBibliographicMap.put("deu", "ger"); // German + mTerminologyToBibliographicMap.put("ell", "gre"); // Greek + mTerminologyToBibliographicMap.put("fra", "fre"); // French + mTerminologyToBibliographicMap.put("isl", "ice"); // Icelandic + mTerminologyToBibliographicMap.put("mkd", "mac"); // Macedonian + mTerminologyToBibliographicMap.put("mri", "mao"); // Maori + mTerminologyToBibliographicMap.put("msa", "may"); // Malay + mTerminologyToBibliographicMap.put("fas", "per"); // Persian + mTerminologyToBibliographicMap.put("ron", "rum"); // Romanian + mTerminologyToBibliographicMap.put("slk", "slo"); // Slovak + mTerminologyToBibliographicMap.put("bod", "tib"); // Tibetan + mTerminologyToBibliographicMap.put("cym", "wel"); // Welsh + } + static final String PERMISSION = "android.permission.HDMI_CEC"; // The reason code to initiate intializeCec(). @@ -176,7 +203,18 @@ public final class HdmiControlService extends SystemService { // Chinese used in Taiwan/Hong Kong/Macau. return "chi"; } else { - return locale.getISO3Language(); + String language = locale.getISO3Language(); + + // locale.getISO3Language() returns terminology code and need to + // send it as bibliographic code instead since the Bibliographic + // codes of ISO/FDIS 639-2 shall be used. + // NOTE: Chinese also has terminology/bibliographic code "zho" and "chi" + // But, as it depends on the locale, is not handled here. + if (mTerminologyToBibliographicMap.containsKey(language)) { + language = mTerminologyToBibliographicMap.get(language); + } + + return language; } } }