OSDN Git Service

UTF-8
[jugglemaster/source.git] / workspace / JuggleMaster / src / com / jm / utility / AsyncTaskCommand.java
1 package com.jm.utility;\r
2 \r
3 import java.lang.ref.WeakReference;\r
4 \r
5 import android.app.Activity;\r
6 import android.app.ProgressDialog;\r
7 import android.content.DialogInterface;\r
8 import android.content.DialogInterface.OnKeyListener;\r
9 import android.os.AsyncTask;\r
10 import android.view.KeyEvent;\r
11 \r
12 import com.jm.R;\r
13 \r
14 public class AsyncTaskCommand extends AsyncTask<String, Integer, String> {\r
15         private WeakReference<Activity> activityRef;\r
16         private AsyncTaskIF command;\r
17         private ProgressDialog dialog;\r
18         private boolean isCancel = false;\r
19         \r
20         @SuppressWarnings({ "rawtypes", "unchecked" })\r
21         public AsyncTaskCommand(Activity activity, AsyncTaskIF command){\r
22                 this.activityRef = new WeakReference(activity);\r
23                 this.command = command;\r
24         }\r
25 \r
26         @Override\r
27         protected void onPreExecute(){\r
28                 Debug.d(this, "onPreExecute start");\r
29                 \r
30                 Activity activity = activityRef.get();\r
31                 if (activity == null){\r
32                         return;\r
33                 }\r
34                 dialog = new ProgressDialog(activity);\r
35                 dialog.setIndeterminate(true);\r
36                 dialog.setCancelable(false);\r
37                 dialog.setTitle(activity.getString(R.string.calculating));\r
38                 dialog.setButton(activity.getString(R.string.cancel), new DialogInterface.OnClickListener() {\r
39                         @Override\r
40                         public void onClick(DialogInterface dialog, int which) {\r
41                                 dialog.cancel();\r
42                                 AsyncTaskCommand.this.cancel(true);\r
43                         }\r
44                 });\r
45                 dialog.setOnKeyListener(new OnKeyListener() {\r
46                         @Override\r
47                         public boolean onKey(DialogInterface dialog, int keyCode,\r
48                                         KeyEvent event) {\r
49                                 switch (event.getKeyCode()) {\r
50                                 case KeyEvent.KEYCODE_SEARCH:\r
51                                         return true;\r
52                                 }\r
53                                 return false;\r
54                         }\r
55                 });\r
56                 dialog.show();\r
57                 Debug.d(this, "onPreExecute end");\r
58         }\r
59         \r
60         @Override\r
61         protected String doInBackground(String... arg0) {\r
62                 Debug.d(this, "doInBackground start");\r
63                 command.doExecute();\r
64                 Debug.d(this, "doInBackground end");\r
65                 \r
66                 return null;\r
67         }\r
68         \r
69         @Override\r
70         protected void onCancelled(){\r
71                 Debug.d(this, "onCancelled start");\r
72                 \r
73                 isCancel = true;\r
74                 \r
75                 if (command != null){\r
76                         command.cancel();\r
77                 }               \r
78                 onPostExecute(null);\r
79                 Debug.d(this, "onCancelled end");\r
80         }\r
81 \r
82         @Override\r
83         protected void onPostExecute(String result){\r
84                 Debug.d(this, "onPostExecute start");\r
85 \r
86                 try {\r
87                         if (command != null){\r
88                                 command.done(isCancel);\r
89                                 command = null;                         \r
90                         }\r
91                         if (dialog != null){\r
92                                 dialog.dismiss();\r
93                                 dialog = null;\r
94                         }\r
95                         activityRef = null;\r
96                 }\r
97                 catch (RuntimeException e){\r
98                         Debug.d(this, null, e);\r
99                         throw e;\r
100                 }\r
101                 Debug.d(this, "onPostExecute end");\r
102         }\r
103         \r
104         public void stop(){\r
105                 Debug.d(this, "stop start");\r
106                 \r
107                 if (command != null){\r
108                         isCancel = true;\r
109                         command.cancel();\r
110                 }\r
111                 // onPostExecute()のdialog.dismiss();でエラーとなるため\r
112                 // 本質的な解決策ではない\r
113 //              dialog = null;\r
114                 if (dialog != null){\r
115                         dialog.dismiss();\r
116                         dialog = null;\r
117                 }\r
118 \r
119                 Debug.d(this, "stop end");\r
120         }\r
121 }\r