Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ListAccountsActivity.java @ c476482b

History | View | Annotate | Download (14.6 kB)

1 441d5327 Adam Menz
package com.rackspacecloud.android;
2 441d5327 Adam Menz
3 441d5327 Adam Menz
import java.io.FileInputStream;
4 441d5327 Adam Menz
import java.io.FileNotFoundException;
5 441d5327 Adam Menz
import java.io.FileOutputStream;
6 441d5327 Adam Menz
import java.io.IOException;
7 441d5327 Adam Menz
import java.io.ObjectInputStream;
8 441d5327 Adam Menz
import java.io.ObjectOutputStream;
9 441d5327 Adam Menz
import java.io.StreamCorruptedException;
10 441d5327 Adam Menz
import java.util.ArrayList;
11 441d5327 Adam Menz
import java.util.TreeMap;
12 441d5327 Adam Menz
13 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Account;
14 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Flavor;
15 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.FlavorManager;
16 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Image;
17 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.ImageManager;
18 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.http.Authentication;
19 441d5327 Adam Menz
20 441d5327 Adam Menz
import android.app.AlertDialog;
21 0ae79b26 Adam Menz
import android.app.Dialog;
22 f2020b69 Adam Menz
import android.app.ProgressDialog;
23 441d5327 Adam Menz
import android.content.Context;
24 441d5327 Adam Menz
import android.content.DialogInterface;
25 441d5327 Adam Menz
import android.content.Intent;
26 441d5327 Adam Menz
import android.os.AsyncTask;
27 441d5327 Adam Menz
import android.os.Bundle;
28 3e180b04 Adam Menz
import android.util.Log;
29 fea03400 Adam Menz
import android.view.ContextMenu;
30 fea03400 Adam Menz
import android.view.ContextMenu.ContextMenuInfo;
31 441d5327 Adam Menz
import android.view.LayoutInflater;
32 441d5327 Adam Menz
import android.view.Menu;
33 441d5327 Adam Menz
import android.view.MenuInflater;
34 441d5327 Adam Menz
import android.view.MenuItem;
35 441d5327 Adam Menz
import android.view.View;
36 0ae79b26 Adam Menz
import android.view.View.OnClickListener;
37 441d5327 Adam Menz
import android.view.ViewGroup;
38 fea03400 Adam Menz
import android.widget.AdapterView.AdapterContextMenuInfo;
39 441d5327 Adam Menz
import android.widget.ArrayAdapter;
40 0ae79b26 Adam Menz
import android.widget.Button;
41 0ae79b26 Adam Menz
import android.widget.EditText;
42 441d5327 Adam Menz
import android.widget.ImageView;
43 441d5327 Adam Menz
import android.widget.ListView;
44 441d5327 Adam Menz
import android.widget.TextView;
45 0ae79b26 Adam Menz
import android.widget.Toast;
46 441d5327 Adam Menz
47 0edf6b39 Adam Menz
public class ListAccountsActivity extends GaListActivity{
48 441d5327 Adam Menz
49 006434d8 Adam Menz
        private final int PASSWORD_PROMPT = 123;
50 730daee8 Adam Menz
        private final String FILENAME = "accounts.data";
51 0edf6b39 Adam Menz
        private static final String PAGE_ROOT = "/Root";
52 0edf6b39 Adam Menz
53 441d5327 Adam Menz
        private boolean authenticating;
54 006434d8 Adam Menz
        private ArrayList<Account> accounts;
55 006434d8 Adam Menz
        private Intent tabViewIntent;
56 e7534f91 Adam Menz
        private ProgressDialog dialog;
57 e7534f91 Adam Menz
        private Context context;
58 006434d8 Adam Menz
        //need to store if the user has successfully logged in
59 006434d8 Adam Menz
        private boolean loggedIn;
60 f00e3176 Adam Menz
61 441d5327 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
62 0edf6b39 Adam Menz
                super.onCreate(savedInstanceState);
63 0edf6b39 Adam Menz
                trackPageView(PAGE_ROOT);
64 0edf6b39 Adam Menz
                onRestoreInstanceState(savedInstanceState);
65 0edf6b39 Adam Menz
                registerForContextMenu(getListView());
66 0edf6b39 Adam Menz
                context = getApplicationContext();
67 0edf6b39 Adam Menz
                tabViewIntent = new Intent(this, TabViewActivity.class);
68 0edf6b39 Adam Menz
                verifyPassword();
69 0edf6b39 Adam Menz
        }
