OSDN Git Service

1e7981705745edc12833a5b8fd245c5bbbb84fd0
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / ObjectAligner.java
1 package jp.sourceforge.gokigen.memoma;
2
3
4 import java.util.Enumeration;
5
6 import android.app.ProgressDialog;
7 import android.content.Context;
8 import android.os.AsyncTask;
9 import android.util.Log;
10
11 /**
12  *  オブジェクトの位置を整列するクラス (非同期処理を実行)
13  *  
14  *  AsyncTask
15  *    MeMoMaObjectHolder : 実行時に渡すクラス(Param)
16  *    Integer    : 途中経過を伝えるクラス(Progress)
17  *    String     : 処理結果を伝えるクラス(Result)
18  *    
19  * @author MRSa
20  *
21  */
22 public class ObjectAligner extends AsyncTask<MeMoMaObjectHolder, Integer, String>
23 {
24         ProgressDialog executingDialog = null;
25         IAlignCallback  receiver = null;
26         /**
27          *   コンストラクタ
28          */
29     public ObjectAligner(Context context, IAlignCallback client)
30     {
31         receiver = client;
32         
33         //  プログレスダイアログ(「保存中...」)を表示する。
34         executingDialog = new ProgressDialog(context);
35         executingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
36         executingDialog.setMessage(context.getString(R.string.dataAligning));
37         executingDialog.setIndeterminate(true);
38         executingDialog.setCancelable(false);
39         executingDialog.show();
40     }
41         
42     /**
43      *  非同期処理実施前の前処理
44      * 
45      */
46     @Override
47     protected void onPreExecute()
48     {
49         
50     }
51
52     /**
53      *  非同期処理
54      *  (バックグラウンドで実行する(このメソッドは、UIスレッドと別のところで実行する))
55      * 
56      */
57     @Override
58     protected String doInBackground(MeMoMaObjectHolder... datas)
59     {
60         MeMoMaObjectHolder objectHolder = datas[0];
61
62         // オブジェクトの出力 (保持しているものはすべて表示する)
63         Enumeration<Integer> keys = objectHolder.getObjectKeys();
64         while (keys.hasMoreElements())
65         {
66             Integer key = keys.nextElement();
67             MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key);
68             
69             float newLeft = (float) Math.floor((pos.rect.left + 15.0f)/ 30.0) * 30.0f;
70             float newTop = (float) Math.floor((pos.rect.top + 15.0f)/ 30.0) * 30.0f;
71             pos.rect.offsetTo(newLeft, newTop);
72         }
73         System.gc();
74                 
75                 return ("");
76     }
77
78     /**
79      *  非同期処理の進捗状況の更新
80      * 
81      */
82         @Override
83         protected void onProgressUpdate(Integer... values)
84         {
85         // 今回は何もしない
86         }
87
88     /**
89      *  非同期処理の後処理
90      *  (結果を応答する)
91      */
92     @Override
93     protected void onPostExecute(String result)
94     {
95         try
96         {
97                 if (receiver != null)
98                 {
99                         // 並べ変えたことを通知する
100                         receiver.objectAligned();
101                 }
102         }
103         catch (Exception ex)
104         {
105                 Log.v(Main.APP_IDENTIFIER, "ObjectAligner::onPostExecute() : " + ex.toString());
106         }
107
108         // プログレスダイアログを消す
109         executingDialog.dismiss();
110         return;
111     }     
112     
113     /**
114      *    並べ変えたことを通知する
115      * 
116      * @author MRSa
117      *
118      */
119     public interface IAlignCallback
120     {
121         public abstract void objectAligned();
122     }
123 }