OSDN Git Service

T28082
[everclip/source.git] / workspace / EverClip / src / com / yuji / ec / utility / AsyncTaskCommand.java
1 package com.yuji.ec.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 public class AsyncTaskCommand extends AsyncTask<String, Integer, String> {\r
13         private WeakReference<Activity> activityRef;\r
14         private AsyncTaskIF command;\r
15         private ProgressDialog dialog;\r
16         private boolean isCancel = false;\r
17         private boolean isDialog = true;\r
18         private int status = -1;\r
19         \r
20         private String title = "";\r
21         private String buttonTitle = "";\r
22         private boolean cancelable = true;\r
23         \r
24         @SuppressWarnings({ "rawtypes", "unchecked" })\r
25         public AsyncTaskCommand(Activity activity, AsyncTaskIF command) {\r
26                 this.activityRef = new WeakReference(activity);\r
27                 this.command = command;\r
28         }\r
29 \r
30         @Override\r
31         protected void onPreExecute() {\r
32                 Debug.d(this, "onPreExecute start");\r
33 \r
34                 Activity activity = activityRef.get();\r
35                 if (activity == null) {\r
36                         return;\r
37                 }\r
38                 if (isDialog) {\r
39                         dialog = new ProgressDialog(activity);\r
40                         dialog.setIndeterminate(true);\r
41                         dialog.setCancelable(cancelable);\r
42                         dialog.setTitle(title);\r
43                         if (cancelable){\r
44                                 dialog.setButton(buttonTitle, new DialogInterface.OnClickListener() {\r
45                                         public void onClick(DialogInterface dialog, int which) {\r
46                                                 dialog.cancel();\r
47                                                 AsyncTaskCommand.this.cancel(true);\r
48                                         }\r
49                                 });\r
50                                 dialog.setOnKeyListener(new OnKeyListener() {\r
51                                         public boolean onKey(DialogInterface dialog, int keyCode,\r
52                                                         KeyEvent event) {\r
53                                                 switch (event.getKeyCode()) {\r
54                                                 case KeyEvent.KEYCODE_SEARCH:\r
55                                                         return true;\r
56                                                 }\r
57                                                 return false;\r
58                                         }\r
59                                 });\r
60                         }\r
61                         dialog.show();\r
62                 }\r
63                 Debug.d(this, "onPreExecute end");\r
64         }\r
65 \r
66         @Override\r
67         protected String doInBackground(String... arg0) {\r
68                 try {\r
69                         Debug.d(this, "doInBackground start");\r
70                         command.doExecute();\r
71                         status = command.getStatus();\r
72                         Debug.d(this, "doInBackground end");\r
73                 } catch (RuntimeException e) {\r
74                         Debug.d(this, null, e);\r
75                         throw e;\r
76                 }\r
77                 return null;\r
78         }\r
79 \r
80         @Override\r
81         protected void onCancelled() {\r
82                 Debug.d(this, "onCancelled start");\r
83 \r
84                 isCancel = true;\r
85 \r
86                 if (command != null) {\r
87                         command.cancel();\r
88                 }\r
89                 onPostExecute(null);\r
90                 Debug.d(this, "onCancelled end");\r
91         }\r
92 \r
93         @Override\r
94         protected void onPostExecute(String result) {\r
95                 Debug.d(this, "onPostExecute start");\r
96 \r
97                 try {\r
98                         if (command != null) {\r
99                                 command.done(isCancel);\r
100                                 command = null;\r
101                         }\r
102                         if (dialog != null) {\r
103                                 try {\r
104                                         dialog.dismiss();\r
105                                 }\r
106                                 catch (IllegalArgumentException e){\r
107                                         ;\r
108                                 }\r
109                                 dialog = null;\r
110                         }\r
111                         activityRef = null;\r
112                 } catch (RuntimeException e) {\r
113                         Debug.d(this, null, e);\r
114                         throw e;\r
115                 }\r
116                 Debug.d(this, "onPostExecute end");\r
117         }\r
118 \r
119         public void stop() {\r
120                 Debug.d(this, "stop start");\r
121 \r
122                 if (command != null) {\r
123                         isCancel = true;\r
124                         command.cancel();\r
125                 }\r
126                 // onPostExecute()\82Ìdialog.dismiss();\82Å\83G\83\89\81[\82Æ\82È\82é\82½\82ß\r
127                 // \96{\8e¿\93I\82È\89ð\8c\88\8dô\82Å\82Í\82È\82¢\r
128                 // dialog = null;\r
129                 if (dialog != null) {\r
130                         dialog.dismiss();\r
131                         dialog = null;\r
132                 }\r
133 \r
134                 Debug.d(this, "stop end");\r
135         }\r
136 \r
137         public void setDialog(boolean b) {\r
138                 isDialog = b;\r
139         }\r
140         \r
141         public int getResultStatus(){\r
142                 return status;\r
143         }\r
144 \r
145         public void setTitle(String title) {\r
146                 this.title = title;\r
147         }\r
148 \r
149         public void setButtonTitle(String buttonTitle) {\r
150                 this.buttonTitle = buttonTitle;\r
151         }\r
152         \r
153         public void setCancelable(boolean cancelable){\r
154                 this.cancelable  = cancelable;\r
155         }\r
156 }\r