1 package jp.sourceforge.gokigen.memoma;
3 import java.text.SimpleDateFormat;
4 import java.util.ArrayList;
5 import java.util.Calendar;
6 import java.util.Enumeration;
9 import android.app.Activity;
10 import android.app.Dialog;
11 import android.content.Intent;
12 import android.util.Log;
13 import android.view.Menu;
14 import android.view.MenuItem;
15 import android.view.MotionEvent;
16 import android.view.View;
17 import android.view.View.OnClickListener;
18 import android.widget.AdapterView;
19 import android.widget.ImageButton;
20 import android.widget.ListAdapter;
21 import android.widget.ListView;
22 import android.widget.Toast;
30 public class ExtensionActivityListener implements OnClickListener, MeMoMaFileLoadingProcess.IResultReceiver, MeMoMaFileExportCsvProcess.IResultReceiver, FileSelectionDialog.IResultReceiver, MeMoMaFileImportCsvProcess.IResultReceiver
32 public final int MENU_ID_EXPORT= (Menu.FIRST + 1);
33 public final int MENU_ID_SHARE = (Menu.FIRST + 2);
34 public final int MENU_ID_IMPORT = (Menu.FIRST + 3);
36 private final String EXTENSION_DIRECTORY = "/exported";
38 private ExternalStorageFileUtility fileUtility = null;
39 private MeMoMaObjectHolder objectHolder = null;
40 private FileSelectionDialog fileSelectionDialog = null;
42 private boolean isShareExportedData = false;
44 private List<SymbolListArrayItem> listItems = null;
46 private Activity parent = null; // 親分
52 public ExtensionActivityListener(Activity argument)
55 fileUtility = new ExternalStorageFileUtility(Main.APP_BASEDIR);
56 objectHolder = new MeMoMaObjectHolder(parent, new MeMoMaConnectLineHolder());
63 public void prepareExtraDatas(Intent myIntent)
67 // Intentで拾ったデータを読み出す (初期化データ)
68 //fullPath = myIntent.getStringExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_FULLPATH);
69 objectHolder.setDataTitle(myIntent.getStringExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_TITLE));
71 // Preferenceに記憶されたデータがあればそれを取得する
72 // SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
76 Log.v(Main.APP_IDENTIFIER, "Exception :" + ex.toString());
81 * がっつりこのクラスにイベントリスナを接続する
84 public void prepareListener()
87 final ImageButton filterButton = (ImageButton) parent.findViewById(R.id.SetFilterButton);
88 filterButton.setOnClickListener(this);
95 public void finishListener()
103 public void prepareToStart()
105 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::prepareToStart() : " + objectHolder.getDataTitle());
108 // (AsyncTaskを使ってデータを読み込む)
109 MeMoMaFileLoadingProcess asyncTask = new MeMoMaFileLoadingProcess(parent, fileUtility, this);
110 asyncTask.execute(objectHolder);
119 private void showDetailData(String first, String second, String third)
121 Log.v(Main.APP_IDENTIFIER, "SELECTED: " + first + " " + second + " " + third);
127 public void shutdown()
138 public void onActivityResult(int requestCode, int resultCode, Intent data)
146 public void onClick(View v)
149 if (id == R.id.SetFilterButton)
159 public boolean onTouch(View v, MotionEvent event)
161 // int id = v.getId();
162 // int action = event.getAction();
172 public Menu onCreateOptionsMenu(Menu menu)
174 MenuItem menuItem = menu.add(Menu.NONE, MENU_ID_SHARE, Menu.NONE, parent.getString(R.string.export_csv));
175 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); /* for Android 3.1 */
176 menuItem.setIcon(android.R.drawable.ic_menu_share);
178 menuItem = menu.add(Menu.NONE, MENU_ID_EXPORT, Menu.NONE, parent.getString(R.string.shareContent));
179 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); /* for Android 3.1 */
180 menuItem.setIcon(android.R.drawable.ic_menu_save);
182 menuItem = menu.add(Menu.NONE, MENU_ID_IMPORT, Menu.NONE, parent.getString(R.string.import_csv));
183 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
184 menuItem.setIcon(android.R.drawable.ic_menu_edit);
194 public void onPrepareOptionsMenu(Menu menu)
196 menu.findItem(MENU_ID_SHARE).setVisible(true);
197 menu.findItem(MENU_ID_EXPORT).setVisible(true);
198 menu.findItem(MENU_ID_IMPORT).setVisible(true);
204 * メニューのアイテムが選択されたときの処理
208 public boolean onOptionsItemSelected(MenuItem item)
210 boolean result = false;
211 switch (item.getItemId())
215 export_as_csv(false);
226 importObjectFromCsv();
241 private void importObjectFromCsv()
244 parent.showDialog(R.id.listdialog);
251 private void export_as_csv(boolean isShare)
253 isShareExportedData = isShare;
255 // AsyncTaskを使ってデータをエクスポートする
256 MeMoMaFileExportCsvProcess asyncTask = new MeMoMaFileExportCsvProcess(parent, fileUtility, this);
257 asyncTask.execute(objectHolder);
264 public Dialog onCreateDialog(int id)
266 if (id == R.id.listdialog)
268 fileSelectionDialog = new FileSelectionDialog(parent, parent.getString(R.string.dialogtitle_selectcsv), fileUtility, ".csv", this);
269 return (fileSelectionDialog.getDialog());
273 if (id == R.id.info_about_gokigen)
275 CreditDialog dialog = new CreditDialog(parent);
276 return (dialog.getDialog());
283 * ファイル選択ダイアログの表示を準備する
286 private void prepareFileSelectionDialog(Dialog dialog)
288 fileSelectionDialog.prepare("", EXTENSION_DIRECTORY);
295 public void onPrepareDialog(int id, Dialog dialog)
297 if (id == R.id.listdialog)
299 // CSVインポートダイアログを準備する
300 prepareFileSelectionDialog(dialog);
306 * ファイルをロードする途中のバックグラウンド処理...
309 public void onLoadingProcess()
315 listItems = new ArrayList<SymbolListArrayItem>();
317 // TODO: 何らかの法則に従って並べ替えをする。
319 Enumeration<Integer> keys = objectHolder.getObjectKeys();
320 while (keys.hasMoreElements())
322 Integer key = keys.nextElement();
323 MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key);
326 int objectStyleIcon = MeMoMaObjectHolder .getObjectDrawStyleIcon(pos.drawStyle);
329 int userCheckedIcon = (pos.userChecked == true) ? R.drawable.btn_checked : R.drawable.btn_notchecked;
331 // TODO: アイテム選択時の情報エリアは(ArrayItem側には)用意しているが未使用。
332 SymbolListArrayItem listItem = new SymbolListArrayItem(userCheckedIcon, pos.label, pos.detail, "", objectStyleIcon);
334 listItems.add(listItem);
336 } catch (Exception ex)
339 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::onLoadingProcess() : " + ex.toString());
347 public void onLoadedResult(String detail)
349 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::onLoadedResult() '" + objectHolder.getDataTitle() +"' : " + detail);
351 // 読み込んだファイル名をタイトルに設定する
352 parent.setTitle(objectHolder.getDataTitle());
358 //String outputMessage = parent.getString(R.string.load_data) + " " + objectHolder.getDataTitle() + " " + detail;
359 //Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
366 public void onExportedResult(String exportedFileName, String detail)
368 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::onExportedResult() '" + objectHolder.getDataTitle() +"' : " + detail);
371 String outputMessage = parent.getString(R.string.export_csv) + " " + objectHolder.getDataTitle() + " " + detail;
372 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
374 if (isShareExportedData == true)
377 shareContent(exportedFileName);
379 isShareExportedData = false;
385 private void updateObjectList()
390 ListView listView = (ListView) parent.findViewById(R.id.ExtensionView);
391 ListAdapter adapter = new SymbolListArrayAdapter(parent, R.layout.listarrayitems, listItems);
392 listView.setAdapter(adapter);
395 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
397 public void onItemClick(AdapterView<?> parentView, View view, int position, long id)
399 ListView listView = (ListView) parentView;
400 SymbolListArrayItem item = (SymbolListArrayItem) listView.getItemAtPosition(position);
402 /// リストが選択されたときの処理...データを開く
403 showDetailData(item.getTextResource1st(), item.getTextResource2nd(), item.getTextResource3rd());
406 System.gc(); // いらない(参照が切れた)クラスを消したい
419 private void shareContent(String fileName)
425 Calendar calendar = Calendar.getInstance();
426 SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
427 String date = outFormat.format(calendar.getTime());
430 String title = parent.getString(R.string.app_name) + " | "+ objectHolder.getDataTitle() + " | " + date;
433 message = message + "Name : " + objectHolder.getDataTitle() + "\n";
434 message = message + "exported : " + date + "\n";
435 message = message + "number of objects : " + objectHolder.getCount() + "\n";
437 // Share Intentを発行する。
438 SharedIntentInvoker.shareContent(parent, MENU_ID_SHARE, title, message, fileName, "text/plain");
450 public void selectedFileName(String fileName)
452 // CSVファイルからオブジェクトをロードするクラスを呼び出す。
453 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::selectedFileName() : " + fileName);
454 MeMoMaFileImportCsvProcess asyncTask = new MeMoMaFileImportCsvProcess(parent, fileUtility, this, fileName);
455 asyncTask.execute(objectHolder);
463 public void onImportedResult(String detail)
465 Log.v(Main.APP_IDENTIFIER, "ExtensionActivityListener::onImportedResult() '" + objectHolder.getDataTitle() +"' : " + detail);
468 String outputMessage = parent.getString(R.string.import_csv) + " " + objectHolder.getDataTitle() + " " + detail;
469 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();