70 e7534f91 Adam Menz
71 441d5327 Adam Menz
        @Override
72 441d5327 Adam Menz
        protected void onSaveInstanceState(Bundle outState) {
73 441d5327 Adam Menz
                super.onSaveInstanceState(outState);
74 441d5327 Adam Menz
                outState.putBoolean("authenticating", authenticating);
75 006434d8 Adam Menz
                outState.putBoolean("loggedIn", loggedIn);
76 0edf6b39 Adam Menz
77 e7534f91 Adam Menz
                //need to set authenticating back to true because it is set to false
78 e7534f91 Adam Menz
                //in hideDialog()
79 e7534f91 Adam Menz
                if(authenticating){
80 e7534f91 Adam Menz
                        hideDialog();
81 e7534f91 Adam Menz
                        authenticating = true;
82 e7534f91 Adam Menz
                }
83 441d5327 Adam Menz
                writeAccounts();
84 441d5327 Adam Menz
        }
85 0edf6b39 Adam Menz
86 e7534f91 Adam Menz
        @Override
87 0edf6b39 Adam Menz
        protected void onRestoreInstanceState(Bundle state) {                
88 006434d8 Adam Menz
                if (state != null && state.containsKey("loggedIn")){
89 006434d8 Adam Menz
                        loggedIn = state.getBoolean("loggedIn");
90 006434d8 Adam Menz
                }
91 006434d8 Adam Menz
                else{
92 006434d8 Adam Menz
                        loggedIn = false;
93 006434d8 Adam Menz
                }
94 441d5327 Adam Menz
                if (state != null && state.containsKey("authenticating") && state.getBoolean("authenticating")) {
95 3e180b04 Adam Menz
                        Log.d("info", "captin on restore show");
96 0edf6b39 Adam Menz
                        showDialog();
97 0edf6b39 Adam Menz
                } else {
98 0edf6b39 Adam Menz
                        hideDialog();
99 0edf6b39 Adam Menz
                }
100 441d5327 Adam Menz
                if (state != null && state.containsKey("accounts")) {
101 0edf6b39 Adam Menz
                        accounts = readAccounts();
102 0edf6b39 Adam Menz
                        if (accounts.size() == 0) {
103 0edf6b39 Adam Menz
                                displayNoAccountsCell();
104 0edf6b39 Adam Menz
                        } else {
105 0edf6b39 Adam Menz
                                getListView().setDividerHeight(1); // restore divider lines 
106 0edf6b39 Adam Menz
                                setListAdapter(new AccountAdapter());
107 0edf6b39 Adam Menz
                        }
108 0edf6b39 Adam Menz
                } else {
109 0edf6b39 Adam Menz
                        loadAccounts();        
110 0edf6b39 Adam Menz
                }         
111 0edf6b39 Adam Menz
        }
112 3e180b04 Adam Menz
113 e7534f91 Adam Menz
        @Override
114 e7534f91 Adam Menz
        protected void onStart(){
115 e7534f91 Adam Menz
                super.onStart();
116 e7534f91 Adam Menz
                if(authenticating){
117 e7534f91 Adam Menz
                        showDialog();
118 e7534f91 Adam Menz
                }
119 e7534f91 Adam Menz
        }
120 0edf6b39 Adam Menz
121 e7534f91 Adam Menz
        @Override
122 e7534f91 Adam Menz
        protected void onStop(){
123 e7534f91 Adam Menz
                super.onStop();
124 e7534f91 Adam Menz
                if(authenticating){
125 3e180b04 Adam Menz
                        Log.d("info", "captin onstop called");
126 e7534f91 Adam Menz
                        hideDialog();
127 e7534f91 Adam Menz
                        authenticating = true;
128 e7534f91 Adam Menz
                }
129 e7534f91 Adam Menz
        }
130 0edf6b39 Adam Menz
131 f00e3176 Adam Menz
132 0ae79b26 Adam Menz
        /*
133 0ae79b26 Adam Menz
         * if the application is password protected,
134 0ae79b26 Adam Menz
         * the user must provide the password before
135 0ae79b26 Adam Menz
         * gaining access
136 0ae79b26 Adam Menz
         */
