1 package jp.sourceforge.gokigen.memoma;
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 public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingStatusHolder, MeMoMaFileSavingProcess.IResultReceiver, MeMoMaFileLoadingProcess.IResultReceiver, ActionBar.OnNavigationListener, ObjectLayoutCaptureExporter.ICaptureLayoutExporter
15 private Activity parent = null;
16 private MeMoMaObjectHolder objectHolder = null;
17 private ExternalStorageFileUtility fileUtility = null;
18 private MeMoMaDataFileHolder dataFileHolder = null;
20 private boolean isSaving = false;
21 private boolean isShareExportedData = false;
27 public MeMoMaDataInOutManager(Activity activity)
30 fileUtility = new ExternalStorageFileUtility(Main.APP_BASEDIR);
37 public void prepare(MeMoMaObjectHolder objectHolder, ActionBar bar, String fileName)
39 this.objectHolder = objectHolder;
40 //this.lineHolder = lineHolder;
43 dataFileHolder = new MeMoMaDataFileHolder(parent, android.R.layout.simple_spinner_dropdown_item, fileUtility, ".xml");
44 int index = dataFileHolder.updateFileList(fileName, null);
49 prepareActionBar(bar);
57 if ((bar != null)&&(index >= 0))
59 bar.setSelectedNavigationItem(index); // 実験...
64 * データファイル一覧を更新し、アクションバーに反映させる
67 public void updateFileList(String titleName, ActionBar bar)
69 if (dataFileHolder != null)
72 int index = dataFileHolder.updateFileList(titleName, null);
74 // タイトルをオブジェクトフォルダに記憶させる
75 objectHolder.setDataTitle(titleName);
78 if ((bar != null)&&(index >= 0))
80 bar.setSelectedNavigationItem(index); // 実験...
86 * データの保存を行う (同名のファイルが存在していた場合、 *.BAKにリネーム(上書き)してから保存する)
89 * @param forceOverwrite trueの時は、ファイル名が確定していたときは(確認せずに)上書き保存を自動で行う。
92 public void saveFile(String dataTitle, boolean forceOverwrite)
94 if (objectHolder == null)
96 Log.e(Main.APP_IDENTIFIER, "ERR>MeMoMaDataInOutManager::saveFile() : " + dataTitle);
100 // タイトルをオブジェクトフォルダに記憶させる
101 objectHolder.setDataTitle(dataTitle);
102 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::saveFile() : " + dataTitle);
105 String message = saveFileSynchronous();
106 onSavedResult(message);
115 public String getDataFileFullPath(String dataTitle, String extension)
117 return (fileUtility.getGokigenDirectory() + "/" + dataTitle + extension);
121 public void setSavingStatus(boolean isSaving)
123 this.isSaving = isSaving;
127 public boolean getSavingStatus()
135 public void onSavedResult(String detail)
138 String outputMessage = parent.getString(R.string.save_data) + " " + objectHolder.getDataTitle() + " " + detail;
139 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
141 // ファイルリスト更新 ... (ここでやっちゃあ、AsyncTaskにしている意味ないなあ...)
142 dataFileHolder.updateFileList(objectHolder.getDataTitle(), null);
148 public void onLoadedResult(String detail)
151 String outputMessage = parent.getString(R.string.load_data) + " " + objectHolder.getDataTitle() + " " + detail;
152 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
155 final GokigenSurfaceView surfaceview = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
156 surfaceview.doDraw();
160 * ファイルをロードする途中のバックグラウンド処理...
163 public void onLoadingProcess()
173 public void loadFile(String dataTitle)
175 loadFileWithName(dataTitle);
184 private void loadFileWithName(String dataTitle)
186 if (objectHolder == null)
188 Log.e(Main.APP_IDENTIFIER, "ERR>MeMoMaDataInOutManager::loadFile() : " + dataTitle);
192 // タイトルをオブジェクトフォルダに記憶させる
193 objectHolder.setDataTitle(dataTitle);
194 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::loadFile() : " + dataTitle);
196 // AsyncTaskを使ってデータを読み込む
197 MeMoMaFileLoadingProcess asyncTask = new MeMoMaFileLoadingProcess(parent, fileUtility, this);
198 asyncTask.execute(objectHolder);
206 private void prepareActionBar(ActionBar bar)
209 bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // リストを入れる
210 bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); // タイトルの表示をマスクする
211 bar.setListNavigationCallbacks(dataFileHolder, this);
224 private String saveFileSynchronous()
227 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
228 String backgroundUri = preferences.getString("backgroundUri","");
229 String userCheckboxString = preferences.getString("userCheckboxString","");
230 MeMoMaFileSavingEngine saveEngine = new MeMoMaFileSavingEngine(fileUtility, backgroundUri, userCheckboxString);
231 String message = saveEngine.saveObjects(objectHolder);
240 public boolean onNavigationItemSelected(int itemPosition, long itemId)
242 String data = dataFileHolder.getItem(itemPosition);
243 Log.v(Main.APP_IDENTIFIER, "onNavigationItemSelected(" + itemPosition + "," + itemId + ") : " + data);
245 // 同期型で現在のファイルを保存する。。。
246 String message = saveFileSynchronous();
247 if (message.length() != 0)
249 onSavedResult(message);
252 // 選択したファイル名をタイトルに反映し、またPreferenceにも記憶する
253 parent.setTitle(data);
254 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
255 SharedPreferences.Editor editor = preferences.edit();
256 editor.putString("MeMoMaInfo", data);
260 loadFileWithName(data);
269 public void doScreenCapture(String title, MeMoMaObjectHolder holder, MeMoMaCanvasDrawer drawer, boolean isShare)
271 isShareExportedData = isShare;
273 // AsyncTaskを使ってデータをエクスポートする
274 ObjectLayoutCaptureExporter asyncTask = new ObjectLayoutCaptureExporter(parent, fileUtility, holder, drawer, this);
275 asyncTask.execute(title);
282 public void onCaptureLayoutExportedResult(String exportedFileName, String detail)
284 Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::onCaptureExportedResult() '" + objectHolder.getDataTitle() +"' : " + detail);
287 String outputMessage = parent.getString(R.string.capture_data) + " " + objectHolder.getDataTitle() + " " + detail;
288 Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show();
290 if (isShareExportedData == true)
293 shareContent(exportedFileName);
295 isShareExportedData = false;
303 private void shareContent(String fileName)
309 Calendar calendar = Calendar.getInstance();
310 SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
311 String date = outFormat.format(calendar.getTime());
314 String title = parent.getString(R.string.app_name) + " | "+ objectHolder.getDataTitle() + " | " + date;
317 message = message + "Name : " + objectHolder.getDataTitle() + "\n";
318 message = message + "exported : " + date + "\n";
319 message = message + "number of objects : " + objectHolder.getCount() + "\n";
321 // Share Intentを発行する。
322 SharedIntentInvoker.shareContent(parent, MeMoMaListener.MENU_ID_SHARE, title, message, fileName, "image/png");
326 ex.printStackTrace();