1 package com.hiroshica.android.input.nicownn2;
3 import android.os.AsyncTask;
4 import android.os.Environment;
5 import android.util.Log;
7 import java.util.ArrayList;
9 //import java.io.FileInputStream;
10 //import java.io.FileOutputStream;
12 import org.xmlpull.v1.XmlPullParser;
13 import org.xmlpull.v1.XmlPullParserFactory;
18 public class UserDicImportExport extends AsyncTask<String, String, String[]>{
19 private UserDictionaryToolsList mActivity;
21 public UserDicImportExport(UserDictionaryToolsList activity) {
25 protected void onPreExecute() {
27 mActivity.createProgressDialog();
31 protected String[] doInBackground(String... params) {
32 boolean result = false;
33 String[] resultString = new String[2];
34 if (params[0].equals("import")) {
35 result = importUserDic(params[1], params[2], params[3]);
37 resultString[0] = "true";
38 resultString[1] = mActivity.getString(R.string.dialog_import_dic_message_done);
41 resultString[0] = "false";
42 resultString[1] = mActivity.getString(R.string.dialog_import_dic_message_failed);
46 resultString = exportUserDic(params[1], params[2], params[3]);
49 resultString[0] = "true";
50 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_done);
53 resultString[0] = "false";
54 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
61 protected void onPostExecute(String[] result) {
62 mActivity.removeProgressDialog(result);
65 protected void onCancelled() {
72 private boolean importUserDic(String file, String sd, String flash) {
73 File fileSdCard = getExternalStorageDirectory();
75 if (fileSdCard != null) {
76 //fileBase = new File(fileSdCard, mActivity.getPackageName());
77 fileBase = new File(fileSdCard, "nicoWnn");
78 if (!fileBase.exists()) {
83 File sFile = new File(fileBase, sd);
84 File dFile = new File(flash);
85 if (false == copyFile(dFile, sFile)) {
88 Log.d("load", "finish import learn dic!!\n");
90 ArrayList<WnnWord> importList = new ArrayList<WnnWord>();
92 File fileLoad = new File(fileBase, file);
93 Log.d("load", "create fileload\n");
94 FileInputStream fin = new FileInputStream(fileLoad);
95 Log.d("load", "create inputstream\n");
96 final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
97 final XmlPullParser parser = factory.newPullParser();
98 parser.setInput(fin, "UTF8");
99 Log.d("load", "create XML parser\n");
103 for(eventType = parser.getEventType(); eventType != XmlPullParser.END_DOCUMENT; eventType = parser.next()){
104 tagName = parser.getName();
105 if (eventType != XmlPullParser.START_TAG) continue;
106 if (tagName == null) continue;
107 if (!tagName.equals("dicword")) continue;
109 WnnWord newword = new WnnWord();
110 newword.stroke = parser.getAttributeValue(null,"stroke").replaceAll("\"", "");
111 Log.d("load", "get stroke = "+newword.stroke+"\n");
113 eventType = parser.next();
114 if (eventType == XmlPullParser.TEXT) {
115 newword.candidate = parser.getText().replaceAll("\"", "");;
116 Log.d("load", "get candidate = "+newword.candidate+"\n");
119 } while (eventType == XmlPullParser.END_DOCUMENT);
120 if (eventType == XmlPullParser.END_DOCUMENT) {
123 importList.add(importList.size(), newword);
125 } catch (Exception e) {
131 Log.d("load", "set new wordlist\n");
132 int size = importList.size();
133 for (int iI = 0; iI < size; ++iI) {
134 WnnWord getword = importList.get(iI);
135 boolean result = mActivity.addImportWord(getword);
136 if (false == result) {
140 Log.d("load", "finish import!!\n");
146 private String[] exportUserDic(String file, String flash, String sd) {
147 String[] resultString = new String[2];
148 resultString[0] = "true";
149 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_done);
151 File fileSdCard = getExternalStorageDirectory();
152 File fileBase = null;
153 if (fileSdCard != null) {
154 //fileBase = new File(fileSdCard, mActivity.getPackageName());
155 fileBase = new File(fileSdCard, "nicoWnn");
156 if (!fileBase.exists()) {
157 if (!fileBase.mkdir()) {
158 resultString[0] = "false";
159 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
165 resultString[0] = "false";
166 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
170 File fileSave = new File(fileBase, file);
171 FileOutputStream fout = new FileOutputStream(fileSave);
173 String header = new String("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
174 String top = new String("<wordlist>\n");
175 String end = new String("</wordlist>\n");
177 fout.write(header.getBytes());
178 fout.write(top.getBytes());
180 int size = mActivity.getWordListSize();
182 for (int iI = 0; iI < size; ++iI) {
183 getword = mActivity.getWnnWord(iI);
184 String outstring = new String(" <dicword stroke=\"" + getword.stroke + "\">\"" + getword.candidate + "\"</dicword>\n");
185 fout.write(outstring.getBytes());
187 fout.write(end.getBytes());
188 } catch (Exception e) {
189 resultString[0] = "false";
190 resultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
196 File sFile = new File(flash);
197 File dFile = new File(fileBase, sd);
198 copyFile(dFile, sFile);
201 /*************************************************************************************/
203 /*************************************************************************************/
207 private File getExternalStorageDirectory() {
208 boolean state = Environment.getExternalStorageState().contains(Environment.MEDIA_MOUNTED);
209 if (false == state) {
210 Log.d("sdcard", "not mount sdcard!!\n");
213 Log.d("sdcard", "mount sdcard!!\n");
214 return Environment.getExternalStorageDirectory();
216 private boolean copyFile(File dFile, File sFile) {
217 if (!sFile.exists()) {
220 InputStream input = null;
221 OutputStream output = null;
223 input = new FileInputStream(sFile);
224 output = new FileOutputStream(dFile);
225 int DEFAULT_BUFFER_SIZE = 1024 * 4;
226 byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
228 while (-1 != (n = input.read(buffer))) {
229 output.write(buffer, 0, n);
233 } catch (Exception e) {
239 /****************************** end of file ******************************/