137 0ae79b26 Adam Menz
        private void verifyPassword(){
138 0ae79b26 Adam Menz
                PasswordManager pwManager = new PasswordManager(getSharedPreferences(
139 0ae79b26 Adam Menz
                                Preferences.SHARED_PREFERENCES_NAME, MODE_PRIVATE));
140 006434d8 Adam Menz
                if(pwManager.hasPassword() && !loggedIn){
141 0ae79b26 Adam Menz
                        createCustomDialog(PASSWORD_PROMPT);
142 0ae79b26 Adam Menz
                }
143 0ae79b26 Adam Menz
        }
144 0edf6b39 Adam Menz
145 0ae79b26 Adam Menz
        private boolean rightPassword(String password){
146 0ae79b26 Adam Menz
                PasswordManager pwManager = new PasswordManager(getSharedPreferences(
147 0ae79b26 Adam Menz
                                Preferences.SHARED_PREFERENCES_NAME, MODE_PRIVATE));
148 0ae79b26 Adam Menz
                return pwManager.verifyEnteredPassword(password);
149 0ae79b26 Adam Menz
        }
150 0edf6b39 Adam Menz
151 0edf6b39 Adam Menz
152 0ae79b26 Adam Menz
        /*
153 0ae79b26 Adam Menz
         * forces the user to enter a correct password
154 0ae79b26 Adam Menz
         * before they gain access to application data
155 0ae79b26 Adam Menz
         */
156 0ae79b26 Adam Menz
        private void createCustomDialog(int id) {
157 0ae79b26 Adam Menz
                final Dialog dialog = new Dialog(ListAccountsActivity.this);
158 0ae79b26 Adam Menz
                switch (id) {
159 0ae79b26 Adam Menz
                case PASSWORD_PROMPT:
160 0ae79b26 Adam Menz
                        dialog.setContentView(R.layout.passworddialog);
161 0ae79b26 Adam Menz
                        dialog.setTitle("Enter your password:");
162 0ae79b26 Adam Menz
                        dialog.setCancelable(false);
163 0ae79b26 Adam Menz
                        Button button = (Button) dialog.findViewById(R.id.submit_password);
164 0ae79b26 Adam Menz
                        button.setOnClickListener(new OnClickListener() {
165 0ae79b26 Adam Menz
                                public void onClick(View v){
166 0ae79b26 Adam Menz
                                        EditText passwordText = ((EditText)dialog.findViewById(R.id.submit_password_text));
167 0ae79b26 Adam Menz
                                        if(!rightPassword(passwordText.getText().toString())){
168 0ae79b26 Adam Menz
                                                passwordText.setText("");
169 0ae79b26 Adam Menz
                                                showToast("Password was incorrect.");
170 006434d8 Adam Menz
                                                loggedIn = false;
171 0ae79b26 Adam Menz
                                        }
172 0ae79b26 Adam Menz
                                        else{
173 0ae79b26 Adam Menz
                                                dialog.dismiss();
174 006434d8 Adam Menz
                                                loggedIn = true;
175 0ae79b26 Adam Menz
                                        }
176 0ae79b26 Adam Menz
                                }
177 0edf6b39 Adam Menz
178 0ae79b26 Adam Menz
                        });
179 0ae79b26 Adam Menz
                        dialog.show();
180 0ae79b26 Adam Menz
                }
181 0ae79b26 Adam Menz
        }
182 0edf6b39 Adam Menz
183 441d5327 Adam Menz
        private void loadAccounts() {
184 fea03400 Adam Menz
                //check and see if there are any in memory
185 441d5327 Adam Menz
                if(accounts == null){
186 441d5327 Adam Menz
                        accounts = readAccounts();
187 441d5327 Adam Menz
                }
188 441d5327 Adam Menz
                //if nothing was written before accounts will still be null
189 441d5327 Adam Menz
                if(accounts == null){
190 441d5327 Adam Menz
                        accounts = new ArrayList<Account>();
191 441d5327 Adam Menz
                }
192 fea03400 Adam Menz
193 441d5327 Adam Menz
                setAccountList();
194 441d5327 Adam Menz
        }
