1
0
Fork 0

Merge pull request #1 from Clam-/master

Merge latest updates from Clam
This commit is contained in:
iaros 2017-03-28 05:43:55 +03:00 committed by GitHub
commit 62d97dce0b
10 changed files with 260 additions and 182 deletions

View file

@ -1,13 +1,7 @@
# Default keycodes # Remap left to right, and right to left
DPAD_CENTER 23 # lines that begin with a hash are ignored
DPAD_DOWN 20 # [keycode of original key](space)[keycode of new key]
DPAD_UP 19 #DPAD_LEFT
DPAD_LEFT 21 21 22
DPAD_RIGHT 22 #DPAD_RIGHT
SOFT_RIGHT 2 22 21
SOFT_LEFT 1
DEL 67
BACK 4
ENTER 66
POUND 18
STAR 17

View file

@ -70,6 +70,12 @@
<string name="pref_nuke_title">Nuke IME dictionary</string> <string name="pref_nuke_title">Nuke IME dictionary</string>
<string name="pref_reloadKeys">Reload KeyMap</string> <string name="pref_reloadKeys">Reload KeyMap</string>
<string name="pref_reloadKeysSum" translatable="false">Force reload of key mapping overrides</string> <string name="pref_reloadKeysSum" translatable="false">Force reload of key mapping overrides</string>
<string name="pref_reloadKeysDone" translatable="false">Reload complete.</string>
<string name="pref_reloadKeysDoneWE" translatable="false">Reload complete with errors (check logcat.)</string>
<string name="pref_reloadKeysNoFile" translatable="false">No keymap.txt file found.</string>
<string name="pref_keyRemap" translatable="false">Translate keys</string>
<string name="pref_keyRemapSum" translatable="false">Enable to send translated keys to apps, otherwise keymap is for IME only.</string>
<string name="pref_spaceOnZero" translatable="false">Space on 0 key</string>
<string name="hello_world">Hello world!</string> <string name="hello_world">Hello world!</string>

View file

@ -15,6 +15,12 @@
entries="@array/pref_lang_titles" entries="@array/pref_lang_titles"
entryValues="@array/pref_lang_values" entryValues="@array/pref_lang_values"
title="@string/pref_lang_title" /> title="@string/pref_lang_title" />
<SettingCheck
id="pref_spaceOnZero"
title="@string/pref_spaceOnZero"
summary="@string/pref_keyRemapSum"
defaultValue="false"
/>
<SettingCheck <SettingCheck
id="pref_mode_notify" id="pref_mode_notify"
title="@string/pref_mode_notify" title="@string/pref_mode_notify"
@ -27,4 +33,10 @@
<Setting title="@string/pref_backupdict" id="backupdict"/> <Setting title="@string/pref_backupdict" id="backupdict"/>
<Setting title="@string/pref_restoredict" id="restoredict"/> <Setting title="@string/pref_restoredict" id="restoredict"/>
<Setting title="@string/pref_reloadKeys" summary="@string/pref_reloadKeysSum" id="reloadKeys"/> <Setting title="@string/pref_reloadKeys" summary="@string/pref_reloadKeysSum" id="reloadKeys"/>
<SettingCheck
id="pref_keyMap"
title="@string/pref_keyRemap"
summary="@string/pref_keyRemapSum"
defaultValue="false"
/>
</Settings> </Settings>

View file

