1 package jp.sourceforge.gokigen.memoma.fileio;
3 import java.text.SimpleDateFormat;
4 import java.util.Calendar;
6 import android.support.v7.app.ActionBar;
7 import android.app.Activity;
8 import android.content.SharedPreferences;
9 import android.preference.PreferenceManager;
10 import android.util.Log;
11 import android.widget.Toast;
13 import jp.sourceforge.gokigen.memoma.GokigenSurfaceView;
14 import jp.sourceforge.gokigen.memoma.Main;
15 import jp.sourceforge.gokigen.memoma.MeMoMaListener;
16 import jp.sourceforge.gokigen.memoma.R;
17 import jp.sourceforge.gokigen.memoma.SharedIntentInvoker;
18 import jp.sourceforge.gokigen.memoma.drawers.MeMoMaCanvasDrawer;
19 import jp.sourceforge.gokigen.memoma.holders.MeMoMaDataFileHolder;
20 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
22 public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingStatusHolder, MeMoMaFileSavingProcess.IResultReceiver, MeMoMaFileLoadingProcess.IResultReceiver, ActionBar.OnNavigationListener, ObjectLayoutCaptureExporter.ICaptureLayoutExporter
24 private Activity parent = null;
25 private MeMoMaObjectHolder objectHolder = null;
26 private ExternalStorageFileUtility fileUtility = null;
27 private MeMoMaDataFileHolder dataFileHolder = null;
29 private boolean isSaving = false;
30 private boolean isShareExportedData = false;
36 public MeMoMaDataInOutManager(Activity activity)
39 fileUtility = new ExternalStorageFileUtility(Main.APP_BASEDIR);
46 public void prepare(MeMoMaObjectHolder objectHolder, ActionBar bar, String fileName)
48 this.objectHolder = objectHolder;
49 //this.lineHolder = lineHolder;
52 dataFileHolder = new MeMoMaDataFileHolder(parent, android.R.layout.simple_spinner_dropdown_item, fileUtility, ".xml");
53 int index = dataFileHolder.updateFileList(fileName, null);
58 prepareActionBar(bar);
66 if ((bar != null)&&(index >= 0))
68 bar.setSelectedNavigationItem(index); // 実験...
73 * データファイル一覧を更新し、アクションバーに反映させる
76 public void updateFileList(String titleName, ActionBar bar)
78 if (dataFileHolder != null)
81 int index = dataFileHolder.updateFileList(titleName, null);
83 // タイトルをオブジェクトフォルダに記憶させる
84 objectHolder.setDataTitle(titleName);
87 if ((bar != null)&&(index >= 0))
89 bar.setSelectedNavigationItem(index); // 実験...
95 * データの保存を行う (同名のファイルが存在していた場合、 *.BAKにリネーム(上書き)してから保存する)
98 * @param forceOverwrite trueの時は、ファイル名が確定していたときは(確認せずに)上書き保存を自動で行う。
101 public void saveFile(String dataTitle, boolean forceOverwrite)
103 if (objectHolder == null)
105 Log.e(Main.APP_IDENTIFIER, "ERR>MeMoMaDataInOutManager::saveFile() : " + dataTitle);
109 // タイトルをオブジェクトフォルダに記憶させる
110 objectHolder.setDataTitle(dataTitle);
111 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::saveFile() : " + dataTitle);
114 String message = saveFileSynchronous();
115 onSavedResult(message);
124 public String getDataFileFullPath(String dataTitle, String extension)
126 return (fileUtility.getGokigenDirectory() + "/" + dataTitle + extension);
130 public void setSavingStatus(boolean isSaving)
132 this.isSaving = isSaving;
136 public boolean getSavingStatus()
144 public void onSavedResult(String detail)
147 String outputMessage = parent.getString(R.string.save_data) + " " + objectHolder.getDataTitle() + " " + detail;
148 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
150 // ファイルリスト更新 ... (ここでやっちゃあ、AsyncTaskにしている意味ないなあ...)
151 dataFileHolder.updateFileList(objectHolder.getDataTitle(), null);
157 public void onLoadedResult(String detail)
160 String outputMessage = parent.getString(R.string.load_data) + " " + objectHolder.getDataTitle() + " " + detail;
161 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
164 final GokigenSurfaceView surfaceview = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
165 surfaceview.doDraw();
169 * ファイルをロードする途中のバックグラウンド処理...
172 public void onLoadingProcess()
182 public void loadFile(String dataTitle)
184 loadFileWithName(dataTitle);
193 private void loadFileWithName(String dataTitle)
195 if (objectHolder == null)
197 Log.e(Main.APP_IDENTIFIER, "ERR>MeMoMaDataInOutManager::loadFile() : " + dataTitle);
201 // タイトルをオブジェクトフォルダに記憶させる
202 objectHolder.setDataTitle(dataTitle);
203 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::loadFile() : " + dataTitle);
205 // AsyncTaskを使ってデータを読み込む
206 MeMoMaFileLoadingProcess asyncTask = new MeMoMaFileLoadingProcess(parent, fileUtility, this);
207 asyncTask.execute(objectHolder);
215 private void prepareActionBar(ActionBar bar)
218 bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // リストを入れる
219 bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); // タイトルの表示をマスクする
220 bar.setListNavigationCallbacks(dataFileHolder, this);
233 private String saveFileSynchronous()
236 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
237 String backgroundUri = preferences.getString("backgroundUri","");
238 String userCheckboxString = preferences.getString("userCheckboxString","");
239 MeMoMaFileSavingEngine saveEngine = new MeMoMaFileSavingEngine(fileUtility, backgroundUri, userCheckboxString);
240 String message = saveEngine.saveObjects(objectHolder);
249 public boolean onNavigationItemSelected(int itemPosition, long itemId)
251 String data = dataFileHolder.getItem(itemPosition);
252 Log.v(Main.APP_IDENTIFIER, "onNavigationItemSelected(" + itemPosition + "," + itemId + ") : " + data);
254 // 同期型で現在のファイルを保存する。。。
255 String message = saveFileSynchronous();
256 if (message.length() != 0)
258 onSavedResult(message);
261 // 選択したファイル名をタイトルに反映し、またPreferenceにも記憶する
262 parent.setTitle(data);
263 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
264 SharedPreferences.Editor editor = preferences.edit();
265 editor.putString("MeMoMaInfo", data);
269 loadFileWithName(data);
278 public void doScreenCapture(String title, MeMoMaObjectHolder holder, MeMoMaCanvasDrawer drawer, boolean isShare)
280 isShareExportedData = isShare;
282 // AsyncTaskを使ってデータをエクスポートする
283 ObjectLayoutCaptureExporter asyncTask = new ObjectLayoutCaptureExporter(parent, fileUtility, holder, drawer, this);
284 asyncTask.execute(title);
291 public void onCaptureLayoutExportedResult(String exportedFileName, String detail)
293 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::onCaptureExportedResult() '" + objectHolder.getDataTitle() +"' : " + detail);
296 String outputMessage = parent.getString(R.string.capture_data) + " " + objectHolder.getDataTitle() + " " + detail;
297 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
299 if (isShareExportedData == true)
302 shareContent(exportedFileName);
304 isShareExportedData = false;
312 private void shareContent(String fileName)
318 Calendar calendar = Calendar.getInstance();
319 SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
320 String date = outFormat.format(calendar.getTime());
323 String title = parent.getString(R.string.app_name) + " | "+ objectHolder.getDataTitle() + " | " + date;
326 message = message + "Name : " + objectHolder.getDataTitle() + "\n";
327 message = message + "exported : " + date + "\n";
328 message = message + "number of objects : " + objectHolder.getCount() + "\n";
330 // Share Intentを発行する。
331 SharedIntentInvoker.shareContent(parent, MeMoMaListener.MENU_ID_SHARE, title, message, fileName, "image/png");
335 ex.printStackTrace();