195 441d5327 Adam Menz
196 441d5327 Adam Menz
        private void setAccountList() {
197 0edf6b39 Adam Menz
198 441d5327 Adam Menz
                if (accounts.size() == 0) {
199 441d5327 Adam Menz
                        displayNoAccountsCell();
200 441d5327 Adam Menz
                } else {
201 441d5327 Adam Menz
                        getListView().setDividerHeight(1); // restore divider lines 
202 441d5327 Adam Menz
                        this.setListAdapter(new AccountAdapter());
203 441d5327 Adam Menz
                }
204 441d5327 Adam Menz
        }
205 441d5327 Adam Menz
206 441d5327 Adam Menz
        private void writeAccounts(){
207 441d5327 Adam Menz
                FileOutputStream fos;
208 730daee8 Adam Menz
                ObjectOutputStream out = null;
209 441d5327 Adam Menz
                try{
210 441d5327 Adam Menz
                        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
211 441d5327 Adam Menz
                        out = new ObjectOutputStream(fos);
212 441d5327 Adam Menz
                        out.writeObject(accounts);
213 441d5327 Adam Menz
                        out.flush();
214 441d5327 Adam Menz
                        out.close();
215 441d5327 Adam Menz
                } catch (FileNotFoundException e) {
216 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not save accounts.");
217 441d5327 Adam Menz
                        e.printStackTrace();
218 441d5327 Adam Menz
                } catch (IOException e) {
219 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not save accounts.");
220 441d5327 Adam Menz
                        e.printStackTrace();
221 441d5327 Adam Menz
                }
222 441d5327 Adam Menz
        }
223 441d5327 Adam Menz
224 441d5327 Adam Menz
        private ArrayList<Account> readAccounts(){
225 441d5327 Adam Menz
                FileInputStream fis;
226 441d5327 Adam Menz
                ObjectInputStream in;
227 441d5327 Adam Menz
                try {
228 441d5327 Adam Menz
                        fis = openFileInput(FILENAME);
229 441d5327 Adam Menz
                        in = new ObjectInputStream(fis);
230 bf03b262 Adam Menz
                        @SuppressWarnings("unchecked")
231 441d5327 Adam Menz
                        ArrayList<Account> file = (ArrayList<Account>)in.readObject();
232 441d5327 Adam Menz
                        in.close();
233 441d5327 Adam Menz
                        return file;
234 441d5327 Adam Menz
                } catch (FileNotFoundException e) {
235 d88d3ae1 Adam Menz
                        //showAlert("Error", "Could not load accounts.");
236 441d5327 Adam Menz
                        e.printStackTrace();
237 441d5327 Adam Menz
                        return null;
238 441d5327 Adam Menz
                } catch (StreamCorruptedException e) {
239 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
240 441d5327 Adam Menz
                        e.printStackTrace();
241 441d5327 Adam Menz
                } catch (IOException e) {
242 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
243 441d5327 Adam Menz
                        e.printStackTrace();
244 441d5327 Adam Menz
                } catch (ClassNotFoundException e) {
245 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
246 441d5327 Adam Menz
                        e.printStackTrace();
247 441d5327 Adam Menz
                }
248 441d5327 Adam Menz
                return null;
249 0edf6b39 Adam Menz
250 441d5327 Adam Menz
        }
251 441d5327 Adam Menz
252 441d5327 Adam Menz
        private void displayNoAccountsCell() {
253 0edf6b39 Adam Menz
                String a[] = new String[1];
254 0edf6b39 Adam Menz
                a[0] = "No Accounts";
255 0edf6b39 Adam Menz
                setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.noaccountscell, R.id.no_accounts_label, a));
256 0edf6b39 Adam Menz
                getListView().setTextFilterEnabled(true);
257 0edf6b39 Adam Menz
                getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
258 0edf6b39 Adam Menz
                getListView().setItemsCanFocus(false);
259 0edf6b39 Adam Menz
        }
260 0edf6b39 Adam Menz
261 441d5327 Adam Menz
        protected void onListItemClick(ListView l, View v, int position, long id) {
262 730daee8 Adam Menz
                if (accounts != null && accounts.size() > 0) {
263 e7534f91 Adam Menz
                        //setActivityIndicatorsVisibility(View.VISIBLE, v);
264 730daee8 Adam Menz
                        Account.setAccount(accounts.get(position));
265 730daee8 Adam Menz
                        login();
266 730daee8 Adam Menz
                }                
267 0edf6b39 Adam Menz
        }