@ -80,22 +80,22 @@ public class CharMap {
} }
protected static final char[][] ENT9TABLE = { { '0', '+' }, protected static final char[][] ENT9TABLE = { { '0', '+' },
{ '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '(', ')', '_', '1' }, { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' },
{ 'a', 'b', 'c', 'A', 'B', 'C', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', '3' }, { 'a', 'b', 'c', 'A', 'B', 'C', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', '3' },
{ 'g', 'h', 'i', 'G', 'H', 'I', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, { 'g', 'h', 'i', 'G', 'H', 'I', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' },
{ 'm', 'n', 'o', 'M', 'N', 'O', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, { 'm', 'n', 'o', 'M', 'N', 'O', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' },
{ 't', 'u', 'v', 'T', 'U', 'V', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, { 't', 'u', 'v', 'T', 'U', 'V', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' },
{ ' ', '\n' } }; { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0
protected static final char[][] RUT9TABLE = { { '0', '+' }, protected static final char[][] RUT9TABLE = { { '0', '+' },
{ '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '(', ')', '_', '1' }, { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' },
{ 'а', 'б', 'в', 'г', 'А', 'Б', 'В', 'Г', '2' }, { 'д', 'е', 'ё', 'ж', 'з', 'Д', 'Е', 'Ё', 'Ж', 'З', '3' }, { 'а', 'б', 'в', 'г', 'А', 'Б', 'В', 'Г', '2' }, { 'д', 'е', 'ё', 'ж', 'з', 'Д', 'Е', 'Ё', 'Ж', 'З', '3' },
{ 'и', 'й', 'к', 'л', 'И', 'Й', 'К', 'Л', '4' }, { 'м', 'н', 'о', 'п', 'М', 'Н', 'О', 'П', '5' }, { 'и', 'й', 'к', 'л', 'И', 'Й', 'К', 'Л', '4' }, { 'м', 'н', 'о', 'п', 'М', 'Н', 'О', 'П', '5' },
{ 'р', 'с', 'т', 'у', 'Р', 'С', 'Т', 'У', '6' }, { 'ф', 'х', 'ц', 'ч', 'Ф', 'Х', 'Ц', 'Ч', '7' }, { 'р', 'с', 'т', 'у', 'Р', 'С', 'Т', 'У', '6' }, { 'ф', 'х', 'ц', 'ч', 'Ф', 'Х', 'Ц', 'Ч', '7' },
{ 'ш', 'щ', 'ъ', 'ы', 'Ш', 'Щ', 'Ъ', 'Ы', '8' }, { 'ь', 'э', 'ю', 'я', 'Ь', 'Э', 'Ю', 'Я', '9' }, { 'ш', 'щ', 'ъ', 'ы', 'Ш', 'Щ', 'Ъ', 'Ы', '8' }, { 'ь', 'э', 'ю', 'я', 'Ь', 'Э', 'Ю', 'Я', '9' },
{ ' ', '\n' } }; { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0
protected static final char[][] DET9TABLE = { protected static final char[][] DET9TABLE = {
{ ' ', '+', '0' }, { '0', '+' },
{ '.', ',', '?', '!', ':', ';', '"', '\'', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, { '.', ',', '?', '!', ':', ';', '"', '\'', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' },
{ 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' }, { 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' },
{ 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' },
{ 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' }, { 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' },
@ -104,11 +104,11 @@ public class CharMap {
{ 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' },
{ 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' }, { 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' },
{ 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' },
{ '\n' } }; { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0
protected static final char[][] FRT9TABLE = { protected static final char[][] FRT9TABLE = {
{ ' ', '+', '0' }, { '0', '+' },
{ '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' },
{ 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' }, { 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' },
{ 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' },
{ 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' }, { 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' },
@ -117,23 +117,25 @@ public class CharMap {
{ 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' },
{ 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' }, { 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' },
{ 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' },
{ '\n' } }; { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0
protected static final char[][] ITT9TABLE = { protected static final char[][] ITT9TABLE = {
{ ' ', '+', '0' }, { '+', '0' },
{ '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' },
{ 'a', 'b', 'c', 'A', 'B', 'C', 'à', 'À', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é', 'è', 'É', 'È', '3' }, { 'a', 'b', 'c', 'A', 'B', 'C', 'à', 'À', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é', 'è', 'É', 'È', '3' },
{ 'g', 'h', 'i', 'G', 'H', 'I', 'ì', 'Ì', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, { 'g', 'h', 'i', 'G', 'H', 'I', 'ì', 'Ì', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' },
{ 'm', 'n', 'o', 'M', 'N', 'O', 'ò', 'Ò', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, { 'm', 'n', 'o', 'M', 'N', 'O', 'ò', 'Ò', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' },
{ 't', 'u', 'v', 'T', 'U', 'V', 'ù', 'Ù', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, { 't', 'u', 'v', 'T', 'U', 'V', 'ù', 'Ù', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' },
{ '\n' } }; { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0
protected static final char[][][] T9TABLE = { ENT9TABLE, RUT9TABLE, DET9TABLE, FRT9TABLE, ITT9TABLE }; protected static final char[][][] T9TABLE = { ENT9TABLE, RUT9TABLE, DET9TABLE, FRT9TABLE, ITT9TABLE };
protected static final int[] ENT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0 }; // last 2 don't matter, are for spaceOnZero extra 'slots' 0 position, and 10 position
protected static final int [] RUT9CAPSTART = {0, 0, 4, 5, 4, 4, 4, 4, 4, 4, 0}; protected static final int[] ENT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 };
protected static final int[] DET9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0 }; protected static final int[] RUT9CAPSTART = { 0, 0, 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 0 };
protected static final int[] FRT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0 }; protected static final int[] DET9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 };
protected static final int[] ITT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0 }; protected static final int[] FRT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 };
protected static final int[] ITT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 };
protected static final int[][] T9CAPSTART = {ENT9CAPSTART, RUT9CAPSTART, DET9CAPSTART, FRT9CAPSTART, ITT9CAPSTART}; protected static final int[][] T9CAPSTART = {ENT9CAPSTART, RUT9CAPSTART, DET9CAPSTART, FRT9CAPSTART, ITT9CAPSTART};
protected static String getStringSequence(String word, LANGUAGE lang) { protected static String getStringSequence(String word, LANGUAGE lang) {

View file

@ -2,34 +2,26 @@ package org.nyanya.android.traditionalt9;
import android.os.Environment; import android.os.Environment;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class KeyMap { public class KeyMap {
public static final String keymapfname = "keymap.txt"; public static final String keymapfname = "keymap.txt";
public static Map<Integer, Integer> keyMapping = new HashMap<Integer, Integer>();
public static int DPAD_CENTER = KeyEvent.KEYCODE_DPAD_CENTER;
public static int DPAD_DOWN = KeyEvent.KEYCODE_DPAD_DOWN;
public static int DPAD_UP = KeyEvent.KEYCODE_DPAD_UP;
public static int DPAD_LEFT = KeyEvent.KEYCODE_DPAD_LEFT;
public static int DPAD_RIGHT = KeyEvent.KEYCODE_DPAD_RIGHT;
public static int SOFT_RIGHT = KeyEvent.KEYCODE_SOFT_RIGHT;
public static int SOFT_LEFT = KeyEvent.KEYCODE_SOFT_LEFT;
public static int DEL = KeyEvent.KEYCODE_DEL;
public static int BACK = KeyEvent.KEYCODE_BACK;
public static int ENTER = KeyEvent.KEYCODE_ENTER;
public static int STAR = KeyEvent.KEYCODE_STAR;
public static int POUND = KeyEvent.KEYCODE_POUND;
static { static {
setKeys(); setKeys();
} }
public static void setKeys() { public static int setKeys() {
int msg = 0;
keyMapping = new HashMap<Integer, Integer>();
// check storage // check storage
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState()) if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState())
|| Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { || Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
@ -37,7 +29,7 @@ public class KeyMap {
if ((new File(new File(Environment.getExternalStorageDirectory(), TraditionalT9Settings.sddir), if ((new File(new File(Environment.getExternalStorageDirectory(), TraditionalT9Settings.sddir),
keymapfname)).exists()) { keymapfname)).exists()) {
BufferedReader br = null; BufferedReader br = null;
Log.d("KeyMap", "Attemping to load keys"); Log.d("T9.KeyMap", "Attemping to load keys");
try { try {
br = new BufferedReader(new FileReader(new File( br = new BufferedReader(new FileReader(new File(
new File(Environment.getExternalStorageDirectory(), TraditionalT9Settings.sddir), keymapfname))); new File(Environment.getExternalStorageDirectory(), TraditionalT9Settings.sddir), keymapfname)));
@ -48,43 +40,21 @@ public class KeyMap {
if (ws.length != 2) {continue;} if (ws.length != 2) {continue;}
else if (line.startsWith("#")) {continue;} else if (line.startsWith("#")) {continue;}
try { try {
if (ws[0].equals("DPAD_CENTER")) { keyMapping.put(Integer.parseInt(ws[0]), Integer.parseInt(ws[1]));
DPAD_CENTER = Integer.parseInt(ws[1]);
} else if (ws[0].equals("DPAD_DOWN")) {
DPAD_DOWN = Integer.parseInt(ws[1]);
} else if (ws[0].equals("DPAD_UP")) {
DPAD_UP = Integer.parseInt(ws[1]);
} else if (ws[0].equals("DPAD_LEFT")) {
DPAD_LEFT = Integer.parseInt(ws[1]);
} else if (ws[0].equals("DPAD_RIGHT")) {
DPAD_RIGHT = Integer.parseInt(ws[1]);
} else if (ws[0].equals("SOFT_RIGHT")) {
SOFT_RIGHT = Integer.parseInt(ws[1]);
} else if (ws[0].equals("SOFT_LEFT")) {
SOFT_LEFT = Integer.parseInt(ws[1]);
} else if (ws[0].equals("DEL")) {
DEL = Integer.parseInt(ws[1]);
} else if (ws[0].equals("BACK")) {
BACK = Integer.parseInt(ws[1]);
} else if (ws[0].equals("ENTER")) {
ENTER = Integer.parseInt(ws[1]);
} else if (ws[0].equals("STAR")) {
STAR = Integer.parseInt(ws[1]);
} else if (ws[0].equals("POUND")) {
POUND = Integer.parseInt(ws[1]);
}
} catch (NumberFormatException _ignore) { } catch (NumberFormatException _ignore) {
Log.w("T9.KeyMap", "Invalid number found"); Log.w("T9.KeyMap", "Invalid number found");
msg = R.string.pref_reloadKeysDoneWE;
} }
} }
Log.d("KeyMap", "Done."); Log.d("T9.KeyMap", "Done.");
} catch (IOException _ignore) { } catch (IOException _ignore) {
Log.e("T9.KeyMap", "Error while reading line."); Log.e("T9.KeyMap", "Error while reading line.");
try { br.close(); } try { br.close(); }
catch (IOException ignored) {} catch (IOException ignored) {}
} }
} catch (FileNotFoundException ignored) { } } catch (FileNotFoundException ignored) { msg = R.string.pref_reloadKeysDone; }
} } else { msg = R.string.pref_reloadKeysNoFile; }
} } else { msg = R.string.pref_reloadKeysNoFile; }
return msg;
} }
} }

View file

@ -25,8 +25,7 @@ public class LangHelper {
public static LANGUAGE get(int i) { return lookup.get(i);} public static LANGUAGE get(int i) { return lookup.get(i);}
} }
protected static final Locale[] LOCALES = {Locale.ENGLISH, RUSSIAN, Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN}; protected static final Locale[] LOCALES = {Locale.ENGLISH, RUSSIAN, Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN};
//protected static final String[] LANGS = {"EN", "RU", "DE"};
public static final int LANG_DEFAULT = LANGUAGE.EN.id; public static final int LANG_DEFAULT = LANGUAGE.EN.id;

View file

@ -28,7 +28,7 @@ public class T9DB {
protected boolean ready = true; protected boolean ready = true;
protected static final String DATABASE_NAME = "t9dict.db"; protected static final String DATABASE_NAME = "t9dict.db";
protected static final int DATABASE_VERSION = 3; protected static final int DATABASE_VERSION = 4;
protected static final String WORD_TABLE_NAME = "word"; protected static final String WORD_TABLE_NAME = "word";
protected static final String SETTING_TABLE_NAME = "setting"; protected static final String SETTING_TABLE_NAME = "setting";
protected static final String FREQ_TRIGGER_NAME = "freqtrigger"; protected static final String FREQ_TRIGGER_NAME = "freqtrigger";
@ -66,19 +66,26 @@ public class T9DB {
public static class DBSettings { public static class DBSettings {
public enum SETTING { public enum SETTING {
INPUT_MODE("pref_inputmode", 0), INPUT_MODE("pref_inputmode", 0, 0),
LANG_SUPPORT("pref_lang_support", 1), LANG_SUPPORT("pref_lang_support", 1, 1),
MODE_NOTIFY("pref_mode_notify", 0), MODE_NOTIFY("pref_mode_notify", 0, 2),
LAST_LANG("set_last_lang", 1), LAST_LANG("set_last_lang", 1, 5),
LAST_WORD("set_last_word", null); LAST_WORD("set_last_word", null, 6),
SPACE_ZERO("pref_spaceOnZero", 0, 4),
KEY_REMAP("pref_keyMap", 0, 3);
public final String id; public final String id;
public final Integer defvalue; public final Integer defvalue;
public final int sqOrder; // used for building SettingsUI
// lookup map // lookup map
private static final Map<String, SETTING> lookup = new HashMap<String, SETTING>(); private static final Map<String, SETTING> lookup = new HashMap<String, SETTING>();
private static final SETTING[] settings = SETTING.values(); private static final SETTING[] settings = SETTING.values();
static { for (SETTING l : settings) lookup.put(l.id, l); } static { for (SETTING l : settings) lookup.put(l.id, l); }
private SETTING(String id, Integer defval) { this.id = id; this.defvalue = defval;} private SETTING(String id, Integer defval, int sqOrder) {
this.id = id; this.defvalue = defval; this.sqOrder = sqOrder;
}
public static SETTING get(String i) { return lookup.get(i);} public static SETTING get(String i) { return lookup.get(i);}
public static StringBuilder join(SETTING[] settings, StringBuilder sb) { public static StringBuilder join(SETTING[] settings, StringBuilder sb) {
@ -485,14 +492,9 @@ public class T9DB {
+ COLUMN_FREQUENCY + " / " + FREQ_DIV + + COLUMN_FREQUENCY + " / " + FREQ_DIV +
" WHERE " + COLUMN_SEQ + " = NEW." + COLUMN_SEQ + ";" + " WHERE " + COLUMN_SEQ + " = NEW." + COLUMN_SEQ + ";" +
" END;"); " END;");
// protected static final String[] setting_keys = {INPUT_MODE, LANG_SUPPORT, MODE_NOTIFY, LAST_LANG};
db.execSQL("CREATE TABLE IF NOT EXISTS " + SETTING_TABLE_NAME + " (" + createSettingsTable(db);
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
DBSettings.SETTING.INPUT_MODE.id + " INTEGER, " +
DBSettings.SETTING.LANG_SUPPORT.id + " INTEGER, " +
DBSettings.SETTING.MODE_NOTIFY.id + " INTEGER, " +
DBSettings.SETTING.LAST_LANG.id + " INTEGER, " +
DBSettings.SETTING.LAST_WORD.id + " TEXT )");
StringBuilder sb = new StringBuilder("INSERT OR IGNORE INTO "); sb.append(SETTING_TABLE_NAME); StringBuilder sb = new StringBuilder("INSERT OR IGNORE INTO "); sb.append(SETTING_TABLE_NAME);
sb.append(" ("); sb.append(COLUMN_ID); sb.append(", "); sb.append(" ("); sb.append(COLUMN_ID); sb.append(", ");
sb = DBSettings.SETTING.join(DBSettings.SETTING.settings, sb); sb = DBSettings.SETTING.join(DBSettings.SETTING.settings, sb);
@ -508,10 +510,22 @@ public class T9DB {
db.execSQL(sb.toString()); db.execSQL(sb.toString());
} }
private void createSettingsTable(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + SETTING_TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
DBSettings.SETTING.INPUT_MODE.id + " INTEGER, " +
DBSettings.SETTING.LANG_SUPPORT.id + " INTEGER, " +
DBSettings.SETTING.MODE_NOTIFY.id + " INTEGER, " +
DBSettings.SETTING.LAST_LANG.id + " INTEGER, " +
DBSettings.SETTING.KEY_REMAP.id + " INTEGER, " +
DBSettings.SETTING.SPACE_ZERO.id + " INTEGER, " +
DBSettings.SETTING.LAST_WORD.id + " TEXT )");
}
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("T9DB.onUpgrade", "Upgrading database from version " + oldVersion + " to " + newVersion); Log.i("T9DB.onUpgrade", "Upgrading database from version " + oldVersion + " to " + newVersion);
if (oldVersion == 1) { if (oldVersion <= 1) {
// ADDED LANG // ADDED LANG
db.execSQL("DROP INDEX IF EXISTS idx"); db.execSQL("DROP INDEX IF EXISTS idx");
db.execSQL("ALTER TABLE " + WORD_TABLE_NAME + " ADD COLUMN " + db.execSQL("ALTER TABLE " + WORD_TABLE_NAME + " ADD COLUMN " +
@ -519,18 +533,28 @@ public class T9DB {
ContentValues updatedata = new ContentValues(); ContentValues updatedata = new ContentValues();
updatedata.put(COLUMN_LANG, 0); updatedata.put(COLUMN_LANG, 0);
db.update(WORD_TABLE_NAME, updatedata, null, null); db.update(WORD_TABLE_NAME, updatedata, null, null);
onCreate(db);
oldVersion = 2;
} }
if (oldVersion == 2) { if (oldVersion <= 2) {
// ADDED SETTINGS, CHANGED LANG VALUE // ADDED SETTINGS, CHANGED LANG VALUE
db.execSQL("DROP INDEX IF EXISTS idx"); db.execSQL("DROP INDEX IF EXISTS idx");
db.execSQL("UPDATE " + WORD_TABLE_NAME + " SET " + COLUMN_LANG + "=" + LANGUAGE.RU.id + db.execSQL("UPDATE " + WORD_TABLE_NAME + " SET " + COLUMN_LANG + "=" + LANGUAGE.RU.id +
" WHERE " + COLUMN_LANG + "=1"); " WHERE " + COLUMN_LANG + "=1");
db.execSQL("UPDATE " + WORD_TABLE_NAME + " SET " + COLUMN_LANG + "=" + LANGUAGE.EN.id + db.execSQL("UPDATE " + WORD_TABLE_NAME + " SET " + COLUMN_LANG + "=" + LANGUAGE.EN.id +
" WHERE " + COLUMN_LANG + "=0"); " WHERE " + COLUMN_LANG + "=0");
onCreate(db); createSettingsTable(db);
} }
if (oldVersion == 3) {
// ADDED REMAP OPTION and SPACEONZERO
db.execSQL("ALTER TABLE " + SETTING_TABLE_NAME + " ADD COLUMN " +
DBSettings.SETTING.KEY_REMAP.id + " INTEGER");
db.execSQL("ALTER TABLE " + SETTING_TABLE_NAME + " ADD COLUMN " +
DBSettings.SETTING.SPACE_ZERO.id + " INTEGER");
ContentValues updatedata = new ContentValues();
updatedata.put(DBSettings.SETTING.KEY_REMAP.id, 0);
updatedata.put(DBSettings.SETTING.SPACE_ZERO.id, 0);
db.update(SETTING_TABLE_NAME, updatedata, null, null);
}
onCreate(db);
Log.i("T9DB.onUpgrade", "Done."); Log.i("T9DB.onUpgrade", "Done.");
} }
} }

View file

@ -23,8 +23,6 @@ import java.util.AbstractList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import android.text.TextUtils;
public class TraditionalT9 extends InputMethodService implements public class TraditionalT9 extends InputMethodService implements
KeyboardView.OnKeyboardActionListener { KeyboardView.OnKeyboardActionListener {
@ -46,6 +44,9 @@ public class TraditionalT9 extends InputMethodService implements
private boolean mGaveUpdateWarn = false; private boolean mGaveUpdateWarn = false;
private boolean mFirstPress = false; private boolean mFirstPress = false;
private boolean keyRemap = false;
private boolean spaceOnZero = false;
private boolean mIgnoreDPADKeyUp = false; private boolean mIgnoreDPADKeyUp = false;
private KeyEvent mDPADkeyEvent = null; private KeyEvent mDPADkeyEvent = null;
@ -195,7 +196,6 @@ public class TraditionalT9 extends InputMethodService implements
while (bounds < after.length() && !Character.isWhitespace(after.charAt(bounds))) { while (bounds < after.length() && !Character.isWhitespace(after.charAt(bounds))) {
bounds++; bounds++;
} }
Log.d("getSurroundingWord", "after:"+after.toString());
after = after.subSequence(0, bounds); after = after.subSequence(0, bounds);
} }
return before.toString().trim() + after.toString().trim(); return before.toString().trim() + after.toString().trim();
@ -248,14 +248,13 @@ public class TraditionalT9 extends InputMethodService implements
@Override @Override
public void onStartInput(EditorInfo attribute, boolean restarting) { public void onStartInput(EditorInfo attribute, boolean restarting) {
super.onStartInput(attribute, restarting); super.onStartInput(attribute, restarting);
//Log.d("onStartInput", "attribute.inputType: " + attribute.inputType +
// " restarting? " + restarting);
//Utils.printFlags(attribute.inputType);
currentInputConnection = getCurrentInputConnection(); currentInputConnection = getCurrentInputConnection();
//Log.d("T9.onStartInput", "INPUTTYPE: " + attribute.inputType + " FIELDID: " + attribute.fieldId +
if (attribute.inputType == 0) { // " FIELDNAME: " + attribute.fieldName + " PACKAGE NAME: " + attribute.packageName);
if (attribute.inputType == 0 || attribute.inputType == 3) {
mLang = null; mLang = null;
// don't do anything when not in any kind of edit field. // don't do anything when not in any kind of edit field.
// OR in dialer-type inputs. Hopefully OS will translate longpress 0 to +
// should also turn off input screen and stuff // should also turn off input screen and stuff
mEditing = NON_EDIT; mEditing = NON_EDIT;
requestHideSelf(0); requestHideSelf(0);
@ -264,6 +263,9 @@ public class TraditionalT9 extends InputMethodService implements
// if (interfacehandler != null) { // if (interfacehandler != null) {
// interfacehandler.hideView(); // interfacehandler.hideView();
// } // }
// Get keyMap setting:
Object[] setting = db.getSettings(new SETTING[] {SETTING.KEY_REMAP} );
keyRemap = setting[0].equals(1);
return; return;
} }
mFirstPress = true; mFirstPress = true;
@ -274,12 +276,14 @@ public class TraditionalT9 extends InputMethodService implements
clearState(); clearState();
// get settings // get settings
Object[] settings = db.getSettings(new SETTING[] Object[] settings = db.getSettings(new SETTING[] {
// 0, 1, 2, // 0, 1, 2,
{SETTING.LANG_SUPPORT, SETTING.LAST_LANG, SETTING.MODE_NOTIFY, SETTING.LANG_SUPPORT, SETTING.LAST_LANG, SETTING.MODE_NOTIFY,
// 3, 4 // 3, 4, 5
SETTING.INPUT_MODE, SETTING.LAST_WORD} ); SETTING.INPUT_MODE, SETTING.LAST_WORD, SETTING.SPACE_ZERO
});
spaceOnZero = settings[5].equals(1);
mLangsAvailable = LangHelper.buildLangs((Integer)settings[0]); mLangsAvailable = LangHelper.buildLangs((Integer)settings[0]);
mLang = sanitizeLang(LANGUAGE.get((Integer)settings[1])); mLang = sanitizeLang(LANGUAGE.get((Integer)settings[1]));
@ -496,14 +500,18 @@ public class TraditionalT9 extends InputMethodService implements
// ?????????????? // ??????????????
} }
/** private KeyEvent TranslateKey(int keyCode, KeyEvent event) {
* Use this to monitor key events being delivered to the application. We get KeyEvent key = event;
* first crack at them, and can either resume them or let them continue to if (KeyMap.keyMapping.containsKey(keyCode)) {
* the app. key = new KeyEvent(event.getDownTime(), event.getEventTime(), event.getAction(),
*/ KeyMap.keyMapping.get(keyCode), event.getRepeatCount(), event.getMetaState(),
@Override event.getDeviceId(), 0, event.getFlags());
public boolean onKeyDown(int keyCode, KeyEvent event) { }
// Log.d("onKeyDown", "Key: " + event + " repeat?: " + return key;
}
private boolean onKeyDown_(int keyCode, KeyEvent event) {
// Log.d("onKeyDown", "Key: " + event + " repeat?: " +
// event.getRepeatCount() + " long-time: " + event.isLongPress()); // event.getRepeatCount() + " long-time: " + event.isLongPress());
if (mEditing == NON_EDIT) { if (mEditing == NON_EDIT) {
// // catch for UI weirdness on up event thing // // catch for UI weirdness on up event thing
@ -511,7 +519,7 @@ public class TraditionalT9 extends InputMethodService implements
} }
mFirstPress = false; mFirstPress = false;
if (keyCode == KeyMap.DPAD_CENTER) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(keyCode, true); interfacehandler.setPressed(keyCode, true);
} // pass-through } // pass-through
@ -521,17 +529,17 @@ public class TraditionalT9 extends InputMethodService implements
return false; return false;
} }
return handleDPAD(keyCode, event, true); return handleDPAD(keyCode, event, true);
} else if (keyCode == KeyMap.DPAD_DOWN || keyCode == KeyMap.DPAD_UP || keyCode == KeyMap.DPAD_LEFT || keyCode == KeyMap.DPAD_RIGHT) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
if (mEditing == EDITING_NOSHOW) { if (mEditing == EDITING_NOSHOW) {
return false; return false;
} }
return handleDPAD(keyCode, event, true); return handleDPAD(keyCode, event, true);
} else if (keyCode == KeyMap.SOFT_RIGHT || keyCode == KeyMap.SOFT_LEFT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT || keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
if (!isInputViewShown()) { if (!isInputViewShown()) {
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
} else if (keyCode == KeyMap.DEL) {// Special handling of the delete key: if we currently are } else if (keyCode == KeyEvent.KEYCODE_DEL) {// Special handling of the delete key: if we currently are
// composing text for the user, we want to modify that instead // composing text for the user, we want to modify that instead
// of let the application do the delete itself. // of let the application do the delete itself.
// if (mComposing.length() > 0) { // if (mComposing.length() > 0) {
@ -548,17 +556,17 @@ public class TraditionalT9 extends InputMethodService implements
if (mKeyMode == MODE_TEXT) { if (mKeyMode == MODE_TEXT) {
t9releasehandler.removeCallbacks(mt9release); t9releasehandler.removeCallbacks(mt9release);
} }
if (keyCode == KeyMap.BACK) {// The InputMethodService already takes care of the back if (keyCode == KeyEvent.KEYCODE_BACK) {// The InputMethodService already takes care of the back
// key for us, to dismiss the input method if it is shown. // key for us, to dismiss the input method if it is shown.
// but we will manage it ourselves because native Android handling // but we will manage it ourselves because native Android handling
// of the input view is ... flakey at best. // of the input view is ... flakey at best.
// Log.d("onKeyDown", "back pres"); // Log.d("onKeyDown", "back pres");
return isInputViewShown(); return isInputViewShown();
} else if (keyCode == KeyMap.ENTER) {// Let the underlying text editor always handle these. } else if (keyCode == KeyEvent.KEYCODE_ENTER) {// Let the underlying text editor always handle these.
return false; return false;
// special case for softkeys // special case for softkeys
} else if (keyCode == KeyMap.SOFT_RIGHT || keyCode == KeyMap.SOFT_LEFT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT || keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(keyCode, true); interfacehandler.setPressed(keyCode, true);
} }
@ -570,7 +578,7 @@ public class TraditionalT9 extends InputMethodService implements
} else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 || keyCode == KeyEvent.KEYCODE_2 || } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 || keyCode == KeyEvent.KEYCODE_2 ||
keyCode == KeyEvent.KEYCODE_3 || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 || keyCode == KeyEvent.KEYCODE_3 || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 ||
keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 || keyCode == KeyEvent.KEYCODE_8 ||
keyCode == KeyEvent.KEYCODE_9 || keyCode == KeyMap.POUND || keyCode == KeyMap.STAR) { keyCode == KeyEvent.KEYCODE_9 || keyCode == KeyEvent.KEYCODE_POUND || keyCode == KeyEvent.KEYCODE_STAR) {
event.startTracking(); event.startTracking();
return true; return true;
} else {// KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD).getNumber(keyCode) } else {// KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD).getNumber(keyCode)
@ -581,13 +589,42 @@ public class TraditionalT9 extends InputMethodService implements
commitReset(); commitReset();
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
/**
* Use this to monitor key events being delivered to the application. We get
* first crack at them, and can either resume them or let them continue to
* the app.
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Translate key
KeyEvent key = TranslateKey(keyCode, event);
if (key != null) {
keyCode = key.getKeyCode();
event = key;
}
if (!onKeyDown_(keyCode, event)) {
if (key == null || keyRemap) {
return false;
}
else {
// push key to lower level
// dumb handling of null for edge weird timing cases.
if (currentInputConnection == null)
currentInputConnection = getCurrentInputConnection();
if (currentInputConnection != null)
currentInputConnection.sendKeyEvent(event);
}
}
return true;
}
protected void launchOptions() { protected void launchOptions() {
Intent awintent = new Intent(this, TraditionalT9Settings.class); Intent awintent = new Intent(this, TraditionalT9Settings.class);
awintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); awintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
awintent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); awintent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(KeyMap.SOFT_RIGHT, false); interfacehandler.setPressed(KeyEvent.KEYCODE_SOFT_RIGHT, false);
} }
hideWindow(); hideWindow();
startActivity(awintent); startActivity(awintent);
@ -602,14 +639,14 @@ public class TraditionalT9 extends InputMethodService implements
// Log.d("onLongPress", "LONG PRESS: " + keyCode); // Log.d("onLongPress", "LONG PRESS: " + keyCode);
// HANDLE SPECIAL KEYS // HANDLE SPECIAL KEYS
if (keyCode == KeyMap.POUND) { if (keyCode == KeyEvent.KEYCODE_POUND) {
commitReset(); commitReset();
// do default action or insert new line // do default action or insert new line
if (!sendDefaultEditorAction(true)) { if (!sendDefaultEditorAction(true)) {
onText("\n"); onText("\n");
} }
return true; return true;
} else if (keyCode == KeyMap.STAR) { } else if (keyCode == KeyEvent.KEYCODE_STAR) {
if (mKeyMode != MODE_NUM) { if (mKeyMode != MODE_NUM) {
if (mLangsAvailable.length > 1) { if (mLangsAvailable.length > 1) {
nextLang(); nextLang();
@ -619,7 +656,7 @@ public class TraditionalT9 extends InputMethodService implements
return true; return true;
} }
} else if (keyCode == KeyMap.SOFT_LEFT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(keyCode, false); interfacehandler.setPressed(keyCode, false);
} }
@ -631,7 +668,7 @@ public class TraditionalT9 extends InputMethodService implements
} }
} }
} else if (keyCode == KeyMap.SOFT_RIGHT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT) {
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(keyCode, false); interfacehandler.setPressed(keyCode, false);
} }
@ -655,15 +692,9 @@ public class TraditionalT9 extends InputMethodService implements
return true; return true;
} }
/** private boolean onKeyUp_(int keyCode, KeyEvent event) {
* Use this to monitor key events being delivered to the application. We get // Log.d("onKeyUp", "Key: " + keyCode + " repeat?: " +
* first crack at them, and can either resume them or let them continue to // event.getRepeatCount());
* the app.
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// Log.d("onKeyUp", "Key: " + keyCode + " repeat?: " +
// event.getRepeatCount());
if (mEditing == NON_EDIT) { if (mEditing == NON_EDIT) {
// if (mButtonClose) { // if (mButtonClose) {
// //handle UI weirdness on up event // //handle UI weirdness on up event
@ -677,7 +708,7 @@ public class TraditionalT9 extends InputMethodService implements
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
if (keyCode == KeyMap.DPAD_CENTER) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
if (interfacehandler != null) { if (interfacehandler != null) {
interfacehandler.setPressed(keyCode, false); interfacehandler.setPressed(keyCode, false);
} }
@ -685,35 +716,34 @@ public class TraditionalT9 extends InputMethodService implements
return false; return false;
} }
return handleDPAD(keyCode, event, false); return handleDPAD(keyCode, event, false);
} else if (keyCode == KeyMap.DPAD_DOWN || keyCode == KeyMap.DPAD_UP || keyCode == KeyMap.DPAD_LEFT || keyCode == KeyMap.DPAD_RIGHT) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
if (mEditing == EDITING_NOSHOW) { if (mEditing == EDITING_NOSHOW) {
return false; return false;
} }
return handleDPAD(keyCode, event, false); return handleDPAD(keyCode, event, false);
} else if (keyCode == KeyMap.SOFT_RIGHT || keyCode == KeyMap.SOFT_LEFT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT || keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
if (!isInputViewShown()) { if (!isInputViewShown()) {
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
} }
if (event.isCanceled()) { if (event.isCanceled()) {
return true; return true;
} }
if (keyCode == KeyMap.BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isInputViewShown()) { if (isInputViewShown()) {
hideWindow(); hideWindow();
return true; return true;
} }
return false; return false;
} else if (keyCode == KeyMap.DEL) { } else if (keyCode == KeyEvent.KEYCODE_DEL) {
return true; return true;
} else if (keyCode == KeyMap.ENTER) { } else if (keyCode == KeyEvent.KEYCODE_ENTER) {
return false; return false;
// special case for softkeys // special case for softkeys
} else if (keyCode == KeyMap.SOFT_RIGHT || keyCode == KeyMap.SOFT_LEFT) {// if (mAddingWord){ } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT || keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {// if (mAddingWord){
// Log.d("onKeyUp", "key: " + keyCode + " skip: " + // Log.d("onKeyUp", "key: " + keyCode + " skip: " +
// mAddingSkipInput); // mAddingSkipInput);
// if (mAddingSkipInput) { // if (mAddingSkipInput) {
@ -734,7 +764,7 @@ public class TraditionalT9 extends InputMethodService implements
} else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 || keyCode == KeyEvent.KEYCODE_2 } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 || keyCode == KeyEvent.KEYCODE_2
|| keyCode == KeyEvent.KEYCODE_3 || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 || || keyCode == KeyEvent.KEYCODE_3 || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 ||
keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 || keyCode == KeyEvent.KEYCODE_8 ||
keyCode == KeyEvent.KEYCODE_9 || keyCode == KeyMap.POUND || keyCode == KeyMap.STAR) { keyCode == KeyEvent.KEYCODE_9 || keyCode == KeyEvent.KEYCODE_POUND || keyCode == KeyEvent.KEYCODE_STAR) {
// if (!isInputViewShown()){ // if (!isInputViewShown()){
// Log.d("onKeyUp", "showing window."); // Log.d("onKeyUp", "showing window.");
// //showWindow(true); // //showWindow(true);
@ -750,6 +780,35 @@ public class TraditionalT9 extends InputMethodService implements
commitReset(); commitReset();
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
/**
* Use this to monitor key events being delivered to the application. We get
* first crack at them, and can either resume them or let them continue to
* the app.
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// Translate key
KeyEvent key = TranslateKey(keyCode, event);
if (key != null) {
keyCode = key.getKeyCode();
event = key;
}
if (!onKeyUp_(keyCode, event)) {
if (key == null || keyRemap) {
return false;
}
else {
// push key to lower level
// dumb handling of null for edge weird timing cases.
if (currentInputConnection == null)
currentInputConnection = getCurrentInputConnection();
if (currentInputConnection != null)
currentInputConnection.sendKeyEvent(event);
}
}
return true;
}
/** /**
* Helper function to commit any text being composed in to the editor. * Helper function to commit any text being composed in to the editor.
@ -814,32 +873,28 @@ public class TraditionalT9 extends InputMethodService implements
// Log.d("OnKey", "pri: " + keyCode); // Log.d("OnKey", "pri: " + keyCode);
// Log.d("onKey", "START Cm: " + mCapsMode); // Log.d("onKey", "START Cm: " + mCapsMode);
// HANDLE SPECIAL KEYS // HANDLE SPECIAL KEYS
if (keyCode == KeyMap.DEL) { if (keyCode == KeyEvent.KEYCODE_DEL) {
handleBackspace(); handleBackspace();
} else if (keyCode == KeyEvent.KEYCODE_STAR) {
// change case // change case
} else if (keyCode == KeyMap.STAR) {
if (mKeyMode == MODE_NUM) { if (mKeyMode == MODE_NUM) {
handleCharacter(KeyMap.STAR); handleCharacter(KeyEvent.KEYCODE_STAR);
} else { } else {
handleShift(); handleShift();
} }
} else if (keyCode == KeyEvent.KEYCODE_BACK) {
} else if (keyCode == KeyMap.BACK) {
handleClose(); handleClose();
} else if (keyCode == KeyEvent.KEYCODE_POUND) {
// space // space
} else if (keyCode == KeyMap.POUND) { handleCharacter(KeyEvent.KEYCODE_POUND);
handleCharacter(KeyMap.POUND); } else if (keyCode == KeyEvent.KEYCODE_SOFT_LEFT) {
} else if (keyCode == KeyMap.SOFT_LEFT) {
if (mWordFound) { if (mWordFound) {
showSymbolPage(); showSymbolPage();
} else { } else {
showAddWord(); showAddWord();
} }
} else if (keyCode == KeyMap.SOFT_RIGHT) { } else if (keyCode == KeyEvent.KEYCODE_SOFT_RIGHT) {
nextKeyMode(); nextKeyMode();
} else { } else {
@ -1030,7 +1085,7 @@ public class TraditionalT9 extends InputMethodService implements
updateCandidates(); updateCandidates();
} else { } else {
mPreviousWord = ""; mPreviousWord = "";
keyDownUp(KeyMap.DEL); keyDownUp(KeyEvent.KEYCODE_DEL);
} }
updateShiftKeyState(getCurrentInputEditorInfo()); updateShiftKeyState(getCurrentInputEditorInfo());
// Log.d("handleBS", "Cm: " + mCapsMode); // Log.d("handleBS", "Cm: " + mCapsMode);
@ -1064,8 +1119,9 @@ public class TraditionalT9 extends InputMethodService implements
switch (mKeyMode) { switch (mKeyMode) {
case MODE_LANG: case MODE_LANG:
// it begins // it begins
// on POUND commit and space // take note of spaceOnZero
if (keyCode == KeyMap.POUND) { if (keyCode == KeyEvent.KEYCODE_POUND ||
( spaceOnZero && (keyCode == KeyEvent.KEYCODE_0) )) {
if (mComposing.length() > 0) { if (mComposing.length() > 0) {
commitTyped(); commitTyped();
} }
@ -1084,11 +1140,18 @@ public class TraditionalT9 extends InputMethodService implements
case MODE_TEXT: case MODE_TEXT:
t9releasehandler.removeCallbacks(mt9release); t9releasehandler.removeCallbacks(mt9release);
if (keyCode == KeyMap.POUND) { if (keyCode == KeyEvent.KEYCODE_POUND) {
keyCode = 10; keyCode = 10;
} else { } else {
keyCode = keyCode - KeyEvent.KEYCODE_0; keyCode = keyCode - KeyEvent.KEYCODE_0;
} }
// special translation of that keyCode (which is now T9TABLE index
if (spaceOnZero) {
if (keyCode == 0)
keyCode = 11;
if (keyCode == 10)
keyCode = 12;
}
//Log.d("handleChar", "Key: " + keyCode + "Previous Key: " + mPrevious + " Index:" + mCharIndex); //Log.d("handleChar", "Key: " + keyCode + "Previous Key: " + mPrevious + " Index:" + mCharIndex);
boolean newChar = false; boolean newChar = false;
@ -1132,9 +1195,9 @@ public class TraditionalT9 extends InputMethodService implements
break; break;
case MODE_NUM: case MODE_NUM:
if (keyCode == KeyMap.POUND) { if (keyCode == KeyEvent.KEYCODE_POUND) {
onText("#"); onText("#");
} else if (keyCode == KeyMap.STAR) { } else if (keyCode == KeyEvent.KEYCODE_STAR) {
onText("*"); onText("*");
} else { } else {
onText(String.valueOf(keyCode - KeyEvent.KEYCODE_0)); onText(String.valueOf(keyCode - KeyEvent.KEYCODE_0));
@ -1177,17 +1240,17 @@ public class TraditionalT9 extends InputMethodService implements
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} else { } else {
if (mKeyMode != MODE_NUM && mComposing.length() > 0) { if (mKeyMode != MODE_NUM && mComposing.length() > 0) {
if (keyCode == KeyMap.DPAD_DOWN) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
mCandidateView.scrollSuggestion(1); mCandidateView.scrollSuggestion(1);
if (mSuggestionStrings.size() > mCandidateView.mSelectedIndex) if (mSuggestionStrings.size() > mCandidateView.mSelectedIndex)
currentInputConnection.setComposingText(mSuggestionStrings.get(mCandidateView.mSelectedIndex), 1); currentInputConnection.setComposingText(mSuggestionStrings.get(mCandidateView.mSelectedIndex), 1);
return true; return true;
} else if (keyCode == KeyMap.DPAD_UP) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
mCandidateView.scrollSuggestion(-1); mCandidateView.scrollSuggestion(-1);
if (mSuggestionStrings.size() > mCandidateView.mSelectedIndex) if (mSuggestionStrings.size() > mCandidateView.mSelectedIndex)
currentInputConnection.setComposingText(mSuggestionStrings.get(mCandidateView.mSelectedIndex), 1); currentInputConnection.setComposingText(mSuggestionStrings.get(mCandidateView.mSelectedIndex), 1);
return true; return true;
} else if (keyCode == KeyMap.DPAD_LEFT || keyCode == KeyMap.DPAD_RIGHT) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
if (mKeyMode == MODE_LANG) { if (mKeyMode == MODE_LANG) {
commitTyped(); commitTyped();
} else if (mKeyMode == MODE_TEXT) { } else if (mKeyMode == MODE_TEXT) {
@ -1198,7 +1261,7 @@ public class TraditionalT9 extends InputMethodService implements
return true; return true;
} }
} }
if (keyCode == KeyMap.DPAD_CENTER) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
handleMidButton(); handleMidButton();
return true; return true;
} else {// Send stored event to input connection then pass current } else {// Send stored event to input connection then pass current

View file

@ -692,8 +692,8 @@ public class TraditionalT9Settings extends ListActivity implements
// get settings // get settings
Object[] settings = T9DB.getInstance(this).getSettings(new SETTING[] Object[] settings = T9DB.getInstance(this).getSettings(new SETTING[]
// 0, 1, 2 // Order should be based on SETTING.sqOrder
{SETTING.INPUT_MODE, SETTING.LANG_SUPPORT, SETTING.MODE_NOTIFY}); {SETTING.INPUT_MODE, SETTING.LANG_SUPPORT, SETTING.MODE_NOTIFY, SETTING.KEY_REMAP, SETTING.SPACE_ZERO});
ListAdapter settingitems; ListAdapter settingitems;
try { try {
settingitems = new SettingAdapter(this, CustomInflater.inflate(this, R.xml.prefs, settings)); settingitems = new SettingAdapter(this, CustomInflater.inflate(this, R.xml.prefs, settings));
@ -722,8 +722,12 @@ public class TraditionalT9Settings extends ListActivity implements
backupDict(); backupDict();
else if (s.id.equals("restoredict")) else if (s.id.equals("restoredict"))
restoreDict(); restoreDict();
else if (s.id.equals("reloadKeys")) else if (s.id.equals("reloadKeys")) {
KeyMap.setKeys(); int msg = KeyMap.setKeys();
if (msg != 0) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
else else
s.clicked(mContext); s.clicked(mContext);
} }

View file

@ -7,6 +7,7 @@ import android.widget.CheckBox;
import org.nyanya.android.traditionalt9.R; import org.nyanya.android.traditionalt9.R;
import org.nyanya.android.traditionalt9.T9DB; import org.nyanya.android.traditionalt9.T9DB;
import org.nyanya.android.traditionalt9.T9DB.DBSettings.SETTING;
public class SettingCheck extends Setting { public class SettingCheck extends Setting {
boolean value; boolean value;
@ -21,11 +22,14 @@ public class SettingCheck extends Setting {
defaultValue = attrs.getAttributeBooleanValue(i, false); defaultValue = attrs.getAttributeBooleanValue(i, false);
} }
} }
if (id.equals("pref_mode_notify")){
if (isettings[2] != null) SETTING s = SETTING.get(id);
value = isettings[2].equals(1); if (s != null) {
else Object o = isettings[s.sqOrder];
if (o == null)
value = defaultValue; value = defaultValue;
else
value = o.equals(1);
} }
widgetID = R.layout.checkbox; widgetID = R.layout.checkbox;
layout = R.layout.setting_widget; layout = R.layout.setting_widget;
@ -34,7 +38,7 @@ public class SettingCheck extends Setting {
@Override @Override
public void clicked(Context context) { public void clicked(Context context) {
value = !value; value = !value;
T9DB.getInstance(context).storeSettingInt(T9DB.DBSettings.SETTING.get(id), value ? 1 : 0); T9DB.getInstance(context).storeSettingInt(SETTING.get(id), value ? 1 : 0);
((CheckBox)view.findViewById(R.id.checkbox)).setChecked(value); ((CheckBox)view.findViewById(R.id.checkbox)).setChecked(value);
} }