summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Hamby <jhamby@google.com>2012-12-06 13:11:34 -0800
committerJake Hamby <jhamby@google.com>2012-12-06 14:53:44 -0800
commit37a2163267d61b29aafb6dabba6102fc43ed2047 (patch)
tree52091ba7522650666b6f828d485ac2393e5c0172
parent683028ca0dab7b5cf7afff4501c2372350231bae (diff)
downloadframeworks_base-37a2163267d61b29aafb6dabba6102fc43ed2047.zip
frameworks_base-37a2163267d61b29aafb6dabba6102fc43ed2047.tar.gz
frameworks_base-37a2163267d61b29aafb6dabba6102fc43ed2047.tar.bz2
Enable Turkish language encoding for Turkish SIM cards.
Enable Turkish language encoding for SMS messages. Adds an MCC-specific config.xml override to enable the Turkish language tables for Turkish SIM cards. Also modifies GsmAlphabet.java to load the config.xml values before use, so the SMSDispatcher will get the current values instead of caching the boot-time values before the MCC is loaded. Bug: 7422368 Change-Id: I57cd5fcc1d04a2d0cba3e8b9022078679cf5d4c1
-rwxr-xr-xcore/res/res/values-mcc286/config.xml64
-rw-r--r--telephony/java/com/android/internal/telephony/GsmAlphabet.java39
2 files changed, 92 insertions, 11 deletions
diff --git a/core/res/res/values-mcc286/config.xml b/core/res/res/values-mcc286/config.xml
new file mode 100755
index 0000000..d99d051
--- /dev/null
+++ b/core/res/res/values-mcc286/config.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. DO NOT TRANSLATE. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- National Language Identifier codes for the following two config items.
+ (from 3GPP TS 23.038 V9.1.1 Table 6.2.1.2.4.1):
+ 0 - reserved
+ 1 - Turkish
+ 2 - Spanish (single shift table only)
+ 3 - Portuguese
+ 4 - Bengali
+ 5 - Gujarati
+ 6 - Hindi
+ 7 - Kannada
+ 8 - Malayalam
+ 9 - Oriya
+ 10 - Punjabi
+ 11 - Tamil
+ 12 - Telugu
+ 13 - Urdu
+ 14+ - reserved -->
+
+ <!-- National language single shift tables to enable for SMS encoding.
+ Decoding is always enabled. 3GPP TS 23.038 states that this feature
+ should not be enabled until a formal request is issued by the relevant
+ national regulatory body. Array elements are codes from the table above.
+ Example 1: devices sold in Turkey must include table 1 to conform with
+ By-Law Number 27230. (http://www.btk.gov.tr/eng/pdf/2009/BY-LAW_SMS.pdf)
+ Example 2: devices sold in India should include tables 4 through 13
+ to enable use of the new Release 9 tables for Indic languages. -->
+ <integer-array name="config_sms_enabled_single_shift_tables"><item>1</item></integer-array>
+
+ <!-- National language locking shift tables to enable for SMS encoding.
+ Decoding is always enabled. 3GPP TS 23.038 states that this feature
+ should not be enabled until a formal request is issued by the relevant
+ national regulatory body. Array elements are codes from the table above.
+ Example 1: devices sold in Turkey must include table 1 after the
+ Turkish Telecommunication Authority requires locking shift encoding
+ to be enabled (est. July 2012). (http://www.btk.gov.tr/eng/pdf/2009/BY-LAW_SMS.pdf)
+ See also: http://www.mobitech.com.tr/tr/ersanozturkblog_en/index.php?entry=entry090223-160014
+ Example 2: devices sold in India should include tables 4 through 13
+ to enable use of the new Release 9 tables for Indic languages. -->
+ <!-- <integer-array name="config_sms_enabled_locking_shift_tables"></integer-array> -->
+
+</resources>
diff --git a/telephony/java/com/android/internal/telephony/GsmAlphabet.java b/telephony/java/com/android/internal/telephony/GsmAlphabet.java
index 04b1220..ba14ea7 100644
--- a/telephony/java/com/android/internal/telephony/GsmAlphabet.java
+++ b/telephony/java/com/android/internal/telephony/GsmAlphabet.java
@@ -803,6 +803,10 @@ public class GsmAlphabet {
*/
public static TextEncodingDetails
countGsmSeptets(CharSequence s, boolean use7bitOnly) {
+ // Load enabled language tables from config.xml, including any MCC overlays
+ if (!sDisableCountryEncodingCheck) {
+ enableCountrySpecificEncodings();
+ }
// fast path for common case where no national language shift tables are enabled
if (sEnabledSingleShiftTables.length + sEnabledLockingShiftTables.length == 0) {
TextEncodingDetails ted = new TextEncodingDetails();
@@ -989,6 +993,7 @@ public class GsmAlphabet {
*/
static synchronized void setEnabledSingleShiftTables(int[] tables) {
sEnabledSingleShiftTables = tables;
+ sDisableCountryEncodingCheck = true;
if (tables.length > 0) {
sHighestEnabledSingleShiftCode = tables[tables.length - 1];
@@ -1006,6 +1011,7 @@ public class GsmAlphabet {
*/
static synchronized void setEnabledLockingShiftTables(int[] tables) {
sEnabledLockingShiftTables = tables;
+ sDisableCountryEncodingCheck = true;
}
/**
@@ -1030,6 +1036,24 @@ public class GsmAlphabet {
return sEnabledLockingShiftTables;
}
+ /**
+ * Enable country-specific language tables from MCC-specific overlays.
+ * @context the context to use to get the TelephonyManager
+ */
+ private static void enableCountrySpecificEncodings() {
+ Resources r = Resources.getSystem();
+ // See comments in frameworks/base/core/res/res/values/config.xml for allowed values
+ sEnabledSingleShiftTables = r.getIntArray(R.array.config_sms_enabled_single_shift_tables);
+ sEnabledLockingShiftTables = r.getIntArray(R.array.config_sms_enabled_locking_shift_tables);
+
+ if (sEnabledSingleShiftTables.length > 0) {
+ sHighestEnabledSingleShiftCode =
+ sEnabledSingleShiftTables[sEnabledSingleShiftTables.length-1];
+ } else {
+ sHighestEnabledSingleShiftCode = 0;
+ }
+ }
+
/** Reverse mapping from Unicode characters to indexes into language tables. */
private static final SparseIntArray[] sCharsToGsmTables;
@@ -1045,6 +1069,9 @@ public class GsmAlphabet {
/** Highest language code to include in array of single shift counters. */
private static int sHighestEnabledSingleShiftCode;
+ /** Flag to bypass check for country-specific overlays (for test cases only). */
+ private static boolean sDisableCountryEncodingCheck = false;
+
/**
* Septet counter for a specific locking shift table and all of
* the single shift tables that it can be paired with.
@@ -1408,10 +1435,7 @@ public class GsmAlphabet {
};
static {
- Resources r = Resources.getSystem();
- // See comments in frameworks/base/core/res/res/values/config.xml for allowed values
- sEnabledSingleShiftTables = r.getIntArray(R.array.config_sms_enabled_single_shift_tables);
- sEnabledLockingShiftTables = r.getIntArray(R.array.config_sms_enabled_locking_shift_tables);
+ enableCountrySpecificEncodings();
int numTables = sLanguageTables.length;
int numShiftTables = sLanguageShiftTables.length;
if (numTables != numShiftTables) {
@@ -1419,13 +1443,6 @@ public class GsmAlphabet {
" != shift tables array length " + numShiftTables);
}
- if (sEnabledSingleShiftTables.length > 0) {
- sHighestEnabledSingleShiftCode =
- sEnabledSingleShiftTables[sEnabledSingleShiftTables.length-1];
- } else {
- sHighestEnabledSingleShiftCode = 0;
- }
-
sCharsToGsmTables = new SparseIntArray[numTables];
for (int i = 0; i < numTables; i++) {
String table = sLanguageTables[i];