268 0edf6b39 Adam Menz
269 441d5327 Adam Menz
        public void login() {
270 0edf6b39 Adam Menz
                //showActivityIndicators();
271 0edf6b39 Adam Menz
                //setLoginPreferences();
272 0edf6b39 Adam Menz
                new AuthenticateTask().execute((Void[]) null);
273 0edf6b39 Adam Menz
        }
274 0edf6b39 Adam Menz
275 fea03400 Adam Menz
        //setup menu for when menu button is pressed
276 441d5327 Adam Menz
        public boolean onCreateOptionsMenu(Menu menu) {
277 441d5327 Adam Menz
                super.onCreateOptionsMenu(menu);
278 441d5327 Adam Menz
                MenuInflater inflater = getMenuInflater();
279 441d5327 Adam Menz
                inflater.inflate(R.menu.accounts_list_menu, menu);
280 441d5327 Adam Menz
                return true;
281 441d5327 Adam Menz
        } 
282 0edf6b39 Adam Menz
283 0edf6b39 Adam Menz
        @Override 
284 0edf6b39 Adam Menz
        //in options menu, when add account is selected go to add account activity
285 0edf6b39 Adam Menz
        public boolean onOptionsItemSelected(MenuItem item) {
286 0edf6b39 Adam Menz
                switch (item.getItemId()) {
287 0edf6b39 Adam Menz
                case R.id.add_account:
288 0edf6b39 Adam Menz
                        startActivityForResult(new Intent(this, AddAccountActivity.class), 78); // arbitrary number; never used again
289 0edf6b39 Adam Menz
                        return true;
290 0edf6b39 Adam Menz
291 0edf6b39 Adam Menz
                case R.id.contact_rackspace:
292 0edf6b39 Adam Menz
                        startActivity(new Intent(this, ContactActivity.class));
293 0edf6b39 Adam Menz
                        return true;
294 0edf6b39 Adam Menz
295 0edf6b39 Adam Menz
                case R.id.add_password:
296 0edf6b39 Adam Menz
                        startActivity(new Intent(this, CreatePasswordActivity.class));
297 0edf6b39 Adam Menz
                        return true;
298 0edf6b39 Adam Menz
                }        
299 0edf6b39 Adam Menz
                return false;
300 0edf6b39 Adam Menz
        } 
301 0edf6b39 Adam Menz
302 0edf6b39 Adam Menz
        //the context menu for a long press on an account
303 fea03400 Adam Menz
        public void onCreateContextMenu(ContextMenu menu, View v,
304 fea03400 Adam Menz
                        ContextMenuInfo menuInfo) {
305 fea03400 Adam Menz
                super.onCreateContextMenu(menu, v, menuInfo);
306 fea03400 Adam Menz
                MenuInflater inflater = getMenuInflater();
307 fea03400 Adam Menz
                inflater.inflate(R.menu.account_context_menu, menu);
308 fea03400 Adam Menz
        }
309 fea03400 Adam Menz
310 fea03400 Adam Menz
        //removes the selected account from account list if remove is clicked
311 fea03400 Adam Menz
        public boolean onContextItemSelected(MenuItem item) {
312 fea03400 Adam Menz
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
313 fea03400 Adam Menz
                accounts.remove(info.position);
314 fea03400 Adam Menz
                writeAccounts();
315 fea03400 Adam Menz
                loadAccounts();
316 fea03400 Adam Menz
                return true;
317 fea03400 Adam Menz
        }
318 fea03400 Adam Menz
319 441d5327 Adam Menz
        class AccountAdapter extends ArrayAdapter<Account> {
320 441d5327 Adam Menz
321 441d5327 Adam Menz
                AccountAdapter() {
322 441d5327 Adam Menz
                        super(ListAccountsActivity.this, R.layout.listaccountcell, accounts);
323 441d5327 Adam Menz
                }
324 0edf6b39 Adam Menz
325 441d5327 Adam Menz
                public View getView(int position, View convertView, ViewGroup parent) {
326 0edf6b39 Adam Menz
327 441d5327 Adam Menz
                        LayoutInflater inflater = getLayoutInflater();
328 441d5327 Adam Menz
                        View row = inflater.inflate(R.layout.listaccountcell, parent, false);
329 441d5327 Adam Menz
330 441d5327 Adam Menz
                        TextView label = (TextView) row.findViewById(R.id.label);
331 441d5327 Adam Menz
                        label.setText(accounts.get(position).getUsername());
332 0edf6b39 Adam Menz
333 441d5327 Adam Menz
                        TextView sublabel = (TextView) row.findViewById(R.id.sublabel);
334 441d5327 Adam Menz
                        sublabel.setText(getAccountServer(accounts.get(position)));
335 0edf6b39 Adam Menz
336 441d5327 Adam Menz
                        ImageView icon = (ImageView) row.findViewById(R.id.account_type_icon);
337 d88d3ae1 Adam Menz
                        icon.setImageResource(setAccountIcon(accounts.get(position)));
338 0edf6b39 Adam Menz
339 441d5327 Adam Menz
                        return row;
340 441d5327 Adam Menz
                }
341 441d5327 Adam Menz
        }
