Statistics
| Branch: | Revision:

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
}