am 91bb0771: Merge "Enable Turkish language encoding for Turkish SIM cards." into jb-mr1.1-dev

* commit '91bb07718bc005c320477c4bba66e1ee958a9ce2':
  Enable Turkish language encoding for Turkish SIM cards.
This commit is contained in:
Jake Hamby
2012-12-06 15:12:05 -08:00
committed by Android Git Automerger
2 changed files with 92 additions and 11 deletions

View File

@@ -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>

View File

@@ -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];