342 0edf6b39 Adam Menz
343 441d5327 Adam Menz
        public String getAccountServer(Account account){
344 441d5327 Adam Menz
                String authServer = account.getAuthServer();
345 d88d3ae1 Adam Menz
                String result;
346 d88d3ae1 Adam Menz
                if(authServer.equals(Preferences.COUNTRY_UK_AUTH_SERVER)){
347 d88d3ae1 Adam Menz
                        result = "Rackspace Cloud (UK)";
348 d88d3ae1 Adam Menz
                }
349 d88d3ae1 Adam Menz
                else if(authServer.equals(Preferences.COUNTRY_US_AUTH_SERVER)){
350 d88d3ae1 Adam Menz
                        result = "Rackspace Cloud (US)";
351 441d5327 Adam Menz
                }
352 441d5327 Adam Menz
                else{
353 d88d3ae1 Adam Menz
                        result = "Custom";
354 d88d3ae1 Adam Menz
                        //setCustomIcon();
355 441d5327 Adam Menz
                }
356 441d5327 Adam Menz
                return result;
357 441d5327 Adam Menz
        }
358 0edf6b39 Adam Menz
359 d88d3ae1 Adam Menz
        //display rackspace logo for cloud accounts and openstack logo for others
360 d88d3ae1 Adam Menz
        private int setAccountIcon(Account account){
361 d88d3ae1 Adam Menz
                if(account.getAuthServer().equals(Preferences.COUNTRY_UK_AUTH_SERVER) 
362 d88d3ae1 Adam Menz
                                || account.getAuthServer().equals(Preferences.COUNTRY_US_AUTH_SERVER)){
363 d88d3ae1 Adam Menz
                        return R.drawable.rackspacecloud_icon;
364 d88d3ae1 Adam Menz
                }
365 d88d3ae1 Adam Menz
                else{
366 d88d3ae1 Adam Menz
                        return R.drawable.openstack_icon;
367 d88d3ae1 Adam Menz
                }
368 d88d3ae1 Adam Menz
        }
369 441d5327 Adam Menz
370 441d5327 Adam Menz
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
371 730daee8 Adam Menz
                super.onActivityResult(requestCode, resultCode, data);
372 0edf6b39 Adam Menz
373 3e180b04 Adam Menz
                if(requestCode == 187){
374 3e180b04 Adam Menz
                        hideDialog(); 
375 3e180b04 Adam Menz
                }
376 0edf6b39 Adam Menz
377 730daee8 Adam Menz
                if (resultCode == RESULT_OK && requestCode == 78) {          
378 730daee8 Adam Menz
                        Account acc = new Account();
379 730daee8 Adam Menz
                        Bundle b = data.getBundleExtra("accountInfo");
380 730daee8 Adam Menz
                        acc.setApiKey(b.getString("apiKey"));
381 730daee8 Adam Menz
                        acc.setUsername(b.getString("username"));
382 730daee8 Adam Menz
                        acc.setAuthServer(b.getString("server"));
383 730daee8 Adam Menz
                        accounts.add(acc);
384 730daee8 Adam Menz
                        writeAccounts();
385 730daee8 Adam Menz
                        loadAccounts();
386 730daee8 Adam Menz
                }
387 441d5327 Adam Menz
        }        
