OSDN Git Service

パッケージの整理を開始。文字フォントを塗りつぶすように変更すうr。
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / fileio / MeMoMaFileSavingProcess.java
1 package jp.sourceforge.gokigen.memoma.fileio;
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 IResultReceiver receiver = null;
28         private ExternalStorageFileUtility fileUtility = null;
29         private ISavingStatusHolder statusHolder = null;
30         
31         private String backgroundUri = null;
32         private String userCheckboxString = null;
33         private ProgressDialog savingDialog = null;
34         
35         /**
36          *   コンストラクタ
37          */
38     public MeMoMaFileSavingProcess(Context context, ISavingStatusHolder holder, ExternalStorageFileUtility utility,  IResultReceiver resultReceiver)
39     {
40         receiver = resultReceiver;
41         fileUtility = utility;
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      */
77     @Override
78     protected String doInBackground(MeMoMaObjectHolder... datas)
79     {
80         // 保管中状態を設定する
81         statusHolder.setSavingStatus(true);
82
83         // データの保管メイン
84         MeMoMaFileSavingEngine savingEngine = new MeMoMaFileSavingEngine(fileUtility, backgroundUri, userCheckboxString);
85         String result = savingEngine.saveObjects(datas[0]);
86
87         System.gc();
88                 
89         // 未保管状態にリセットする
90         statusHolder.setSavingStatus(false);
91
92                 return (result);
93     }
94
95     /**
96      *  非同期処理の進捗状況の更新
97      * 
98      */
99         @Override
100         protected void onProgressUpdate(Integer... values)
101         {
102         // 今回は何もしない
103         }
104
105     /**
106      *  非同期処理の後処理
107      *  (結果を応答する)
108      */
109     @Override
110     protected void onPostExecute(String result)
111     {
112         try
113         {
114             if (receiver != null)
115             {
116                 receiver.onSavedResult(result);
117             }
118         }
119         catch (Exception ex)
120         {
121                 Log.v(Main.APP_IDENTIFIER, "MeMoMaFileSavingProcess::onPostExecute() : " + ex.toString());
122         }
123         // プログレスダイアログを消す
124         savingDialog.dismiss();
125
126         // 未保管状態にセットする
127         statusHolder.setSavingStatus(false);
128         return;
129     }     
130     
131     /**
132      *    結果報告用のインタフェース(積極的に使う予定はないけど...)
133      *    
134      * @author MRSa
135      *
136      */
137     public interface IResultReceiver
138     {
139         /**  保存結果の報告 **/
140         public abstract void onSavedResult(String detail);
141     }
142
143     /**
144      *     ファイル保存実施状態を記憶するインタフェースクラス
145      *     
146      * @author MRSa
147      *
148      */
149     public interface ISavingStatusHolder
150     {
151         /**  保存中状態を設定する **/
152         public abstract void setSavingStatus(boolean isSaving);
153         
154         /** 保存中状態を取得する **/
155         public abstract boolean getSavingStatus();
156     }
157
158 }