<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hiroshica.android.input.nicownn2"
- android:versionCode="14" android:versionName="1.0.14">
+ android:versionCode="15" android:versionName="1.0.15">
<uses-permission xmlns:android="http://schemas.android.com/apk/res/android" android:name="android.permission.VIBRATE"/>
<application android:icon="@drawable/icon" android:label="NicoWnn">
<activity android:name="com.hiroshica.android.input.nicownn2.EN.UserDictionaryToolsEditEN" android:label="@string/user_dictionary_edit_words" />
-
-
<!--
<activity android:name="com.hiroshica.android.input.nicownn2.NicoWnnMushUp">
<intent-filter>
<string name="preference_nicownn_is_skip_space">英語変換時スペース</string>
<string name="preference_nicownn_is_skip_space_summary_ja">チェックを外すと英語変換で「 」が挿入されなくなります</string>
<string name="preference_nicownn_is_flick">ニコタッチフリック</string>
- <string name="preference_nicownn_is_flick_summary_ja">チェックを入れるとニコタッチ入力をフリックの様にスライド入力します</string>
-
+ <string name="preference_nicownn_is_flick_dialog">モード選択</string>
+ <string name="preference_nicownn_is_flick_summary_ja">ニコタッチフリックのモード選択</string>
+ <string name="preference_flick_none">フリック無効</string>
+ <string name="preference_flick_1stroke">1ストロークタイプ</string>
+ <string name="preference_flick_nicostroke">ニコタッチ/1ストローク混合タイプ</string>
<!-- Dialog Messages -->
<string name="dialog_button_ok">OK</string>
<string name="dialog_clear_user_dictionary_done">ユーザー辞書の内容をすべて消去しました。</string>
<string name="dialog_clear_learning_dictionary_done">学習辞書の内容をすべて消去しました。</string>
+ <string name="dialog_import_dic_message">SDカードからユーザー辞書を読み込みます。</string>
+ <string name="dialog_import_dic_message_done">ユーザー辞書を読み込みました。</string>
+ <string name="dialog_import_dic_message_failed">ユーザー辞書の読み込みに失敗しました。</string>
+ <string name="dialog_export_dic_message">ユーザー辞書をSDカードへ出力します。\n保存先は\n\"/sdcard/com.hiroshica.android.input.nicownn2\"\nになります</string>
+ <string name="dialog_export_dic_message_done">SDカードへ出力しました。</string>
+ <string name="dialog_export_dic_message_failed">SDカードへの出力に失敗しました。</string>
+
<!-- user dictionary -->
<string name="user_dictionary_list_words">単語一覧</string>
<string name="user_dictionary_list_words_en">英語ユーザー辞書 単語一覧</string>
<string name="user_dictionary_over_max_text_size_message">登録できる最大文字数を超えています。</string>
<string name="user_dictionary_creating_wordlist">生成中</string>
<string name="user_dictionary_init">ユーザー辞書全消去</string>
+ <string name="user_dictionary_import">SDカードから読み込み</string>
+ <string name="user_dictionary_export">SDカードへ保存</string>
<!-- IME dependency -->
<!-- OpenWnn English -->
- <string name="nicownn_english_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.14\nオムロン ソフトウェア(株)/hiroshica</string>
+ <string name="nicownn_english_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.15\nオムロン ソフトウェア(株)/hiroshica</string>
<!-- OpenWnn Japanese -->
- <string name="nicownn_japanese_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.14\nオムロン ソフトウェア(株)/hiroshica</string>
+ <string name="nicownn_japanese_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.15\nオムロン ソフトウェア(株)/hiroshica</string>
<!-- OpenWnn Chinese -->
- <string name="nicownn_china_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.14\nオムロン ソフトウェア(株)/hiroshica</string>
+ <string name="nicownn_china_copyright">OpenWnn Ver.1.3.1/NicoWnn Ver.1.0.15\nオムロン ソフトウェア(株)/hiroshica</string>
<!-- Candidate Delete -->
<string name="button_candidate_select">選 択</string>
-->
<resources>
+ <string-array name="flick_entries">
+ <item>@string/preference_flick_none</item>
+ <item>@string/preference_flick_1stroke</item>
+ <item>@string/preference_flick_nicostroke</item>
+ </string-array>
+
+ <string-array name="flick_values">
+ <item>none_flick</item>
+ <item>normal_stroke</item>
+ <item>nico_stroke</item>
+ </string-array>
+
<string-array name="keyboard_skin">
<item>@string/preference_keyboard_android_default</item>
<item>@string/preference_keyboard_simple</item>
<item>keyboard_simple</item>
<item>keyboard_metal</item>
</string-array>
+
</resources>
<string name="dialog_clear_user_dictionary_done">Cleared.</string>
<string name="dialog_clear_learning_dictionary_done">Cleared.</string>
+ <string name="dialog_import_dic_message">Import SDCard</string>
+ <string name="dialog_import_dic_message_done">success Import.</string>
+ <string name="dialog_import_dic_message_failed">failed Import.</string>
+ <string name="dialog_export_dic_message">Export SDCard</string>
+ <string name="dialog_export_dic_message_done">success Export.</string>
+ <string name="dialog_export_dic_message_failed">failed Export.</string>
+
<!-- user dictionary -->
<string name="user_dictionary_list_words">Registered words</string>
<string name="user_dictionary_list_words_en">Registered words in English User Dic</string>
<string name="user_dictionary_over_max_text_size_message">Length of the string exceeds the limit.</string>
<string name="user_dictionary_creating_wordlist">Loading</string>
<string name="user_dictionary_init">Initialize?</string>
+ <string name="user_dictionary_import">Import SDCard</string>
+ <string name="user_dictionary_export">Export SDCard</string>
<string name="user_dictionary_prev_button"> ≪ </string>
<string name="user_dictionary_next_button"> ≫ </string>
<string name="preference_nicownn_is_skip_space">convert English</string>
<string name="preference_nicownn_is_skip_space_summary_ja">uncheck, skip space.</string>
<string name="preference_nicownn_is_flick">flick Nico mode</string>
- <string name="preference_nicownn_is_flick_summary_ja">check, flick nico input mode.</string>
+ <string name="preference_nicownn_is_flick_dialog">select flick mode</string>
+ <string name="preference_nicownn_is_flick_summary_ja">select flick mode.</string>
+ <string name="preference_flick_none">none flick type.</string>
+ <string name="preference_flick_1stroke">1stroke flick type.</string>
+ <string name="preference_flick_nicostroke">nicoTouch/1stroke type.</string>
<!-- IME dependency -->
<!-- OpenWnn English -->
- <string name="nicownn_english_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.14</string>
+ <string name="nicownn_english_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.15</string>
<string name="nicownn_english">nicoWnn English</string>
<string name="nicownn_english_system_dictionary">/data/data/com.hiroshica.android.input.nicownn2/lib/libWnnEngDic.so</string>
<string name="nicownn_english_writable_dictionary">/data/data/com.hiroshica.android.input.nicownn2/writableEN.dic</string>
<string name="en_word_separators">.,;:!?</string>
<!-- OpenWnn Japanese -->
- <string name="nicownn_japanese_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.14</string>
+ <string name="nicownn_japanese_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.15</string>
<string name="nicownn_japanese">nicoWnn IME</string>
<string name="openwnn_japanese_system_dictionary">/data/data/com.hiroshica.android.input.nicownn2/lib/libWnnJpnDic.so</string>
<string name="nicownn_japanese_writable_dictionary">/data/data/com.hiroshica.android.input.nicownn2/writableJAJP.dic</string>
<!-- OpenWnn Chinese -->
- <string name="nicownn_china_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.14</string>
+ <string name="nicownn_china_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.\nNicoWnn Ver.1.0.15</string>
<string name="nicownn_china">nicoWnn Chinese</string>
<string name="openwnn_china_system_dictionary">/data/data/com.hiroshica.android.input.nicownn2/lib/libWnnZHCNDic.so</string>
<!-- After Config Change -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="nicownn_pref_ja">
+ <PreferenceCategory android:title="@string/preference_nicownn_menu">
+ <PreferenceScreen android:title="@string/preference_nicownn_menu">
+ <CheckBoxPreference android:key="change_keitaimode"
+ android:title="@string/preference_nicownn_change_keitaimode"
+ android:summary="@string/preference_nicownn_change_keitaimode_ja"
+ android:defaultValue="false" />
+ <CheckBoxPreference android:key="change_12key_qwerty"
+ android:title="@string/preference_nicownn_change_12key_qwerty"
+ android:summary="@string/preference_nicownn_change_12key_summary_ja"
+ android:defaultValue="false" />
+ <CheckBoxPreference android:key="change_bellmode"
+ android:title="@string/preference_nicownn_change_bellmode"
+ android:summary="@string/preference_nicownn_change_bellmode_summary_ja"
+ android:defaultValue="false" />
+ <CheckBoxPreference android:key="change_y_bellmode"
+ android:title="@string/preference_nicownn_change_y_bellmode"
+ android:summary="@string/preference_nicownn_change_y_bellmode_summary_ja"
+ android:defaultValue="false" />
+ <CheckBoxPreference android:key="is_skip_space"
+ android:title="@string/preference_nicownn_is_skip_space"
+ android:summary="@string/preference_nicownn_is_skip_space_summary_ja"
+ android:defaultValue="true" />
+ <ListPreference
+ android:key="nicoflick_mode"
+ android:title="@string/preference_nicownn_is_flick"
+ android:summary="@string/preference_nicownn_is_flick_summary_ja"
+
+ android:entries="@array/flick_entries"
+ android:entryValues="@array/flick_values"
+ android:defaultValue="none_flick" />
+
+ </PreferenceScreen>
+ </PreferenceCategory>
+
<PreferenceCategory android:title="@string/preference_key_setting_menu">
<CheckBoxPreference android:key="key_sound"
android:title="@string/preference_key_sound_title"
android:dependency="opt_prediction" />
</PreferenceCategory>
- <PreferenceCategory android:title="@string/preference_nicownn_menu">
- <CheckBoxPreference android:key="change_keitaimode"
- android:title="@string/preference_nicownn_change_keitaimode"
- android:summary="@string/preference_nicownn_change_keitaimode_ja"
- android:defaultValue="false" />
- <CheckBoxPreference android:key="change_12key_qwerty"
- android:title="@string/preference_nicownn_change_12key_qwerty"
- android:summary="@string/preference_nicownn_change_12key_summary_ja"
- android:defaultValue="false" />
- <CheckBoxPreference android:key="change_bellmode"
- android:title="@string/preference_nicownn_change_bellmode"
- android:summary="@string/preference_nicownn_change_bellmode_summary_ja"
- android:defaultValue="false" />
- <CheckBoxPreference android:key="change_y_bellmode"
- android:title="@string/preference_nicownn_change_y_bellmode"
- android:summary="@string/preference_nicownn_change_y_bellmode_summary_ja"
- android:defaultValue="false" />
- <CheckBoxPreference android:key="is_skip_space"
- android:title="@string/preference_nicownn_is_skip_space"
- android:summary="@string/preference_nicownn_is_skip_space_summary_ja"
- android:defaultValue="true" />
- <CheckBoxPreference android:key="is_flick_nico_input"
- android:title="@string/preference_nicownn_is_flick"
- android:summary="@string/preference_nicownn_is_flick_summary_ja"
- android:defaultValue="false" />
- </PreferenceCategory>
-
<PreferenceCategory android:title="@string/preference_dictionary_menu">
<PreferenceScreen android:key="user_dictionary_edit_words"
}
mListViewName = "com.hiroshica.android.input.nicownn2.EN.UserDictionaryToolsListEN";
mEditViewName = "com.hiroshica.android.input.nicownn2.EN.UserDictionaryToolsEditEN";
+ mImportExportName = "UserDicEN.xml";
mPackageName = "com.hiroshica.android.input.nicownn2";
}
private int mPrevInputKeyCode = 0;
/** flick nicoinput **/
- private boolean mFlickNicoInput = false;
+ private static final int NICOFLICK_NONE = 0;
+ private static final int NICOFLICK_1STROKE = 1;
+ private static final int NICOFLICK_NICOSTROKE = 2;
+
+ private int mFlickNicoInput = 0;
+ private boolean mNicoFlick = false;
+ private static final HashMap<String, Integer> flickModeTable = new HashMap<String, Integer>() {{
+ put("none_flick", 0);
+ put("normal_stroke", 1);
+ put("nico_stroke", 2);
+ }};
+
/** **/
private int mFlickLimitX;
private int mFlickLimitY;
mChange12keyQwertyMode = pref.getBoolean("change_12key_qwerty", false);
mChangeYLineBellMode = pref.getBoolean("change_y_bellmode", false);
mChangeBellMode = pref.getBoolean("change_bellmode", false);
- mFlickNicoInput = pref.getBoolean("is_flick_nico_input", false);
-
+ mFlickNicoInput = flickModeTable.get(pref.getString("nicoflick_mode", "none_flick"));
+
/* Create the suitable keyboard object */
if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
//mCurrentKeyboardType = KEYBOARD_12KEY;
mInputType = INPUT_TYPE_TOGGLE;
mode = NicoWnnEvent.Mode.DEFAULT;
mNikoFirst = false;
+ mNicoFlick = false;
break;
default:
mChange12keyQwertyMode = pref.getBoolean("change_12key_qwerty", false);
mChangeYLineBellMode = pref.getBoolean("change_y_bellmode", false);
mChangeBellMode = pref.getBoolean("change_bellmode", false);
- mFlickNicoInput = pref.getBoolean("is_flick_nico_input", false);
+ mFlickNicoInput = flickModeTable.get(pref.getString("nicoflick_mode", "none_flick"));
if (old12keyqwerty != mChange12keyQwertyMode) {
restartkey = true;
if (false == mChange12keyQwertyMode) {
private boolean onKeyNiko(int primaryCode, int[] keyCodes) {
Keyboard newKeyboard = null;
boolean retcode = false;
+
+ Log.v("key", "onkey event!!\n");
+
switch (primaryCode) {
case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
case KEYCODE_JP12_BACKSPACE:
case KEYCODE_JP12_8:
case KEYCODE_JP12_9:
case KEYCODE_JP12_0:
- if (true == mFlickNicoInput && false == mNikoFirst) {
+ if ((NICOFLICK_1STROKE == mFlickNicoInput) && (false == mNikoFirst)) {
+ retcode = true;
+ break;
+ }
+ if ((NICOFLICK_NICOSTROKE == mFlickNicoInput) && (true == mNicoFlick) && (mPrevInputKeyCode == primaryCode)) {
+ mNicoFlick = false;
retcode = true;
break;
}
+
if (mNikoFirst == false) {
mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
/* change keymap */
changeKeyboard(newKeyboard);
}
mNikoFirst = false;
+ mNicoFlick = false;
}
retcode = true;
break;
changeKeyboard(newKeyboard);
}
mNikoFirst = false;
+ mNicoFlick = false;
} // resetNikoKeyboard
private void setLastNikoChar(int keycode) {
int col = getTableIndex(keycode);
mStockFlickCode = primaryCode;
if (mCurrentKeyMode == KEYMODE_JA_FULL_NIKO) {
- if (false == mFlickNicoInput) {
+ if (NICOFLICK_NONE == mFlickNicoInput) {
return;
}
switch (primaryCode) {
case KEYCODE_JP12_8:
case KEYCODE_JP12_9:
case KEYCODE_JP12_0:
- if (mNikoFirst == false) {
+ if ((false == mNikoFirst) && (false == mNicoFlick)) {
mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
/* change keymap */
int index = getTableIndex(primaryCode);
}
mPrevInputKeyCode = primaryCode;
mNikoFirst = true;
+ mNicoFlick = true;
}
break;
}
*/
@Override public void onRelease(int primaryCode) {
super.onRelease(primaryCode);
-
- if (false == mIsEnableFlick) {
- return;
- }
- if (mCurrentKeyMode == KEYMODE_JA_FULL_NIKO) {
- return;
- }
-
- if (true == mIsHookFlick) {
- onKey(mStockFlickCode, null);
- return;
- }
-
- float getx = mReleaseX - mPressX;
- float gety = mReleaseY - mPressY;
- float limx = getx;
- float limy = gety;
- if (limx < 0.0f) limx *= -1.0f;
- if (limy < 0.0f) limy *= -1.0f;
-
- if (limx < mFlickLimitX) {
- limx = 0.0f;
- }
- if (limy < mFlickLimitY) {
- limy = 0.0f;
- }
- int offset = 0;
- if (limx > limy) {
- // move left/right
- if (getx < mFlickLimitX) {
- offset = 1;
- }
- else {
- offset = 3;
- }
- }
- else if (limy > limx) {
- // move up/down
- if (gety < mFlickLimitY) {
- offset = 2;
- }
- else {
- offset = 4;
- }
- }
-
-
-
- switch (mStockFlickCode) {
- case KEYCODE_JP12_1:
- case KEYCODE_JP12_2:
- case KEYCODE_JP12_3:
- case KEYCODE_JP12_4:
- case KEYCODE_JP12_5:
- case KEYCODE_JP12_6:
- case KEYCODE_JP12_7:
- case KEYCODE_JP12_8:
- case KEYCODE_JP12_9:
- case KEYCODE_JP12_0:
- int col = getTableIndex(mStockFlickCode);
- String[][] cycleTable = getCycleTable();
- if (cycleTable == null) {
- Log.e("NicoWnn", "not founds cycle table");
- }
- else{
- mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_CHAR, cycleTable[col * 10 + offset]));
- }
- mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
- break;
- default:
- onKey(mStockFlickCode, null);
- return;
- }
- /* update shift key's state */
- if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
- setShiftByEditorInfo();
- }
} // onRelease
}
public UserDictionaryToolsListJAJP() {
mListViewName = "com.hiroshica.android.input.nicownn2.JAJP.UserDictionaryToolsListJAJP";
mEditViewName = "com.hiroshica.android.input.nicownn2.JAJP.UserDictionaryToolsEditJAJP";
+ mImportExportName = "UserDicJAJP.xml";
mPackageName = "com.hiroshica.android.input.nicownn2";
}
--- /dev/null
+package com.hiroshica.android.input.nicownn2;
+
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.util.Log;
+
+import java.util.ArrayList;
+//import java.io.File;
+//import java.io.FileInputStream;
+//import java.io.FileOutputStream;
+import java.io.*;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+
+
+
+public class UserDicImportExport extends AsyncTask<String, String, String[]>{
+ private UserDictionaryToolsList mActivity;
+
+ public UserDicImportExport(UserDictionaryToolsList activity) {
+ mActivity = activity;
+ }
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ mActivity.createProgressDialog();
+ }
+
+ @Override
+ protected String[] doInBackground(String... params) {
+ boolean result = false;
+ String[] resultString = new String[2];
+ if (params[0].equals("import")) {
+ result = importUserDic(params[1]);
+ if (true == result) {
+ resultString[0] = "true";
+ resultString[1] = mActivity.getString(R.string.dialog_import_dic_message_done);
+ }
+ else{
+ resultString[0] = "false";
+ resultString[1] = mActivity.getString(R.string.dialog_import_dic_message_failed);
+ }
+ }
+ else{
+ result = exportUserDic(params[1]);
+ if (true == result) {
+ resultString[0] = "true";
+ resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_done);
+ }
+ else{
+ resultString[0] = "false";
+ resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
+ }
+ }
+ return resultString;
+ }
+ @Override
+ protected void onPostExecute(String[] result) {
+ mActivity.removeProgressDialog(result);
+ }
+ @Override
+ protected void onCancelled() {
+ super.onCancelled();
+ }
+
+ /*
+ *
+ */
+ private boolean importUserDic(String file) {
+ File fileSdCard = getExternalStorageDirectory();
+ File fileBase = null;
+ if (fileSdCard != null) {
+ fileBase = new File(fileSdCard, mActivity.getPackageName());
+ if (!fileBase.exists()) {
+ return false;
+ }
+ }
+ ArrayList<WnnWord> importList = new ArrayList<WnnWord>();
+ try {
+ File fileLoad = new File(fileBase, file);
+ Log.d("load", "create fileload\n");
+ FileInputStream fin = new FileInputStream(fileLoad);
+ Log.d("load", "create inputstream\n");
+ final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+ final XmlPullParser parser = factory.newPullParser();
+ parser.setInput(fin, "UTF8");
+ Log.d("load", "create XML parser\n");
+ int eventType;
+ String tagName;
+ String tagText;
+ for(eventType = parser.getEventType(); eventType != XmlPullParser.END_DOCUMENT; eventType = parser.next()){
+ tagName = parser.getName();
+ if (eventType != XmlPullParser.START_TAG) continue;
+ if (tagName == null) continue;
+ if (!tagName.equals("dicword")) continue;
+ // entry word
+ WnnWord newword = new WnnWord();
+ newword.stroke = parser.getAttributeValue(null,"stroke").replaceAll("\"", "");
+ Log.d("load", "get stroke = "+newword.stroke+"\n");
+ do {
+ eventType = parser.next();
+ if (eventType == XmlPullParser.TEXT) {
+ newword.candidate = parser.getText().replaceAll("\"", "");;
+ Log.d("load", "get candidate = "+newword.candidate+"\n");
+ break;
+ }
+ } while (eventType == XmlPullParser.END_DOCUMENT);
+ if (eventType == XmlPullParser.END_DOCUMENT) {
+ break;
+ }
+ importList.add(importList.size(), newword);
+ }
+ } catch (Exception e) {
+ return false;
+ } finally {
+ //
+ }
+ // set new wordlist
+ Log.d("load", "set new wordlist\n");
+ int size = importList.size();
+ for (int iI = 0; iI < size; ++iI) {
+ WnnWord getword = importList.get(iI);
+ boolean result = mActivity.addImportWord(getword);
+ if (false == result) {
+ return false;
+ }
+ }
+ Log.d("load", "finish import!!\n");
+ return true;
+ }
+ /*
+ *
+ */
+ private boolean exportUserDic(String file) {
+ File fileSdCard = getExternalStorageDirectory();
+ File fileBase = null;
+ if (fileSdCard != null) {
+ fileBase = new File(fileSdCard, mActivity.getPackageName());
+ if (!fileBase.exists()) {
+ if (!fileBase.mkdir()) {
+ return false;
+ } // mkdir
+ } // exists
+ } // sd card
+
+ try {
+ File fileSave = new File(fileBase, file);
+ FileOutputStream fout = new FileOutputStream(fileSave);
+ // output XML header
+ String header = new String("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+ String top = new String("<wordlist>\n");
+ String end = new String("</wordlist>\n");
+
+ fout.write(header.getBytes());
+ fout.write(top.getBytes());
+ // create data
+ int size = mActivity.getWordListSize();
+ WnnWord getword;
+ for (int iI = 0; iI < size; ++iI) {
+ getword = mActivity.getWnnWord(iI);
+ String outstring = new String(" <dicword stroke=\"" + getword.stroke + "\">\"" + getword.candidate + "\"</dicword>\n");
+ fout.write(outstring.getBytes());
+ }
+ fout.write(end.getBytes());
+ } catch (Exception e) {
+ return false;
+ } finally {
+ //
+ }
+ return true;
+ }
+ /*************************************************************************************/
+ /* file load/save */
+ /*************************************************************************************/
+ /*
+ *
+ */
+ private File getExternalStorageDirectory() {
+ if (!Environment.getExternalStorageState().contains("mounted")) {
+ return null;
+ }
+ return Environment.getExternalStorageDirectory();
+ }
+}
\ No newline at end of file
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.View.OnCreateContextMenuListener;
import android.view.MotionEvent;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Button;
+import android.widget.ScrollView;
import java.util.ArrayList;
import java.util.Arrays;
private final int MENU_ITEM_DELETE = 2;
/** ID of the menu item (initialize) */
private final int MENU_ITEM_INIT = 3;
+ /** ID of the menu item (import) */
+ private final int MENU_ITEM_IMPORT = 4;
+ /** ID of the menu item (export) */
+ private final int MENU_ITEM_EXPORT = 5;
/** ID of the dialog control (confirm deletion) */
private final int DIALOG_CONTROL_DELETE_CONFIRM = 0;
/** ID of the dialog control (confirm initialize) */
private final int DIALOG_CONTROL_INIT_CONFIRM = 1;
+ private final int DIALOG_CONTROL_IMPORT_CONFIRM = 2;
+ private final int DIALOG_CONTROL_EXPORT_CONFIRM = 3;
+
/** The size of font*/
private final int WORD_TEXT_SIZE = 16;
/** List of the words in the user dictionary */
private ArrayList<WnnWord> mWordList = null;
+ private ArrayList<WnnWord> mImportWordList = null;
/** Work area for sorting the word list */
private WnnWord[] mSortData;
/** Page right button */
private Button mRightButton = null;
+ protected ProgressDialog mProgressDialogTop;
+ UserDictionaryToolsList mThis;
+ protected String mImportExportName;
+
/**
* Send the specified event to IME
*
super.onCreate(savedInstanceState);
+ mThis = this;
+
/* create XML layout */
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.user_dictionary_tools_list);
}
});
mRightButton = b;
-
}
/** @see android.app.Activity#onStart */
.setIcon(android.R.drawable.ic_menu_delete)
.setEnabled(mInitMenuEnabled);
+ menu.add(2, MENU_ITEM_IMPORT, 0, R.string.user_dictionary_import)
+ .setIcon(android.R.drawable.ic_menu_upload)
+ .setEnabled(mInitMenuEnabled);
+
+ menu.add(2, MENU_ITEM_EXPORT, 0, R.string.user_dictionary_export)
+ .setIcon(android.R.drawable.ic_menu_save)
+ .setEnabled(mInitMenuEnabled);
+
mMenu = menu;
mInitializedMenu = true;
showDialog(DIALOG_CONTROL_INIT_CONFIRM);
ret = true;
break;
+ case MENU_ITEM_IMPORT:
+ /* clear the dictionary (show dialog) */
+ showDialog(DIALOG_CONTROL_IMPORT_CONFIRM);
+ ret = true;
+ break;
+ case MENU_ITEM_EXPORT:
+ /* clear the dictionary (show dialog) */
+ showDialog(DIALOG_CONTROL_EXPORT_CONFIRM);
+ ret = true;
+ break;
+
default:
ret = false;
.setCancelable(true)
.create();
+ case DIALOG_CONTROL_IMPORT_CONFIRM:
+ return new AlertDialog.Builder(UserDictionaryToolsList.this)
+ .setMessage(R.string.dialog_import_dic_message)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok, mImportDic)
+ .setCancelable(true)
+ .create();
+
+ case DIALOG_CONTROL_EXPORT_CONFIRM:
+ return new AlertDialog.Builder(UserDictionaryToolsList.this)
+ .setMessage(R.string.dialog_export_dic_message)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok, mExportDic)
+ .setCancelable(true)
+ .create();
+
default:
Log.e("NicoWnn", "onCreateDialog : Invaled Get DialogID. ID=" + id);
break;
}
}
};
+ /**
+ * @param dialog The information of the dialog
+ * @param button The button that is pushed
+ */
+ private DialogInterface.OnClickListener mImportDic =
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int button) {
+ mImportWordList = null;
+ UserDicImportExport task = new UserDicImportExport(mThis);
+ String[] params = new String[2];
+ params[0] = "import";
+ params[1] = mImportExportName;
+ task.execute(params);
+ }
+ };
+ /**
+ * @param dialog The information of the dialog
+ * @param button The button that is pushed
+ */
+ private DialogInterface.OnClickListener mExportDic =
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int button) {
+ UserDicImportExport task = new UserDicImportExport(mThis);
+ String[] params = new String[2];
+ params[0] = "export";
+ params[1] = mImportExportName;
+ task.execute(params);
+ }
+ };
+
/** @see android.view.View.OnClickListener#onClick */
}
mTableLayout.requestLayout();
}
+ /*************************************************************************************/
+ /* access wordlist */
+ /*************************************************************************************/
+ public ArrayList<WnnWord> getWordList() {
+ return mWordList;
+ }
+ public int getWordListSize() {
+ return mWordList.size();
+ }
+ public WnnWord getWnnWord(int index) {
+ return mWordList.get(index);
+ }
+
+ /*************************************************************************************/
+ /* progress */
+ /*************************************************************************************/
+ /*
+ *
+ */
+ public void createProgressDialog() {
+ mProgressDialogTop = new ProgressDialog(this);
+ mProgressDialogTop.setTitle("import/export");
+ mProgressDialogTop.setMessage("import/export... ");
+ mProgressDialogTop.setIndeterminate(false);
+ mProgressDialogTop.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ mProgressDialogTop.setIndeterminate(true);
+ mProgressDialogTop.setCancelable(false);
+ mProgressDialogTop.show();
+ }
+ /*
+ *
+ */
+ public void removeProgressDialog(String[] result) {
+ mWordList = getWords();
+ int size = mWordList.size();
+ if (size <= mWordCount) {
+ int newPos = (mWordCount - MAX_LIST_WORD_COUNT);
+ mWordCount = (0 <= newPos) ? newPos : 0;
+ }
+ updateWordList();
+
+ TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
+ leftText.setText(size + "/" + MAX_WORD_COUNT);
+
+ if (mInitializedMenu) {
+ onCreateOptionsMenu(mMenu);
+ }
+
+ // remove dialog & set finish message
+ mProgressDialogTop.dismiss();
+ Toast.makeText(getApplicationContext(), result[1], Toast.LENGTH_LONG).show();
+ }
+ public boolean addImportWord(WnnWord wnnWordAdd) {
+ boolean ret;
+ /* add word event */
+ NicoWnnEvent event = new NicoWnnEvent(NicoWnnEvent.ADD_WORD,
+ WnnEngine.DICTIONARY_TYPE_USER,
+ wnnWordAdd);
+ /* notify the event to IME */
+ ret = sendEventToIME(event);
+ return ret;
+ }
}