388 0edf6b39 Adam Menz
        /*
389 441d5327 Adam Menz
        private void setActivityIndicatorsVisibility(int visibility) {
390 441d5327 Adam Menz
                //FINISH THIS TO LET USER KNOW PROGRAM IS STILL WORKING
391 0edf6b39 Adam Menz

392 7b55f1ec Adam Menz
        //ProgressBar pb = new ProgressBar();
393 7b55f1ec Adam Menz
            //TextView tv = (TextView) findViewById(R.id.login_authenticating_label);
394 7b55f1ec Adam Menz
        //pb.setVisibility(visibility);
395 7b55f1ec Adam Menz
        //tv.setVisibility(visibility);
396 7b55f1ec Adam Menz
    }
397 0edf6b39 Adam Menz

398 7b55f1ec Adam Menz
        private void setActivityIndicatorsVisibility(int visibility, View v) {
399 7b55f1ec Adam Menz
                //FINISH THIS TO LET USER KNOW PROGRAM IS STILL WORKING
400 0edf6b39 Adam Menz

401 441d5327 Adam Menz
        //ProgressBar pb = new ProgressBar();
402 441d5327 Adam Menz
            //TextView tv = (TextView) findViewById(R.id.login_authenticating_label);
403 441d5327 Adam Menz
        //pb.setVisibility(visibility);
404 441d5327 Adam Menz
        //tv.setVisibility(visibility);
405 441d5327 Adam Menz
    }
406 0edf6b39 Adam Menz
         */
407 0edf6b39 Adam Menz
408 e7534f91 Adam Menz
        private void showDialog() {
409 e7534f91 Adam Menz
                authenticating = true;
410 3e180b04 Adam Menz
                if(dialog == null || !dialog.isShowing()){
411 3e180b04 Adam Menz
                        dialog = ProgressDialog.show(ListAccountsActivity.this, "", "Authenticating...", true);
412 3e180b04 Adam Menz
                }
413 441d5327 Adam Menz
    }
414 441d5327 Adam Menz
    
415 e7534f91 Adam Menz
    private void hideDialog() {
416 e7534f91 Adam Menz
            if(dialog != null){
417 e7534f91 Adam Menz
                    dialog.dismiss();
418 e7534f91 Adam Menz
            }
419 e7534f91 Adam Menz
            authenticating = false;
420 441d5327 Adam Menz
    }
421 e7534f91 Adam Menz
422 441d5327 Adam Menz
        private class AuthenticateTask extends AsyncTask<Void, Void, Boolean> {
423 0edf6b39 Adam Menz
424 441d5327 Adam Menz
                @Override
425 e7534f91 Adam Menz
                protected void onPreExecute(){
426 e7534f91 Adam Menz
                        showDialog();
427 e7534f91 Adam Menz
                }
428 0edf6b39 Adam Menz
429 e7534f91 Adam Menz
                @Override
430 441d5327 Adam Menz
                protected Boolean doInBackground(Void... arg0) {
431 37b4d44e Adam Menz
                        return new Boolean(Authentication.authenticate(context));
432 441d5327 Adam Menz
                        //return true;
433 441d5327 Adam Menz
                }
434 0edf6b39 Adam Menz
435 441d5327 Adam Menz
                @Override
436 441d5327 Adam Menz
                protected void onPostExecute(Boolean result) {
437 441d5327 Adam Menz
                        if (result.booleanValue()) {
438 441d5327 Adam Menz
                                //startActivity(tabViewIntent);
439 0edf6b39 Adam Menz
                                new LoadImagesTask().execute((Void[]) null);
440 441d5327 Adam Menz
                        } else {
441 e7534f91 Adam Menz
                                hideDialog();
442 441d5327 Adam Menz
                                showAlert("Login Failure", "Authentication failed.  Please check your User Name and API Key.");
443 441d5327 Adam Menz
                        }
444 441d5327 Adam Menz
                }
445 0edf6b39 Adam Menz
        }
