Move language-specific keyboard setting to resources.
Some flag settings used to be stored in a keyboard layout extravalue setting. This change: - Introduces the capability of setting such specific flags in values/config.xml - Retains the ability to use extravalues (for layout-specific settings), though there is no more any such setting at the moment. - Fixes a bug where loading a dictionary from outside does not initialize the flags. - Moves Flag to another class. Note: this needs I705ec68c to avoid breaking the build Change-Id: Ia7703aae3215b06c0b3cb792821649806e8998c1main
parent
b1ae5d84b1
commit
c899038eee
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2011, 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.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<bool name="config_require_umlaut_processing">true</bool>
|
||||||
|
</resources>
|
|
@ -78,4 +78,5 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
<!-- Screen metrics for logging. 0 = "mdpi", 1 = "hdpi", 2 = "xlarge" -->
|
<!-- Screen metrics for logging. 0 = "mdpi", 1 = "hdpi", 2 = "xlarge" -->
|
||||||
<integer name="log_screen_metrics">0</integer>
|
<integer name="log_screen_metrics">0</integer>
|
||||||
|
<bool name="config_require_umlaut_processing">false</bool>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -72,7 +72,6 @@
|
||||||
android:label="@string/subtype_mode_de_keyboard"
|
android:label="@string/subtype_mode_de_keyboard"
|
||||||
android:imeSubtypeLocale="de"
|
android:imeSubtypeLocale="de"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="requiresGermanUmlautProcessing"
|
|
||||||
/>
|
/>
|
||||||
<!-- <subtype android:icon="@drawable/ic_subtype_mic" -->
|
<!-- <subtype android:icon="@drawable/ic_subtype_mic" -->
|
||||||
<!-- android:label="@string/subtype_mode_de_voice" -->
|
<!-- android:label="@string/subtype_mode_de_voice" -->
|
||||||
|
|
|
@ -63,18 +63,12 @@ public class BinaryDictionary extends Dictionary {
|
||||||
|
|
||||||
private final KeyboardSwitcher mKeyboardSwitcher = KeyboardSwitcher.getInstance();
|
private final KeyboardSwitcher mKeyboardSwitcher = KeyboardSwitcher.getInstance();
|
||||||
|
|
||||||
public static class Flag {
|
|
||||||
public final String mName;
|
|
||||||
public final int mValue;
|
|
||||||
|
|
||||||
public Flag(String name, int value) {
|
|
||||||
mName = name;
|
|
||||||
mValue = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
|
public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
|
||||||
new Flag("requiresGermanUmlautProcessing", 0x1);
|
new Flag(R.bool.config_require_umlaut_processing, 0x1);
|
||||||
|
|
||||||
|
// Can create a new flag from extravalue :
|
||||||
|
// public static final Flag FLAG_MYFLAG =
|
||||||
|
// new Flag("my_flag", 0x02);
|
||||||
|
|
||||||
private static final Flag[] ALL_FLAGS = {
|
private static final Flag[] ALL_FLAGS = {
|
||||||
// Here should reside all flags that trigger some special processing
|
// Here should reside all flags that trigger some special processing
|
||||||
|
@ -118,12 +112,12 @@ public class BinaryDictionary extends Dictionary {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sInstance.mFlags = initFlags(ALL_FLAGS, SubtypeSwitcher.getInstance());
|
sInstance.mFlags = Flag.initFlags(ALL_FLAGS, context, SubtypeSwitcher.getInstance());
|
||||||
return sInstance;
|
return sInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* package for test */ static BinaryDictionary initDictionary(File dictionary, long startOffset,
|
/* package for test */ static BinaryDictionary initDictionary(Context context, File dictionary,
|
||||||
long length, int dicTypeId, Flag[] flagArray) {
|
long startOffset, long length, int dicTypeId, Flag[] flagArray) {
|
||||||
synchronized (sInstance) {
|
synchronized (sInstance) {
|
||||||
sInstance.closeInternal();
|
sInstance.closeInternal();
|
||||||
if (dictionary.isFile()) {
|
if (dictionary.isFile()) {
|
||||||
|
@ -134,19 +128,10 @@ public class BinaryDictionary extends Dictionary {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sInstance.mFlags = initFlags(flagArray, null);
|
sInstance.mFlags = Flag.initFlags(flagArray, context, null);
|
||||||
return sInstance;
|
return sInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int initFlags(Flag[] flagArray, SubtypeSwitcher switcher) {
|
|
||||||
int flags = 0;
|
|
||||||
for (Flag entry : flagArray) {
|
|
||||||
if (switcher == null || switcher.currentSubtypeContainsExtraValueKey(entry.mName))
|
|
||||||
flags |= entry.mValue;
|
|
||||||
}
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Utils.loadNativeLibrary();
|
Utils.loadNativeLibrary();
|
||||||
}
|
}
|
||||||
|
@ -179,6 +164,7 @@ public class BinaryDictionary extends Dictionary {
|
||||||
sInstance.mDicTypeId = dicTypeId;
|
sInstance.mDicTypeId = dicTypeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sInstance.mFlags = Flag.initFlags(ALL_FLAGS, context, SubtypeSwitcher.getInstance());
|
||||||
return sInstance;
|
return sInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2011 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.latin;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
|
||||||
|
public class Flag {
|
||||||
|
public final String mName;
|
||||||
|
public final int mResource;
|
||||||
|
public final int mMask;
|
||||||
|
public final int mSource;
|
||||||
|
|
||||||
|
static private final int SOURCE_CONFIG = 1;
|
||||||
|
static private final int SOURCE_EXTRAVALUE = 2;
|
||||||
|
|
||||||
|
public Flag(int resourceId, int mask) {
|
||||||
|
mName = null;
|
||||||
|
mResource = resourceId;
|
||||||
|
mSource = SOURCE_CONFIG;
|
||||||
|
mMask = mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Flag(String name, int mask) {
|
||||||
|
mName = name;
|
||||||
|
mResource = 0;
|
||||||
|
mSource = SOURCE_EXTRAVALUE;
|
||||||
|
mMask = mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If context/switcher are null, set all related flags in flagArray to on.
|
||||||
|
public static int initFlags(Flag[] flagArray, Context context, SubtypeSwitcher switcher) {
|
||||||
|
int flags = 0;
|
||||||
|
final Resources res = null == context ? null : context.getResources();
|
||||||
|
for (Flag entry : flagArray) {
|
||||||
|
switch (entry.mSource) {
|
||||||
|
case Flag.SOURCE_CONFIG:
|
||||||
|
if (res == null || res.getBoolean(entry.mResource))
|
||||||
|
flags |= entry.mMask;
|
||||||
|
break;
|
||||||
|
case Flag.SOURCE_EXTRAVALUE:
|
||||||
|
if (switcher == null ||
|
||||||
|
switcher.currentSubtypeContainsExtraValueKey(entry.mName))
|
||||||
|
flags |= entry.mMask;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
}
|
|
@ -112,10 +112,10 @@ public class Suggest implements Dictionary.WordCallback {
|
||||||
dictionaryResId));
|
dictionaryResId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* package for test */ Suggest(File dictionary, long startOffset, long length,
|
/* package for test */ Suggest(Context context, File dictionary, long startOffset, long length,
|
||||||
BinaryDictionary.Flag[] flagArray) {
|
Flag[] flagArray) {
|
||||||
init(null, BinaryDictionary.initDictionary(dictionary, startOffset, length, DIC_MAIN,
|
init(null, BinaryDictionary.initDictionary(context, dictionary, startOffset, length,
|
||||||
flagArray));
|
DIC_MAIN, flagArray));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(Context context, BinaryDictionary mainDict) {
|
private void init(Context context, BinaryDictionary mainDict) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class SuggestHelper {
|
||||||
|
|
||||||
protected SuggestHelper(Context context, File dictionaryPath, long startOffset, long length,
|
protected SuggestHelper(Context context, File dictionaryPath, long startOffset, long length,
|
||||||
KeyboardId keyboardId) {
|
KeyboardId keyboardId) {
|
||||||
mSuggest = new Suggest(dictionaryPath, startOffset, length, null);
|
mSuggest = new Suggest(context, dictionaryPath, startOffset, length, null);
|
||||||
mKeyboard = new LatinKeyboard(context, keyboardId);
|
mKeyboard = new LatinKeyboard(context, keyboardId);
|
||||||
mKeyDetector = new KeyDetector();
|
mKeyDetector = new KeyDetector();
|
||||||
init();
|
init();
|
||||||
|
|
Loading…
Reference in New Issue