OSDN Git Service

ab87b04e1ed49215639a447f243dadc042f5e95c
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / io / MeMoMaFileSavingProcess.java
1 package jp.sourceforge.gokigen.memoma.io;
2
3 import android.app.ProgressDialog;
4 import android.content.Context;
5 import android.content.SharedPreferences;
6 import android.os.AsyncTask;
7 import android.preference.PreferenceManager;
8 import android.util.Log;
9
10 import jp.sourceforge.gokigen.memoma.Main;
11 import jp.sourceforge.gokigen.memoma.R;
12 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
13
14 /**
15  *  データをファイルに保存するとき用 アクセスラッパ (非同期処理を実行)
16  *  
17  *  AsyncTask
18  *    MeMoMaObjectHolder : 実行時に渡すクラス(Param)
19  *    Integer    : 途中経過を伝えるクラス(Progress)
20  *    String     : 処理結果を伝えるクラス(Result)
21  *    
22  * @author MRSa
23  *
24  */
25 public class MeMoMaFileSavingProcess extends AsyncTask<MeMoMaObjectHolder, Integer, String>
26 {
27         private final String TAG = toString();
28
29         private final Context context;
30         private IResultReceiver receiver = null;
31         //private ExternalStorageFileUtility fileUtility = null;
32         private ISavingStatusHolder statusHolder = null;
33         
34         private String backgroundUri = null;
35         private String userCheckboxString = null;
36         private ProgressDialog savingDialog = null;
37         
38         /**
39          *   コンストラクタ
40          */
41     public MeMoMaFileSavingProcess(Context context, ISavingStatusHolder holder,  IResultReceiver resultReceiver)
42     {
43                 this.context = context;
44         receiver = resultReceiver;
45         statusHolder = holder;
46
47         //  プログレスダイアログ(「保存中...」)を表示する。
48         savingDialog = new ProgressDialog(context);
49         savingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
50         savingDialog.setMessage(context.getString(R.string.dataSaving));
51         savingDialog.setIndeterminate(true);
52         savingDialog.setCancelable(false);
53         savingDialog.show();
54
55         //  設定読み出し用...あらかじめ、UIスレッドで読みだしておく。
56         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
57         backgroundUri = preferences.getString("backgroundUri","");
58         userCheckboxString = preferences.getString("userCheckboxString","");
59                 
60         // 未保管状態にリセットする
61         statusHolder.setSavingStatus(false);
62     }
63         
64     /**
65      *  非同期処理実施前の前処理
66      * 
67      */
68     @Override
69     protected void onPreExecute()
70     {
71         // 未保管状態にリセットする
72         statusHolder.setSavingStatus(false);
73     }
74
75     /**
76      *  非同期処理
77      *  (バックグラウンドで実行する(このメソッドは、UIスレッドと別のところで実行する))
78      * 
79      */
80     @Override
81     protected String doInBackground(MeMoMaObjectHolder... datas)
82     {
83         // 保管中状態を設定する
84         statusHolder.setSavingStatus(true);
85
86         // データの保管メイン
87         MeMoMaFileSavingEngine savingEngine = new MeMoMaFileSavingEngine(context, backgroundUri, userCheckboxString);
88         String result = savingEngine.saveObjects(datas[0]);
89
90         System.gc();
91                 
92         // 未保管状態にリセットする
93         statusHolder.setSavingStatus(false);
94
95                 return (result);
96     }
97
98     /**
99      *  非同期処理の進捗状況の更新
100      * 
101      */
102         @Override
103         protected void onProgressUpdate(Integer... values)
104         {
105         // 今回は何もしない
106         }
107
108     /**
109      *  非同期処理の後処理
110      *  (結果を応答する)
111      */
112     @Override
113     protected void onPostExecute(String result)
114     {
115         try
116         {
117             if (receiver != null)
118             {
119                 receiver.onSavedResult(result);
120             }
121         }
122         catch (Exception ex)
123         {
124                 Log.v(TAG, "MeMoMaFileSavingProcess::onPostExecute() : " + ex.toString());
125         }
126         // プログレスダイアログを消す
127         savingDialog.dismiss();
128
129         // 未保管状態にセットする
130         statusHolder.setSavingStatus(false);
131         return;
132     }     
133     
134     /**
135      *    結果報告用のインタフェース(積極的に使う予定はないけど...)
136      *    
137      * @author MRSa
138      *
139      */
140     public interface IResultReceiver
141     {
142         /**  保存結果の報告 **/
143         public abstract void onSavedResult(String detail);
144     }
145
146     /**
147      *     ファイル保存実施状態を記憶するインタフェースクラス
148      *     
149      * @author MRSa
150      *
151      */
152     public interface ISavingStatusHolder
153     {
154         /**  保存中状態を設定する **/
155         public abstract void setSavingStatus(boolean isSaving);
156         
157         /** 保存中状態を取得する **/
158         public abstract boolean getSavingStatus();
159     }
160
161 }