Merge "[SD2] Add support for a new tag Feature in KeyboardLayoutSet"

main
Jean Chalard 2014-06-27 14:03:41 +00:00 committed by Android (Google) Code Review
commit 593009bc9f
4 changed files with 40 additions and 0 deletions

View File

@ -488,6 +488,17 @@
<attr name="enableProximityCharsCorrection" format="boolean" /> <attr name="enableProximityCharsCorrection" format="boolean" />
</declare-styleable> </declare-styleable>
<declare-styleable name="KeyboardLayoutSet_Feature">
<!-- This should be aligned with ScriptUtils.SCRIPT_* -->
<attr name="supportedScript" format="enum">
<enum name="latin" value="0" />
<enum name="cyrillic" value="1" />
<enum name="greek" value="2" />
<enum name="arabic" value="3" />
<enum name="hebrew" value="4" />
</attr>
</declare-styleable>
<declare-styleable name="SeekBarDialogPreference"> <declare-styleable name="SeekBarDialogPreference">
<attr name="maxValue" format="integer" /> <attr name="maxValue" format="integer" />
<attr name="minValue" format="integer" /> <attr name="minValue" format="integer" />

View File

@ -20,6 +20,8 @@
<KeyboardLayoutSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Feature
latin:supportedScript="arabic" />
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_arabic" latin:elementKeyboard="@xml/kbd_arabic"

View File

@ -40,6 +40,7 @@ import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SubtypeSwitcher; import com.android.inputmethod.latin.SubtypeSwitcher;
import com.android.inputmethod.latin.utils.InputTypeUtils; import com.android.inputmethod.latin.utils.InputTypeUtils;
import com.android.inputmethod.latin.utils.ScriptUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import com.android.inputmethod.latin.utils.XmlParseUtils; import com.android.inputmethod.latin.utils.XmlParseUtils;
@ -63,6 +64,7 @@ public final class KeyboardLayoutSet {
private static final String TAG_KEYBOARD_SET = "KeyboardLayoutSet"; private static final String TAG_KEYBOARD_SET = "KeyboardLayoutSet";
private static final String TAG_ELEMENT = "Element"; private static final String TAG_ELEMENT = "Element";
private static final String TAG_FEATURE = "Feature";
private static final String KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX = "keyboard_layout_set_"; private static final String KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX = "keyboard_layout_set_";
@ -111,6 +113,7 @@ public final class KeyboardLayoutSet {
boolean mIsSpellChecker; boolean mIsSpellChecker;
int mKeyboardWidth; int mKeyboardWidth;
int mKeyboardHeight; int mKeyboardHeight;
int mScriptId;
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id. // Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap = final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
new SparseArray<>(); new SparseArray<>();
@ -275,6 +278,10 @@ public final class KeyboardLayoutSet {
mParams.mDisableTouchPositionCorrectionDataForTest = true; mParams.mDisableTouchPositionCorrectionDataForTest = true;
} }
public void setScriptId(final int scriptId) {
mParams.mScriptId = scriptId;
}
public KeyboardLayoutSet build() { public KeyboardLayoutSet build() {
if (mParams.mSubtype == null) if (mParams.mSubtype == null)
throw new RuntimeException("KeyboardLayoutSet subtype is not specified"); throw new RuntimeException("KeyboardLayoutSet subtype is not specified");
@ -320,6 +327,8 @@ public final class KeyboardLayoutSet {
final String tag = parser.getName(); final String tag = parser.getName();
if (TAG_ELEMENT.equals(tag)) { if (TAG_ELEMENT.equals(tag)) {
parseKeyboardLayoutSetElement(parser); parseKeyboardLayoutSetElement(parser);
} else if (TAG_FEATURE.equals(tag)) {
parseKeyboardLayoutSetFeature(parser);
} else { } else {
throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_KEYBOARD_SET); throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_KEYBOARD_SET);
} }
@ -361,6 +370,21 @@ public final class KeyboardLayoutSet {
} }
} }
private void parseKeyboardLayoutSetFeature(final XmlPullParser parser)
throws XmlPullParserException, IOException {
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.KeyboardLayoutSet_Feature);
try {
final int scriptId = a.getInt(
R.styleable.KeyboardLayoutSet_Feature_supportedScript,
ScriptUtils.SCRIPT_LATIN);
XmlParseUtils.checkEndTag(TAG_FEATURE, parser);
setScriptId(scriptId);
} finally {
a.recycle();
}
}
private static int getKeyboardMode(final EditorInfo editorInfo) { private static int getKeyboardMode(final EditorInfo editorInfo) {
final int inputType = editorInfo.inputType; final int inputType = editorInfo.inputType;
final int variation = inputType & InputType.TYPE_MASK_VARIATION; final int variation = inputType & InputType.TYPE_MASK_VARIATION;

View File

@ -23,9 +23,12 @@ import java.util.TreeMap;
* A class to help with handling different writing scripts. * A class to help with handling different writing scripts.
*/ */
public class ScriptUtils { public class ScriptUtils {
// TODO: should we use ISO 15924 identifiers instead?
public static final int SCRIPT_LATIN = 0; public static final int SCRIPT_LATIN = 0;
public static final int SCRIPT_CYRILLIC = 1; public static final int SCRIPT_CYRILLIC = 1;
public static final int SCRIPT_GREEK = 2; public static final int SCRIPT_GREEK = 2;
public static final int SCRIPT_ARABIC = 3;
public static final int SCRIPT_HEBREW = 4;
public static final TreeMap<String, Integer> mLanguageToScript; public static final TreeMap<String, Integer> mLanguageToScript;
static { static {
// List of the supported languages and their associated script. We won't check // List of the supported languages and their associated script. We won't check