root / src / com / rackspacecloud / android / CloudListActivity.java @ 21c57799
History | View | Annotate | Download (5.5 kB)
1 | b722cab3 | Adam Menz | package com.rackspacecloud.android; |
---|---|---|---|
2 | b722cab3 | Adam Menz | |
3 | b722cab3 | Adam Menz | import java.io.IOException; |
4 | b722cab3 | Adam Menz | import java.io.StringReader; |
5 | b722cab3 | Adam Menz | |
6 | b722cab3 | Adam Menz | import javax.xml.parsers.FactoryConfigurationError; |
7 | b722cab3 | Adam Menz | import javax.xml.parsers.ParserConfigurationException; |
8 | b722cab3 | Adam Menz | import javax.xml.parsers.SAXParser; |
9 | b722cab3 | Adam Menz | import javax.xml.parsers.SAXParserFactory; |
10 | b722cab3 | Adam Menz | |
11 | b722cab3 | Adam Menz | import org.apache.http.HttpResponse; |
12 | b722cab3 | Adam Menz | import org.apache.http.client.ClientProtocolException; |
13 | b722cab3 | Adam Menz | import org.apache.http.impl.client.BasicResponseHandler; |
14 | b722cab3 | Adam Menz | import org.xml.sax.InputSource; |
15 | b722cab3 | Adam Menz | import org.xml.sax.SAXException; |
16 | b722cab3 | Adam Menz | import org.xml.sax.XMLReader; |
17 | b722cab3 | Adam Menz | |
18 | b722cab3 | Adam Menz | import com.rackspace.cloud.servers.api.client.CloudServersException; |
19 | b722cab3 | Adam Menz | import com.rackspace.cloud.servers.api.client.http.HttpBundle; |
20 | b722cab3 | Adam Menz | import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser; |
21 | b722cab3 | Adam Menz | |
22 | b722cab3 | Adam Menz | import android.app.AlertDialog; |
23 | b722cab3 | Adam Menz | import android.app.ProgressDialog; |
24 | b722cab3 | Adam Menz | import android.content.Context; |
25 | b722cab3 | Adam Menz | import android.content.DialogInterface; |
26 | b722cab3 | Adam Menz | import android.content.Intent; |
27 | b722cab3 | Adam Menz | import android.content.DialogInterface.OnCancelListener; |
28 | b722cab3 | Adam Menz | import android.os.Bundle; |
29 | 21c57799 | Adam Menz | import android.util.Log; |
30 | b722cab3 | Adam Menz | import android.view.WindowManager; |
31 | b722cab3 | Adam Menz | import android.view.ViewGroup.LayoutParams; |
32 | b722cab3 | Adam Menz | import android.widget.ProgressBar; |
33 | 403bb53b | Adam Menz | import android.widget.Toast; |
34 | b722cab3 | Adam Menz | |
35 | 71e52c4a | Adam Menz | /*
|
36 | 71e52c4a | Adam Menz | * CloudActivity manages the display and hiding of
|
37 | 71e52c4a | Adam Menz | * pDialog.
|
38 | 71e52c4a | Adam Menz | *
|
39 | 71e52c4a | Adam Menz | * Also provides many accessory methods that are common
|
40 | 71e52c4a | Adam Menz | * to Activities
|
41 | 71e52c4a | Adam Menz | */
|
42 | 6b8dad86 | Adam Menz | public class CloudListActivity extends GaListActivity{ |
43 | b722cab3 | Adam Menz | |
44 | b2a2d2f1 | Adam Menz | private Context context; |
45 | b722cab3 | Adam Menz | private boolean isLoading; |
46 | b722cab3 | Adam Menz | private ProgressDialog pDialog;
|
47 | b722cab3 | Adam Menz | |
48 | b722cab3 | Adam Menz | @Override
|
49 | 403bb53b | Adam Menz | protected void onCreate(Bundle savedInstanceState){ |
50 | 403bb53b | Adam Menz | super.onCreate(savedInstanceState);
|
51 | 403bb53b | Adam Menz | |
52 | 403bb53b | Adam Menz | //So keyboard doesn't open till user clicks
|
53 | 403bb53b | Adam Menz | this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
|
54 | 403bb53b | Adam Menz | } |
55 | 403bb53b | Adam Menz | |
56 | 403bb53b | Adam Menz | @Override
|
57 | b722cab3 | Adam Menz | protected void onSaveInstanceState(Bundle outState) { |
58 | b722cab3 | Adam Menz | super.onSaveInstanceState(outState);
|
59 | b722cab3 | Adam Menz | |
60 | b722cab3 | Adam Menz | outState.putBoolean("isLoading", isLoading);
|
61 | b722cab3 | Adam Menz | |
62 | b722cab3 | Adam Menz | if(pDialog != null && pDialog.isShowing()){ |
63 | b722cab3 | Adam Menz | hideDialog(); |
64 | b722cab3 | Adam Menz | } |
65 | b722cab3 | Adam Menz | |
66 | b722cab3 | Adam Menz | } |
67 | b722cab3 | Adam Menz | |
68 | b722cab3 | Adam Menz | protected void restoreState(Bundle state) { |
69 | b722cab3 | Adam Menz | context = getApplicationContext(); |
70 | b722cab3 | Adam Menz | |
71 | b722cab3 | Adam Menz | /*
|
72 | b722cab3 | Adam Menz | * need to restore the pDialog is was shown before
|
73 | b722cab3 | Adam Menz | * a config change
|
74 | b722cab3 | Adam Menz | */
|
75 | b722cab3 | Adam Menz | if (state != null && state.containsKey("isLoading")){ |
76 | b722cab3 | Adam Menz | isLoading = state.getBoolean("isLoading");
|
77 | b722cab3 | Adam Menz | if(isLoading){
|
78 | b722cab3 | Adam Menz | showDialog(); |
79 | b722cab3 | Adam Menz | } |
80 | b722cab3 | Adam Menz | } |
81 | b722cab3 | Adam Menz | |
82 | b722cab3 | Adam Menz | } |
83 | b722cab3 | Adam Menz | |
84 | 71e52c4a | Adam Menz | @Override
|
85 | 71e52c4a | Adam Menz | protected void onStart(){ |
86 | 71e52c4a | Adam Menz | super.onStart();
|
87 | 71e52c4a | Adam Menz | if(isLoading){
|
88 | 71e52c4a | Adam Menz | showDialog(); |
89 | 71e52c4a | Adam Menz | } |
90 | 71e52c4a | Adam Menz | } |
91 | 71e52c4a | Adam Menz | |
92 | 71e52c4a | Adam Menz | @Override
|
93 | 71e52c4a | Adam Menz | protected void onStop(){ |
94 | 71e52c4a | Adam Menz | super.onStop();
|
95 | 71e52c4a | Adam Menz | if(isLoading){
|
96 | 71e52c4a | Adam Menz | hideDialog(); |
97 | 71e52c4a | Adam Menz | isLoading = true;
|
98 | 71e52c4a | Adam Menz | } |
99 | 71e52c4a | Adam Menz | } |
100 | 71e52c4a | Adam Menz | |
101 | b722cab3 | Adam Menz | protected final void showAlert(String title, String message) { |
102 | b722cab3 | Adam Menz | try {
|
103 | b722cab3 | Adam Menz | AlertDialog alert = new AlertDialog.Builder(this).create(); |
104 | b722cab3 | Adam Menz | alert.setTitle(title); |
105 | b722cab3 | Adam Menz | alert.setMessage(message); |
106 | b722cab3 | Adam Menz | alert.setButton("OK", new DialogInterface.OnClickListener() { |
107 | b722cab3 | Adam Menz | public void onClick(DialogInterface dialog, int which) { |
108 | b722cab3 | Adam Menz | return;
|
109 | b722cab3 | Adam Menz | } |
110 | b722cab3 | Adam Menz | }); |
111 | b722cab3 | Adam Menz | alert.show(); |
112 | b722cab3 | Adam Menz | } catch (Exception e) { |
113 | b722cab3 | Adam Menz | e.printStackTrace(); |
114 | b722cab3 | Adam Menz | } |
115 | b722cab3 | Adam Menz | } |
116 | b722cab3 | Adam Menz | |
117 | b722cab3 | Adam Menz | protected final void showError(String message, HttpBundle bundle){ |
118 | b722cab3 | Adam Menz | Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
|
119 | b722cab3 | Adam Menz | viewIntent.putExtra("errorMessage", message);
|
120 | b722cab3 | Adam Menz | viewIntent.putExtra("response", bundle.getResponseText());
|
121 | b722cab3 | Adam Menz | viewIntent.putExtra("request", bundle.getCurlRequest());
|
122 | b722cab3 | Adam Menz | startActivity(viewIntent); |
123 | b722cab3 | Adam Menz | } |
124 | 403bb53b | Adam Menz | |
125 | 403bb53b | Adam Menz | protected void showToast(String message) { |
126 | 403bb53b | Adam Menz | Context context = getApplicationContext();
|
127 | 403bb53b | Adam Menz | int duration = Toast.LENGTH_SHORT;
|
128 | 403bb53b | Adam Menz | Toast toast = Toast.makeText(context, message, duration); |
129 | 403bb53b | Adam Menz | toast.show(); |
130 | 403bb53b | Adam Menz | } |
131 | b722cab3 | Adam Menz | |
132 | b722cab3 | Adam Menz | protected final CloudServersException parseCloudServersException(HttpResponse response) { |
133 | b722cab3 | Adam Menz | CloudServersException cse = new CloudServersException();
|
134 | b722cab3 | Adam Menz | try {
|
135 | b722cab3 | Adam Menz | BasicResponseHandler responseHandler = new BasicResponseHandler();
|
136 | b722cab3 | Adam Menz | String body = responseHandler.handleResponse(response);
|
137 | b722cab3 | Adam Menz | CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
|
138 | b722cab3 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
139 | b722cab3 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
140 | b722cab3 | Adam Menz | xmlReader.setContentHandler(parser); |
141 | b722cab3 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
142 | b722cab3 | Adam Menz | cse = parser.getException(); |
143 | b722cab3 | Adam Menz | } catch (ClientProtocolException e) {
|
144 | b722cab3 | Adam Menz | cse = new CloudServersException();
|
145 | b722cab3 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
146 | b722cab3 | Adam Menz | } catch (IOException e) { |
147 | b722cab3 | Adam Menz | cse = new CloudServersException();
|
148 | b722cab3 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
149 | b722cab3 | Adam Menz | } catch (ParserConfigurationException e) { |
150 | b722cab3 | Adam Menz | cse = new CloudServersException();
|
151 | b722cab3 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
152 | b722cab3 | Adam Menz | } catch (SAXException e) {
|
153 | b722cab3 | Adam Menz | cse = new CloudServersException();
|
154 | b722cab3 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
155 | b722cab3 | Adam Menz | } catch (FactoryConfigurationError e) { |
156 | b722cab3 | Adam Menz | cse = new CloudServersException();
|
157 | b722cab3 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
158 | b722cab3 | Adam Menz | } |
159 | b722cab3 | Adam Menz | return cse;
|
160 | b722cab3 | Adam Menz | } |
161 | b722cab3 | Adam Menz | |
162 | b722cab3 | Adam Menz | protected final void hideDialog() { |
163 | b722cab3 | Adam Menz | if(pDialog != null){ |
164 | 21c57799 | Adam Menz | Log.d("info", "dialog hide"); |
165 | b722cab3 | Adam Menz | isLoading = false;
|
166 | b722cab3 | Adam Menz | pDialog.dismiss(); |
167 | b722cab3 | Adam Menz | } |
168 | b722cab3 | Adam Menz | } |
169 | b722cab3 | Adam Menz | |
170 | b722cab3 | Adam Menz | protected final void showDialog() { |
171 | b722cab3 | Adam Menz | if(pDialog == null || !pDialog.isShowing()){ |
172 | 21c57799 | Adam Menz | Log.d("info", "dialog created"); |
173 | b722cab3 | Adam Menz | isLoading = true;
|
174 | 54986b23 | Adam Menz | pDialog = new ProgressDialog(this); |
175 | b2a2d2f1 | Adam Menz | pDialog.setProgressStyle(R.style.NewDialog); |
176 | b2a2d2f1 | Adam Menz | |
177 | b722cab3 | Adam Menz | /*
|
178 | b722cab3 | Adam Menz | * if back is pressed while dialog is showing it will
|
179 | b722cab3 | Adam Menz | * still finish the activity
|
180 | b722cab3 | Adam Menz | */
|
181 | b722cab3 | Adam Menz | pDialog.setOnCancelListener(new OnCancelListener() {
|
182 | b722cab3 | Adam Menz | @Override
|
183 | b722cab3 | Adam Menz | public void onCancel(DialogInterface dialog) { |
184 | b722cab3 | Adam Menz | finish(); |
185 | b722cab3 | Adam Menz | } |
186 | b722cab3 | Adam Menz | }); |
187 | b722cab3 | Adam Menz | pDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); |
188 | b722cab3 | Adam Menz | pDialog.show(); |
189 | b722cab3 | Adam Menz | pDialog.setContentView(new ProgressBar(this), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); |
190 | b722cab3 | Adam Menz | } |
191 | b722cab3 | Adam Menz | } |
192 | b722cab3 | Adam Menz | |
193 | b722cab3 | Adam Menz | protected Context getContext(){ |
194 | b722cab3 | Adam Menz | return context;
|
195 | b722cab3 | Adam Menz | } |
196 | b722cab3 | Adam Menz | } |