OSDN Git Service

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