446 0edf6b39 Adam Menz
447 0edf6b39 Adam Menz
        private class LoadFlavorsTask extends AsyncTask<Void, Void, ArrayList<Flavor>> {
448 441d5327 Adam Menz
449 441d5327 Adam Menz
                @Override
450 441d5327 Adam Menz
                protected ArrayList<Flavor> doInBackground(Void... arg0) {
451 37b4d44e Adam Menz
                        return (new FlavorManager()).createList(true, context);
452 441d5327 Adam Menz
                }
453 0edf6b39 Adam Menz
454 441d5327 Adam Menz
                @Override
455 441d5327 Adam Menz
                protected void onPostExecute(ArrayList<Flavor> result) {
456 441d5327 Adam Menz
                        if (result != null && result.size() > 0) {
457 441d5327 Adam Menz
                                TreeMap<String, Flavor> flavorMap = new TreeMap<String, Flavor>();
458 441d5327 Adam Menz
                                for (int i = 0; i < result.size(); i++) {
459 441d5327 Adam Menz
                                        Flavor flavor = result.get(i);
460 441d5327 Adam Menz
                                        flavorMap.put(flavor.getId(), flavor);
461 441d5327 Adam Menz
                                }
462 441d5327 Adam Menz
                                Flavor.setFlavors(flavorMap);
463 e7534f91 Adam Menz
                                hideDialog();
464 3e180b04 Adam Menz
                                startActivityForResult(tabViewIntent, 187);
465 441d5327 Adam Menz
                        } else {
466 e7534f91 Adam Menz
                                hideDialog();
467 441d5327 Adam Menz
                                showAlert("Login Failure", "There was a problem loading server flavors.  Please try again.");
468 441d5327 Adam Menz
                        }
469 441d5327 Adam Menz
                }
470 0edf6b39 Adam Menz
        }
471 0edf6b39 Adam Menz
472 0edf6b39 Adam Menz
        private class LoadImagesTask extends AsyncTask<Void, Void, ArrayList<Image>> {
473 441d5327 Adam Menz
474 441d5327 Adam Menz
                @Override
475 441d5327 Adam Menz
                protected ArrayList<Image> doInBackground(Void... arg0) {
476 37b4d44e Adam Menz
                        return (new ImageManager()).createList(true, context);
477 441d5327 Adam Menz
                }
478 0edf6b39 Adam Menz
479 441d5327 Adam Menz
                @Override
480 441d5327 Adam Menz
                protected void onPostExecute(ArrayList<Image> result) {
481 441d5327 Adam Menz
                        if (result != null && result.size() > 0) {
482 441d5327 Adam Menz
                                TreeMap<String, Image> imageMap = new TreeMap<String, Image>();
483 441d5327 Adam Menz
                                for (int i = 0; i < result.size(); i++) {
484 441d5327 Adam Menz
                                        Image image = result.get(i);
485 441d5327 Adam Menz
                                        imageMap.put(image.getId(), image);
486 441d5327 Adam Menz
                                }
487 441d5327 Adam Menz
                                Image.setImages(imageMap);
488 441d5327 Adam Menz
                                new LoadFlavorsTask().execute((Void[]) null);
489 441d5327 Adam Menz
                                //startActivity(tabViewIntent);
490 441d5327 Adam Menz
                        } else {
491 e7534f91 Adam Menz
                                hideDialog();
492 441d5327 Adam Menz
                                showAlert("Login Failure", "There was a problem loading server images.  Please try again.");
493 441d5327 Adam Menz
                        }
494 441d5327 Adam Menz
                }
495 0edf6b39 Adam Menz
        }
496 0edf6b39 Adam Menz
497 0edf6b39 Adam Menz
        private void showAlert(String title, String message) {
498 441d5327 Adam Menz
                AlertDialog alert = new AlertDialog.Builder(this).create();
499 441d5327 Adam Menz
                alert.setTitle(title);
500 441d5327 Adam Menz
                alert.setMessage(message);
501 441d5327 Adam Menz
                alert.setButton("OK", new DialogInterface.OnClickListener() {
502 0edf6b39 Adam Menz
                        public void onClick(DialogInterface dialog, int which) {
503 0edf6b39 Adam Menz
                                return;
504 0edf6b39 Adam Menz
                        } }); 
505 441d5327 Adam Menz
                alert.show();
506 0edf6b39 Adam Menz
        }
507 0edf6b39 Adam Menz
508 0edf6b39 Adam Menz
        private void showToast(String message) {
509 0ae79b26 Adam Menz
                Context context = getApplicationContext();
510 0ae79b26 Adam Menz
                int duration = Toast.LENGTH_SHORT;
511 0ae79b26 Adam Menz
                Toast toast = Toast.makeText(context, message, duration);
512 0ae79b26 Adam Menz
                toast.show();
513 0edf6b39 Adam Menz
        }
514 0edf6b39 Adam Menz
515 0edf6b39 Adam Menz
516 0edf6b39 Adam Menz
517 0edf6b39 Adam Menz
518 441d5327 Adam Menz
}