root / src / com / rackspacecloud / android / RackspaceCloudActivity.java @ 008df6cf
History | View | Annotate | Download (8.6 kB)
1 | 35e7942d | Michael Mayo | package com.rackspacecloud.android; |
---|---|---|---|
2 | 35e7942d | Michael Mayo | |
3 | d8f3bb33 | Michael Mayo | import java.util.ArrayList; |
4 | d8f3bb33 | Michael Mayo | import java.util.TreeMap; |
5 | d8f3bb33 | Michael Mayo | |
6 | 35e7942d | Michael Mayo | import android.app.Activity; |
7 | 35e7942d | Michael Mayo | import android.app.AlertDialog; |
8 | 2aaecc36 | Chmouel Boudjnah | import android.app.Dialog; |
9 | 35e7942d | Michael Mayo | import android.content.Context; |
10 | 35e7942d | Michael Mayo | import android.content.DialogInterface; |
11 | 35e7942d | Michael Mayo | import android.content.Intent; |
12 | 35e7942d | Michael Mayo | import android.content.SharedPreferences; |
13 | 35e7942d | Michael Mayo | import android.content.SharedPreferences.Editor; |
14 | 35e7942d | Michael Mayo | import android.os.AsyncTask; |
15 | 35e7942d | Michael Mayo | import android.os.Bundle; |
16 | 2aaecc36 | Chmouel Boudjnah | import android.util.Log; |
17 | 35e7942d | Michael Mayo | import android.view.KeyEvent; |
18 | 2aaecc36 | Chmouel Boudjnah | import android.view.Menu; |
19 | 2aaecc36 | Chmouel Boudjnah | import android.view.MenuItem; |
20 | 35e7942d | Michael Mayo | import android.view.View; |
21 | 35e7942d | Michael Mayo | import android.widget.Button; |
22 | 35e7942d | Michael Mayo | import android.widget.EditText; |
23 | 35e7942d | Michael Mayo | import android.widget.ProgressBar; |
24 | 35e7942d | Michael Mayo | import android.widget.TextView; |
25 | 35e7942d | Michael Mayo | import android.widget.TextView.OnEditorActionListener; |
26 | 35e7942d | Michael Mayo | |
27 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.Account; |
28 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.Flavor; |
29 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.FlavorManager; |
30 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.Image; |
31 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.ImageManager; |
32 | 3e6fd0e9 | Michael Mayo | import com.rackspace.cloud.servers.api.client.http.Authentication; |
33 | 3e6fd0e9 | Michael Mayo | |
34 | 35e7942d | Michael Mayo | public class RackspaceCloudActivity extends Activity implements View.OnClickListener, OnEditorActionListener { |
35 | 35e7942d | Michael Mayo | |
36 | 35e7942d | Michael Mayo | private static final String OPT_USERNAME = "username"; |
37 | 35e7942d | Michael Mayo | private static final String OPT_USERNAME_DEF = ""; |
38 | 35e7942d | Michael Mayo | private static final String OPT_API_KEY = "apiKey"; |
39 | 35e7942d | Michael Mayo | private static final String OPT_API_KEY_DEF = ""; |
40 | 2aaecc36 | Chmouel Boudjnah | |
41 | 2aaecc36 | Chmouel Boudjnah | private static final int SHOW_PREFERENCES = 1; |
42 | 2aaecc36 | Chmouel Boudjnah | |
43 | 35e7942d | Michael Mayo | private Intent tabViewIntent;
|
44 | 2d3dd41d | Michael Mayo | private boolean authenticating; |
45 | e7274b25 | Michael Mayo | |
46 | 35e7942d | Michael Mayo | /** Called when the activity is first created. */
|
47 | 35e7942d | Michael Mayo | @Override
|
48 | 35e7942d | Michael Mayo | public void onCreate(Bundle savedInstanceState) { |
49 | 35e7942d | Michael Mayo | super.onCreate(savedInstanceState);
|
50 | 35e7942d | Michael Mayo | setContentView(R.layout.main); |
51 | 35e7942d | Michael Mayo | ((Button) findViewById(R.id.button)).setOnClickListener(this); |
52 | 35e7942d | Michael Mayo | ((EditText) findViewById(R.id.login_apikey)).setOnEditorActionListener(this);
|
53 | 35e7942d | Michael Mayo | loadLoginPreferences(); |
54 | 2d3dd41d | Michael Mayo | restoreState(savedInstanceState); |
55 | 3e6fd0e9 | Michael Mayo | |
56 | 3e6fd0e9 | Michael Mayo | // use the TabViewActivity when Cloud Files is added
|
57 | 3e6fd0e9 | Michael Mayo | // tabViewIntent = new Intent(this, TabViewActivity.class);
|
58 | 3e6fd0e9 | Michael Mayo | |
59 | 3d6041e8 | Phillip Toohill | tabViewIntent = new Intent(this, TabViewActivity.class); |
60 | 35e7942d | Michael Mayo | } |
61 | 35e7942d | Michael Mayo | |
62 | 2d3dd41d | Michael Mayo | @Override
|
63 | 2d3dd41d | Michael Mayo | protected void onSaveInstanceState(Bundle outState) { |
64 | 2d3dd41d | Michael Mayo | super.onSaveInstanceState(outState);
|
65 | 2d3dd41d | Michael Mayo | outState.putBoolean("authenticating", authenticating);
|
66 | 2d3dd41d | Michael Mayo | } |
67 | 2d3dd41d | Michael Mayo | |
68 | 2aaecc36 | Chmouel Boudjnah | public boolean onCreateOptionsMenu(Menu menu) { |
69 | 2aaecc36 | Chmouel Boudjnah | menu.add(0, SHOW_PREFERENCES, 0, "Preferences"); |
70 | 2aaecc36 | Chmouel Boudjnah | return true; |
71 | 2aaecc36 | Chmouel Boudjnah | } |
72 | 2aaecc36 | Chmouel Boudjnah | |
73 | 2aaecc36 | Chmouel Boudjnah | public boolean onOptionsItemSelected(MenuItem item) { |
74 | 2aaecc36 | Chmouel Boudjnah | |
75 | 2aaecc36 | Chmouel Boudjnah | switch (item.getItemId()) {
|
76 | 2aaecc36 | Chmouel Boudjnah | case SHOW_PREFERENCES:
|
77 | 2aaecc36 | Chmouel Boudjnah | showPreferences(); |
78 | 2aaecc36 | Chmouel Boudjnah | break;
|
79 | 2aaecc36 | Chmouel Boudjnah | } |
80 | 2aaecc36 | Chmouel Boudjnah | return true; |
81 | 2aaecc36 | Chmouel Boudjnah | } |
82 | 2aaecc36 | Chmouel Boudjnah | |
83 | 2aaecc36 | Chmouel Boudjnah | public void showPreferences() { |
84 | 2aaecc36 | Chmouel Boudjnah | Intent settingsActivity = new Intent(getBaseContext(),
|
85 | 2aaecc36 | Chmouel Boudjnah | Preferences.class);
|
86 | 2aaecc36 | Chmouel Boudjnah | startActivity(settingsActivity); |
87 | 2aaecc36 | Chmouel Boudjnah | } |
88 | 2aaecc36 | Chmouel Boudjnah | |
89 | 2d3dd41d | Michael Mayo | private void restoreState(Bundle state) { |
90 | 2d3dd41d | Michael Mayo | if (state != null && state.containsKey("authenticating") && state.getBoolean("authenticating")) { |
91 | 2d3dd41d | Michael Mayo | showActivityIndicators(); |
92 | 2d3dd41d | Michael Mayo | } else {
|
93 | 2d3dd41d | Michael Mayo | hideActivityIndicators(); |
94 | 2d3dd41d | Michael Mayo | } |
95 | 2d3dd41d | Michael Mayo | } |
96 | 2d3dd41d | Michael Mayo | |
97 | 35e7942d | Michael Mayo | public void login() { |
98 | 35e7942d | Michael Mayo | if (hasValidInput()) {
|
99 | 35e7942d | Michael Mayo | showActivityIndicators(); |
100 | 35e7942d | Michael Mayo | setLoginPreferences(); |
101 | 35e7942d | Michael Mayo | new AuthenticateTask().execute((Void[]) null); |
102 | 35e7942d | Michael Mayo | } else {
|
103 | 35e7942d | Michael Mayo | showAlert("Fields Missing", "User Name and API Key are required."); |
104 | 35e7942d | Michael Mayo | } |
105 | 35e7942d | Michael Mayo | } |
106 | 35e7942d | Michael Mayo | |
107 | 35e7942d | Michael Mayo | public void onClick(View view) { |
108 | 35e7942d | Michael Mayo | login(); |
109 | 35e7942d | Michael Mayo | } |
110 | 35e7942d | Michael Mayo | |
111 | 35e7942d | Michael Mayo | public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { |
112 | 35e7942d | Michael Mayo | login(); |
113 | 35e7942d | Michael Mayo | return false; |
114 | 35e7942d | Michael Mayo | } |
115 | 35e7942d | Michael Mayo | |
116 | 35e7942d | Michael Mayo | private void loadLoginPreferences() { |
117 | 35e7942d | Michael Mayo | SharedPreferences sp = this.getPreferences(Context.MODE_PRIVATE); |
118 | 35e7942d | Michael Mayo | String username = sp.getString(OPT_USERNAME, OPT_USERNAME_DEF);
|
119 | 35e7942d | Michael Mayo | String apiKey = sp.getString(OPT_API_KEY, OPT_API_KEY_DEF);
|
120 | 35e7942d | Michael Mayo | EditText usernameText = (EditText) findViewById(R.id.login_username); |
121 | 35e7942d | Michael Mayo | usernameText.setText(username); |
122 | 35e7942d | Michael Mayo | EditText apiKeyText = (EditText) findViewById(R.id.login_apikey); |
123 | 35e7942d | Michael Mayo | apiKeyText.setText(apiKey); |
124 | 35e7942d | Michael Mayo | } |
125 | 35e7942d | Michael Mayo | |
126 | 35e7942d | Michael Mayo | private void setLoginPreferences() { |
127 | 2aaecc36 | Chmouel Boudjnah | SharedPreferences prefs = getSharedPreferences( |
128 | 2aaecc36 | Chmouel Boudjnah | Preferences.SHARED_PREFERENCES_NAME,
|
129 | 2aaecc36 | Chmouel Boudjnah | Context.MODE_PRIVATE);
|
130 | 2aaecc36 | Chmouel Boudjnah | String resultType = prefs.getString(
|
131 | 2aaecc36 | Chmouel Boudjnah | Preferences.PREF_KEY_RESULTS_TYPE,
|
132 | 2aaecc36 | Chmouel Boudjnah | String.valueOf(Preferences.COUNTRY_US)); |
133 | 2aaecc36 | Chmouel Boudjnah | int resultTypeInt = Integer.parseInt(resultType); |
134 | 2aaecc36 | Chmouel Boudjnah | |
135 | 008df6cf | Chmouel Boudjnah | |
136 | 2aaecc36 | Chmouel Boudjnah | //Default Auth Server
|
137 | 2aaecc36 | Chmouel Boudjnah | String authServer = Preferences.COUNTRY_US_AUTH_SERVER; |
138 | 2aaecc36 | Chmouel Boudjnah | if (resultTypeInt == Preferences.COUNTRY_UK) |
139 | 2aaecc36 | Chmouel Boudjnah | authServer = Preferences.COUNTRY_UK_AUTH_SERVER;
|
140 | 2aaecc36 | Chmouel Boudjnah | |
141 | 008df6cf | Chmouel Boudjnah | String customAuthServer = prefs.getString(Preferences.PREF_KEY_AUTH_SERVER, "http://"); |
142 | 008df6cf | Chmouel Boudjnah | if (!customAuthServer.equals("http://")) |
143 | 008df6cf | Chmouel Boudjnah | authServer = customAuthServer; |
144 | 008df6cf | Chmouel Boudjnah | |
145 | 008df6cf | Chmouel Boudjnah | Log.d("RackSpace-Cloud", "Using AuthServer: " + authServer); |
146 | 008df6cf | Chmouel Boudjnah | |
147 | 35e7942d | Michael Mayo | String username = ((EditText) findViewById(R.id.login_username)).getText().toString();
|
148 | 35e7942d | Michael Mayo | String apiKey = ((EditText) findViewById(R.id.login_apikey)).getText().toString();
|
149 | 35e7942d | Michael Mayo | Account.setUsername(username); |
150 | 35e7942d | Michael Mayo | Account.setApiKey(apiKey); |
151 | 2aaecc36 | Chmouel Boudjnah | Account.setAuthServer(authServer); |
152 | 2aaecc36 | Chmouel Boudjnah | |
153 | 35e7942d | Michael Mayo | Editor e = this.getPreferences(Context.MODE_PRIVATE).edit(); |
154 | 35e7942d | Michael Mayo | e.putString(OPT_USERNAME, username); |
155 | 35e7942d | Michael Mayo | e.putString(OPT_API_KEY, apiKey); |
156 | 35e7942d | Michael Mayo | e.commit(); |
157 | 35e7942d | Michael Mayo | } |
158 | 35e7942d | Michael Mayo | |
159 | 35e7942d | Michael Mayo | private void showAlert(String title, String message) { |
160 | 35e7942d | Michael Mayo | AlertDialog alert = new AlertDialog.Builder(this).create(); |
161 | 35e7942d | Michael Mayo | alert.setTitle(title); |
162 | 35e7942d | Michael Mayo | alert.setMessage(message); |
163 | 35e7942d | Michael Mayo | alert.setButton("OK", new DialogInterface.OnClickListener() { |
164 | 35e7942d | Michael Mayo | public void onClick(DialogInterface dialog, int which) { |
165 | 35e7942d | Michael Mayo | return;
|
166 | 35e7942d | Michael Mayo | } }); |
167 | 35e7942d | Michael Mayo | alert.show(); |
168 | 3e6fd0e9 | Michael Mayo | hideActivityIndicators(); |
169 | 35e7942d | Michael Mayo | } |
170 | 35e7942d | Michael Mayo | |
171 | 35e7942d | Michael Mayo | private boolean hasValidInput() { |
172 | 35e7942d | Michael Mayo | String username = ((EditText) findViewById(R.id.login_username)).getText().toString();
|
173 | 35e7942d | Michael Mayo | String apiKey = ((EditText) findViewById(R.id.login_apikey)).getText().toString();
|
174 | 35e7942d | Michael Mayo | return !"".equals(username) && !"".equals(apiKey); |
175 | 35e7942d | Michael Mayo | } |
176 | 35e7942d | Michael Mayo | |
177 | 35e7942d | Michael Mayo | private void setActivityIndicatorsVisibility(int visibility) { |
178 | 35e7942d | Michael Mayo | ProgressBar pb = (ProgressBar) findViewById(R.id.login_progress_bar); |
179 | 35e7942d | Michael Mayo | TextView tv = (TextView) findViewById(R.id.login_authenticating_label); |
180 | 35e7942d | Michael Mayo | pb.setVisibility(visibility); |
181 | 35e7942d | Michael Mayo | tv.setVisibility(visibility); |
182 | 35e7942d | Michael Mayo | } |
183 | 35e7942d | Michael Mayo | |
184 | 35e7942d | Michael Mayo | private void showActivityIndicators() { |
185 | 35e7942d | Michael Mayo | setActivityIndicatorsVisibility(View.VISIBLE);
|
186 | 35e7942d | Michael Mayo | } |
187 | 35e7942d | Michael Mayo | |
188 | 35e7942d | Michael Mayo | private void hideActivityIndicators() { |
189 | 35e7942d | Michael Mayo | setActivityIndicatorsVisibility(View.INVISIBLE);
|
190 | 35e7942d | Michael Mayo | } |
191 | 35e7942d | Michael Mayo | |
192 | 35e7942d | Michael Mayo | private class AuthenticateTask extends AsyncTask<Void, Void, Boolean> { |
193 | 35e7942d | Michael Mayo | |
194 | 35e7942d | Michael Mayo | @Override
|
195 | 35e7942d | Michael Mayo | protected Boolean doInBackground(Void... arg0) { |
196 | 2d3dd41d | Michael Mayo | authenticating = true;
|
197 | 35e7942d | Michael Mayo | return new Boolean(Authentication.authenticate()); |
198 | 35e7942d | Michael Mayo | } |
199 | 35e7942d | Michael Mayo | |
200 | 35e7942d | Michael Mayo | @Override
|
201 | 35e7942d | Michael Mayo | protected void onPostExecute(Boolean result) { |
202 | 2d3dd41d | Michael Mayo | authenticating = false;
|
203 | 35e7942d | Michael Mayo | if (result.booleanValue()) {
|
204 | d8f3bb33 | Michael Mayo | //startActivity(tabViewIntent);
|
205 | d8f3bb33 | Michael Mayo | new LoadImagesTask().execute((Void[]) null); |
206 | 35e7942d | Michael Mayo | } else {
|
207 | 35e7942d | Michael Mayo | showAlert("Login Failure", "Authentication failed. Please check your User Name and API Key."); |
208 | 35e7942d | Michael Mayo | } |
209 | d8f3bb33 | Michael Mayo | } |
210 | d8f3bb33 | Michael Mayo | } |
211 | d8f3bb33 | Michael Mayo | |
212 | d8f3bb33 | Michael Mayo | private class LoadFlavorsTask extends AsyncTask<Void, Void, ArrayList<Flavor>> { |
213 | d8f3bb33 | Michael Mayo | |
214 | d8f3bb33 | Michael Mayo | @Override
|
215 | d8f3bb33 | Michael Mayo | protected ArrayList<Flavor> doInBackground(Void... arg0) { |
216 | d8f3bb33 | Michael Mayo | return (new FlavorManager()).createList(true); |
217 | d8f3bb33 | Michael Mayo | } |
218 | d8f3bb33 | Michael Mayo | |
219 | d8f3bb33 | Michael Mayo | @Override
|
220 | d8f3bb33 | Michael Mayo | protected void onPostExecute(ArrayList<Flavor> result) { |
221 | d8f3bb33 | Michael Mayo | if (result != null && result.size() > 0) { |
222 | d8f3bb33 | Michael Mayo | TreeMap<String, Flavor> flavorMap = new TreeMap<String, Flavor>(); |
223 | d8f3bb33 | Michael Mayo | for (int i = 0; i < result.size(); i++) { |
224 | d8f3bb33 | Michael Mayo | Flavor flavor = result.get(i); |
225 | d8f3bb33 | Michael Mayo | flavorMap.put(flavor.getId(), flavor); |
226 | d8f3bb33 | Michael Mayo | } |
227 | d8f3bb33 | Michael Mayo | Flavor.setFlavors(flavorMap); |
228 | d8f3bb33 | Michael Mayo | startActivity(tabViewIntent); |
229 | d8f3bb33 | Michael Mayo | } else {
|
230 | d8f3bb33 | Michael Mayo | showAlert("Login Failure", "There was a problem loading server flavors. Please try again."); |
231 | d8f3bb33 | Michael Mayo | } |
232 | 35e7942d | Michael Mayo | hideActivityIndicators(); |
233 | 35e7942d | Michael Mayo | } |
234 | 35e7942d | Michael Mayo | } |
235 | 35e7942d | Michael Mayo | |
236 | d8f3bb33 | Michael Mayo | private class LoadImagesTask extends AsyncTask<Void, Void, ArrayList<Image>> { |
237 | d8f3bb33 | Michael Mayo | |
238 | d8f3bb33 | Michael Mayo | @Override
|
239 | d8f3bb33 | Michael Mayo | protected ArrayList<Image> doInBackground(Void... arg0) { |
240 | d8f3bb33 | Michael Mayo | return (new ImageManager()).createList(true); |
241 | d8f3bb33 | Michael Mayo | } |
242 | d8f3bb33 | Michael Mayo | |
243 | d8f3bb33 | Michael Mayo | @Override
|
244 | d8f3bb33 | Michael Mayo | protected void onPostExecute(ArrayList<Image> result) { |
245 | d8f3bb33 | Michael Mayo | if (result != null && result.size() > 0) { |
246 | d8f3bb33 | Michael Mayo | TreeMap<String, Image> imageMap = new TreeMap<String, Image>(); |
247 | d8f3bb33 | Michael Mayo | for (int i = 0; i < result.size(); i++) { |
248 | d8f3bb33 | Michael Mayo | Image image = result.get(i);
|
249 | d8f3bb33 | Michael Mayo | imageMap.put(image.getId(), image); |
250 | d8f3bb33 | Michael Mayo | } |
251 | d8f3bb33 | Michael Mayo | Image.setImages(imageMap);
|
252 | d8f3bb33 | Michael Mayo | new LoadFlavorsTask().execute((Void[]) null); |
253 | d8f3bb33 | Michael Mayo | //startActivity(tabViewIntent);
|
254 | d8f3bb33 | Michael Mayo | } else {
|
255 | d8f3bb33 | Michael Mayo | showAlert("Login Failure", "There was a problem loading server images. Please try again."); |
256 | d8f3bb33 | Michael Mayo | } |
257 | d8f3bb33 | Michael Mayo | //hideActivityIndicators();
|
258 | d8f3bb33 | Michael Mayo | } |
259 | d8f3bb33 | Michael Mayo | } |
260 | d8f3bb33 | Michael Mayo | |
261 | 35e7942d | Michael Mayo | } |