Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (16.4 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 6ecf99bb Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.Algorithm;
14 6ecf99bb Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.AlgorithmManager;
15 aeff0a62 Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.Protocol;
16 aeff0a62 Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.ProtocolManager;
17 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Account;
18 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Flavor;
19 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.FlavorManager;
20 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.Image;
21 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.ImageManager;
22 441d5327 Adam Menz
import com.rackspace.cloud.servers.api.client.http.Authentication;
23 441d5327 Adam Menz
24 441d5327 Adam Menz
import android.app.AlertDialog;
25 0ae79b26 Adam Menz
import android.app.Dialog;
26 441d5327 Adam Menz
import android.app.ListActivity;
27 f2020b69 Adam Menz
import android.app.ProgressDialog;
28 441d5327 Adam Menz
import android.content.Context;
29 441d5327 Adam Menz
import android.content.DialogInterface;
30 441d5327 Adam Menz
import android.content.Intent;
31 441d5327 Adam Menz
import android.os.AsyncTask;
32 441d5327 Adam Menz
import android.os.Bundle;
33 3e180b04 Adam Menz
import android.util.Log;
34 fea03400 Adam Menz
import android.view.ContextMenu;
35 fea03400 Adam Menz
import android.view.ContextMenu.ContextMenuInfo;
36 441d5327 Adam Menz
import android.view.LayoutInflater;
37 441d5327 Adam Menz
import android.view.Menu;
38 441d5327 Adam Menz
import android.view.MenuInflater;
39 441d5327 Adam Menz
import android.view.MenuItem;
40 441d5327 Adam Menz
import android.view.View;
41 0ae79b26 Adam Menz
import android.view.View.OnClickListener;
42 441d5327 Adam Menz
import android.view.ViewGroup;
43 fea03400 Adam Menz
import android.widget.AdapterView.AdapterContextMenuInfo;
44 441d5327 Adam Menz
import android.widget.ArrayAdapter;
45 0ae79b26 Adam Menz
import android.widget.Button;
46 0ae79b26 Adam Menz
import android.widget.EditText;
47 441d5327 Adam Menz
import android.widget.ImageView;
48 441d5327 Adam Menz
import android.widget.ListView;
49 441d5327 Adam Menz
import android.widget.TextView;
50 0ae79b26 Adam Menz
import android.widget.Toast;
51 441d5327 Adam Menz
52 441d5327 Adam Menz
public class ListAccountsActivity extends ListActivity{
53 441d5327 Adam Menz
54 006434d8 Adam Menz
        private final int PASSWORD_PROMPT = 123;
55 730daee8 Adam Menz
        private final String FILENAME = "accounts.data";
56 006434d8 Adam Menz
        
57 441d5327 Adam Menz
        private boolean authenticating;
58 006434d8 Adam Menz
        private ArrayList<Account> accounts;
59 006434d8 Adam Menz
        private Intent tabViewIntent;
60 e7534f91 Adam Menz
        private ProgressDialog dialog;
61 e7534f91 Adam Menz
        private Context context;
62 006434d8 Adam Menz
        
63 006434d8 Adam Menz
        //need to store if the user has successfully logged in
64 006434d8 Adam Menz
        private boolean loggedIn;
65 f00e3176 Adam Menz
66 441d5327 Adam Menz
67 441d5327 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
68 441d5327 Adam Menz
        super.onCreate(savedInstanceState);
69 e7534f91 Adam Menz
        onRestoreInstanceState(savedInstanceState);
70 fea03400 Adam Menz
        registerForContextMenu(getListView());
71 37b4d44e Adam Menz
        context = getApplicationContext();
72 b722cab3 Adam Menz
        tabViewIntent = new Intent(this, TabViewActivity.class);
73 0ae79b26 Adam Menz
        verifyPassword();
74 441d5327 Adam Menz
    }
75 e7534f91 Adam Menz
76 441d5327 Adam Menz
        @Override
77 441d5327 Adam Menz
        protected void onSaveInstanceState(Bundle outState) {
78 441d5327 Adam Menz
                super.onSaveInstanceState(outState);
79 441d5327 Adam Menz
                outState.putBoolean("authenticating", authenticating);
80 006434d8 Adam Menz
                outState.putBoolean("loggedIn", loggedIn);
81 a7d1fdc2 Adam Menz
                
82 e7534f91 Adam Menz
                //need to set authenticating back to true because it is set to false
83 e7534f91 Adam Menz
                //in hideDialog()
84 e7534f91 Adam Menz
                if(authenticating){
85 e7534f91 Adam Menz
                        hideDialog();
86 e7534f91 Adam Menz
                        authenticating = true;
87 e7534f91 Adam Menz
                }
88 441d5327 Adam Menz
                writeAccounts();
89 441d5327 Adam Menz
        }
90 441d5327 Adam Menz
        
91 e7534f91 Adam Menz
        @Override
92 e7534f91 Adam Menz
        protected void onRestoreInstanceState(Bundle state) {
93 006434d8 Adam Menz
                if (state != null && state.containsKey("loggedIn")){
94 006434d8 Adam Menz
                        loggedIn = state.getBoolean("loggedIn");
95 006434d8 Adam Menz
                }
96 006434d8 Adam Menz
                else{
97 006434d8 Adam Menz
                        loggedIn = false;
98 006434d8 Adam Menz
                }
99 441d5327 Adam Menz
                if (state != null && state.containsKey("authenticating") && state.getBoolean("authenticating")) {
100 e7534f91 Adam Menz
                    showDialog();
101 441d5327 Adam Menz
            } else {
102 e7534f91 Adam Menz
                    hideDialog();
103 441d5327 Adam Menz
            }
104 441d5327 Adam Menz
                if (state != null && state.containsKey("accounts")) {
105 441d5327 Adam Menz
                    accounts = readAccounts();
106 441d5327 Adam Menz
                    if (accounts.size() == 0) {
107 441d5327 Adam Menz
                            displayNoAccountsCell();
108 441d5327 Adam Menz
                    } else {
109 441d5327 Adam Menz
                            getListView().setDividerHeight(1); // restore divider lines 
110 441d5327 Adam Menz
                            setListAdapter(new AccountAdapter());
111 441d5327 Adam Menz
                    }
112 441d5327 Adam Menz
            } else {
113 441d5327 Adam Menz
            loadAccounts();        
114 441d5327 Adam Menz
            }         
115 441d5327 Adam Menz
    }
116 3e180b04 Adam Menz
117 e7534f91 Adam Menz
        @Override
118 e7534f91 Adam Menz
        protected void onStart(){
119 e7534f91 Adam Menz
                super.onStart();
120 e7534f91 Adam Menz
                if(authenticating){
121 e7534f91 Adam Menz
                        showDialog();
122 e7534f91 Adam Menz
                }
123 e7534f91 Adam Menz
        }
124 e7534f91 Adam Menz
        
125 e7534f91 Adam Menz
        @Override
126 e7534f91 Adam Menz
        protected void onStop(){
127 e7534f91 Adam Menz
                super.onStop();
128 e7534f91 Adam Menz
                if(authenticating){
129 e7534f91 Adam Menz
                        hideDialog();
130 e7534f91 Adam Menz
                        authenticating = true;
131 e7534f91 Adam Menz
                }
132 e7534f91 Adam Menz
        }
133 3e180b04 Adam Menz
        
134 f00e3176 Adam Menz
135 0ae79b26 Adam Menz
        /*
136 0ae79b26 Adam Menz
         * if the application is password protected,
137 0ae79b26 Adam Menz
         * the user must provide the password before
138 0ae79b26 Adam Menz
         * gaining access
139 0ae79b26 Adam Menz
         */
140 0ae79b26 Adam Menz
        private void verifyPassword(){
141 0ae79b26 Adam Menz
                PasswordManager pwManager = new PasswordManager(getSharedPreferences(
142 0ae79b26 Adam Menz
                                Preferences.SHARED_PREFERENCES_NAME, MODE_PRIVATE));
143 006434d8 Adam Menz
                if(pwManager.hasPassword() && !loggedIn){
144 0ae79b26 Adam Menz
                        createCustomDialog(PASSWORD_PROMPT);
145 0ae79b26 Adam Menz
                }
146 0ae79b26 Adam Menz
        }
147 0ae79b26 Adam Menz
        
148 0ae79b26 Adam Menz
        private boolean rightPassword(String password){
149 0ae79b26 Adam Menz
                PasswordManager pwManager = new PasswordManager(getSharedPreferences(
150 0ae79b26 Adam Menz
                                Preferences.SHARED_PREFERENCES_NAME, MODE_PRIVATE));
151 0ae79b26 Adam Menz
                return pwManager.verifyEnteredPassword(password);
152 0ae79b26 Adam Menz
        }
153 0ae79b26 Adam Menz
        
154 0ae79b26 Adam Menz
        
155 0ae79b26 Adam Menz
        /*
156 0ae79b26 Adam Menz
         * forces the user to enter a correct password
157 0ae79b26 Adam Menz
         * before they gain access to application data
158 0ae79b26 Adam Menz
         */
159 0ae79b26 Adam Menz
        private void createCustomDialog(int id) {
160 0ae79b26 Adam Menz
                final Dialog dialog = new Dialog(ListAccountsActivity.this);
161 0ae79b26 Adam Menz
                switch (id) {
162 0ae79b26 Adam Menz
                case PASSWORD_PROMPT:
163 0ae79b26 Adam Menz
                        dialog.setContentView(R.layout.passworddialog);
164 0ae79b26 Adam Menz
                        dialog.setTitle("Enter your password:");
165 0ae79b26 Adam Menz
                        dialog.setCancelable(false);
166 0ae79b26 Adam Menz
                        Button button = (Button) dialog.findViewById(R.id.submit_password);
167 0ae79b26 Adam Menz
                        button.setOnClickListener(new OnClickListener() {
168 0ae79b26 Adam Menz
                                public void onClick(View v){
169 0ae79b26 Adam Menz
                                        EditText passwordText = ((EditText)dialog.findViewById(R.id.submit_password_text));
170 0ae79b26 Adam Menz
                                        if(!rightPassword(passwordText.getText().toString())){
171 0ae79b26 Adam Menz
                                                passwordText.setText("");
172 0ae79b26 Adam Menz
                                                showToast("Password was incorrect.");
173 006434d8 Adam Menz
                                                loggedIn = false;
174 0ae79b26 Adam Menz
                                        }
175 0ae79b26 Adam Menz
                                        else{
176 0ae79b26 Adam Menz
                                                dialog.dismiss();
177 006434d8 Adam Menz
                                                loggedIn = true;
178 0ae79b26 Adam Menz
                                        }
179 0ae79b26 Adam Menz
                                }
180 0ae79b26 Adam Menz
                                
181 0ae79b26 Adam Menz
                        });
182 0ae79b26 Adam Menz
                        dialog.show();
183 0ae79b26 Adam Menz
                }
184 0ae79b26 Adam Menz
        }
185 0ae79b26 Adam Menz
        
186 441d5327 Adam Menz
        private void loadAccounts() {
187 fea03400 Adam Menz
                //check and see if there are any in memory
188 441d5327 Adam Menz
                if(accounts == null){
189 441d5327 Adam Menz
                        accounts = readAccounts();
190 441d5327 Adam Menz
                }
191 441d5327 Adam Menz
                //if nothing was written before accounts will still be null
192 441d5327 Adam Menz
                if(accounts == null){
193 441d5327 Adam Menz
                        accounts = new ArrayList<Account>();
194 441d5327 Adam Menz
                }
195 fea03400 Adam Menz
196 441d5327 Adam Menz
                setAccountList();
197 441d5327 Adam Menz
        }
198 441d5327 Adam Menz
199 441d5327 Adam Menz
        private void setAccountList() {
200 441d5327 Adam Menz
        
201 441d5327 Adam Menz
                if (accounts.size() == 0) {
202 441d5327 Adam Menz
                        displayNoAccountsCell();
203 441d5327 Adam Menz
                } else {
204 441d5327 Adam Menz
                        getListView().setDividerHeight(1); // restore divider lines 
205 441d5327 Adam Menz
                        this.setListAdapter(new AccountAdapter());
206 441d5327 Adam Menz
                }
207 441d5327 Adam Menz
        }
208 441d5327 Adam Menz
209 441d5327 Adam Menz
        private void writeAccounts(){
210 441d5327 Adam Menz
                FileOutputStream fos;
211 730daee8 Adam Menz
                ObjectOutputStream out = null;
212 441d5327 Adam Menz
                try{
213 441d5327 Adam Menz
                        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
214 441d5327 Adam Menz
                        out = new ObjectOutputStream(fos);
215 441d5327 Adam Menz
                        out.writeObject(accounts);
216 441d5327 Adam Menz
                        out.flush();
217 441d5327 Adam Menz
                        out.close();
218 441d5327 Adam Menz
                } catch (FileNotFoundException e) {
219 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not save accounts.");
220 441d5327 Adam Menz
                        e.printStackTrace();
221 441d5327 Adam Menz
                } catch (IOException e) {
222 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not save accounts.");
223 441d5327 Adam Menz
                        e.printStackTrace();
224 441d5327 Adam Menz
                }
225 441d5327 Adam Menz
        }
226 441d5327 Adam Menz
227 441d5327 Adam Menz
        private ArrayList<Account> readAccounts(){
228 441d5327 Adam Menz
                FileInputStream fis;
229 441d5327 Adam Menz
                ObjectInputStream in;
230 441d5327 Adam Menz
                try {
231 441d5327 Adam Menz
                        fis = openFileInput(FILENAME);
232 441d5327 Adam Menz
                        in = new ObjectInputStream(fis);
233 639ae8d6 Adam Menz
                        @SuppressWarnings("unchecked")
234 441d5327 Adam Menz
                        ArrayList<Account> file = (ArrayList<Account>)in.readObject();
235 441d5327 Adam Menz
                        in.close();
236 b722cab3 Adam Menz
                        return file; 
237 441d5327 Adam Menz
                } catch (FileNotFoundException e) {
238 d88d3ae1 Adam Menz
                        //showAlert("Error", "Could not load accounts.");
239 441d5327 Adam Menz
                        e.printStackTrace();
240 441d5327 Adam Menz
                        return null;
241 441d5327 Adam Menz
                } catch (StreamCorruptedException e) {
242 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
243 441d5327 Adam Menz
                        e.printStackTrace();
244 441d5327 Adam Menz
                } catch (IOException e) {
245 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
246 441d5327 Adam Menz
                        e.printStackTrace();
247 441d5327 Adam Menz
                } catch (ClassNotFoundException e) {
248 d88d3ae1 Adam Menz
                        showAlert("Error", "Could not load accounts.");
249 441d5327 Adam Menz
                        e.printStackTrace();
250 441d5327 Adam Menz
                }
251 441d5327 Adam Menz
                return null;
252 441d5327 Adam Menz
                
253 441d5327 Adam Menz
        }
254 441d5327 Adam Menz
255 441d5327 Adam Menz
        private void displayNoAccountsCell() {
256 441d5327 Adam Menz
            String a[] = new String[1];
257 441d5327 Adam Menz
            a[0] = "No Accounts";
258 441d5327 Adam Menz
        setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.noaccountscell, R.id.no_accounts_label, a));
259 441d5327 Adam Menz
        getListView().setTextFilterEnabled(true);
260 441d5327 Adam Menz
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
261 441d5327 Adam Menz
        getListView().setItemsCanFocus(false);
262 441d5327 Adam Menz
    }
263 441d5327 Adam Menz
        
264 441d5327 Adam Menz
        protected void onListItemClick(ListView l, View v, int position, long id) {
265 730daee8 Adam Menz
                if (accounts != null && accounts.size() > 0) {
266 e7534f91 Adam Menz
                        //setActivityIndicatorsVisibility(View.VISIBLE, v);
267 730daee8 Adam Menz
                        Account.setAccount(accounts.get(position));
268 730daee8 Adam Menz
                        login();
269 730daee8 Adam Menz
                }                
270 730daee8 Adam Menz
    }
271 730daee8 Adam Menz
        
272 441d5327 Adam Menz
        public void login() {
273 441d5327 Adam Menz
        //showActivityIndicators();
274 441d5327 Adam Menz
        //setLoginPreferences();
275 441d5327 Adam Menz
        new AuthenticateTask().execute((Void[]) null);
276 441d5327 Adam Menz
    }
277 441d5327 Adam Menz
        
278 fea03400 Adam Menz
        //setup menu for when menu button is pressed
279 441d5327 Adam Menz
        public boolean onCreateOptionsMenu(Menu menu) {
280 441d5327 Adam Menz
                super.onCreateOptionsMenu(menu);
281 441d5327 Adam Menz
                MenuInflater inflater = getMenuInflater();
282 441d5327 Adam Menz
                inflater.inflate(R.menu.accounts_list_menu, menu);
283 441d5327 Adam Menz
                return true;
284 441d5327 Adam Menz
        } 
285 441d5327 Adam Menz
    
286 441d5327 Adam Menz
    @Override 
287 fea03400 Adam Menz
    //in options menu, when add account is selected go to add account activity
288 441d5327 Adam Menz
    public boolean onOptionsItemSelected(MenuItem item) {
289 f2323921 Adam Menz
            switch (item.getItemId()) {
290 f2323921 Adam Menz
            case R.id.add_account:
291 f2323921 Adam Menz
                    startActivityForResult(new Intent(this, AddAccountActivity.class), 78); // arbitrary number; never used again
292 f2323921 Adam Menz
                    return true;
293 f2323921 Adam Menz
294 f2323921 Adam Menz
            case R.id.contact_rackspace:
295 f2323921 Adam Menz
                    startActivity(new Intent(this, ContactActivity.class));
296 f2323921 Adam Menz
                    return true;
297 0ae79b26 Adam Menz
                    
298 0ae79b26 Adam Menz
            case R.id.add_password:
299 0ae79b26 Adam Menz
                    startActivity(new Intent(this, CreatePasswordActivity.class));
300 0ae79b26 Adam Menz
                    return true;
301 f2323921 Adam Menz
            }        
302 f2323921 Adam Menz
            return false;
303 f2323921 Adam Menz
    } 
304 441d5327 Adam Menz
305 fea03400 Adam Menz
    //the context menu for a long press on an account
306 fea03400 Adam Menz
        public void onCreateContextMenu(ContextMenu menu, View v,
307 fea03400 Adam Menz
                        ContextMenuInfo menuInfo) {
308 fea03400 Adam Menz
                super.onCreateContextMenu(menu, v, menuInfo);
309 fea03400 Adam Menz
                MenuInflater inflater = getMenuInflater();
310 fea03400 Adam Menz
                inflater.inflate(R.menu.account_context_menu, menu);
311 fea03400 Adam Menz
        }
312 fea03400 Adam Menz
313 fea03400 Adam Menz
        //removes the selected account from account list if remove is clicked
314 fea03400 Adam Menz
        public boolean onContextItemSelected(MenuItem item) {
315 fea03400 Adam Menz
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
316 fea03400 Adam Menz
                accounts.remove(info.position);
317 fea03400 Adam Menz
                writeAccounts();
318 fea03400 Adam Menz
                loadAccounts();
319 fea03400 Adam Menz
                return true;
320 fea03400 Adam Menz
        }
321 fea03400 Adam Menz
322 441d5327 Adam Menz
        class AccountAdapter extends ArrayAdapter<Account> {
323 441d5327 Adam Menz
324 441d5327 Adam Menz
                AccountAdapter() {
325 441d5327 Adam Menz
                        super(ListAccountsActivity.this, R.layout.listaccountcell, accounts);
326 441d5327 Adam Menz
                }
327 441d5327 Adam Menz
                
328 441d5327 Adam Menz
                public View getView(int position, View convertView, ViewGroup parent) {
329 441d5327 Adam Menz
                        
330 441d5327 Adam Menz
                        LayoutInflater inflater = getLayoutInflater();
331 441d5327 Adam Menz
                        View row = inflater.inflate(R.layout.listaccountcell, parent, false);
332 441d5327 Adam Menz
333 441d5327 Adam Menz
                        TextView label = (TextView) row.findViewById(R.id.label);
334 441d5327 Adam Menz
                        label.setText(accounts.get(position).getUsername());
335 441d5327 Adam Menz
                        
336 441d5327 Adam Menz
                        TextView sublabel = (TextView) row.findViewById(R.id.sublabel);
337 441d5327 Adam Menz
                        sublabel.setText(getAccountServer(accounts.get(position)));
338 441d5327 Adam Menz
                        
339 441d5327 Adam Menz
                        ImageView icon = (ImageView) row.findViewById(R.id.account_type_icon);
340 d88d3ae1 Adam Menz
                        icon.setImageResource(setAccountIcon(accounts.get(position)));
341 441d5327 Adam Menz
                        
342 441d5327 Adam Menz
                        return row;
343 441d5327 Adam Menz
                }
344 441d5327 Adam Menz
        }
345 441d5327 Adam Menz
        
346 441d5327 Adam Menz
        public String getAccountServer(Account account){
347 441d5327 Adam Menz
                String authServer = account.getAuthServer();
348 d88d3ae1 Adam Menz
                String result;
349 d88d3ae1 Adam Menz
                if(authServer.equals(Preferences.COUNTRY_UK_AUTH_SERVER)){
350 d88d3ae1 Adam Menz
                        result = "Rackspace Cloud (UK)";
351 d88d3ae1 Adam Menz
                }
352 d88d3ae1 Adam Menz
                else if(authServer.equals(Preferences.COUNTRY_US_AUTH_SERVER)){
353 d88d3ae1 Adam Menz
                        result = "Rackspace Cloud (US)";
354 441d5327 Adam Menz
                }
355 441d5327 Adam Menz
                else{
356 d88d3ae1 Adam Menz
                        result = "Custom";
357 d88d3ae1 Adam Menz
                        //setCustomIcon();
358 441d5327 Adam Menz
                }
359 441d5327 Adam Menz
                return result;
360 441d5327 Adam Menz
        }
361 d88d3ae1 Adam Menz
        
362 d88d3ae1 Adam Menz
        //display rackspace logo for cloud accounts and openstack logo for others
363 d88d3ae1 Adam Menz
        private int setAccountIcon(Account account){
364 d88d3ae1 Adam Menz
                if(account.getAuthServer().equals(Preferences.COUNTRY_UK_AUTH_SERVER) 
365 d88d3ae1 Adam Menz
                                || account.getAuthServer().equals(Preferences.COUNTRY_US_AUTH_SERVER)){
366 d88d3ae1 Adam Menz
                        return R.drawable.rackspacecloud_icon;
367 d88d3ae1 Adam Menz
                }
368 d88d3ae1 Adam Menz
                else{
369 d88d3ae1 Adam Menz
                        return R.drawable.openstack_icon;
370 d88d3ae1 Adam Menz
                }
371 d88d3ae1 Adam Menz
        }
372 441d5327 Adam Menz
373 441d5327 Adam Menz
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
374 730daee8 Adam Menz
                super.onActivityResult(requestCode, resultCode, data);
375 730daee8 Adam Menz
                
376 3e180b04 Adam Menz
                if(requestCode == 187){
377 3e180b04 Adam Menz
                        hideDialog(); 
378 3e180b04 Adam Menz
                }
379 3e180b04 Adam Menz
                
380 730daee8 Adam Menz
                if (resultCode == RESULT_OK && requestCode == 78) {          
381 730daee8 Adam Menz
                        Account acc = new Account();
382 730daee8 Adam Menz
                        Bundle b = data.getBundleExtra("accountInfo");
383 730daee8 Adam Menz
                        acc.setApiKey(b.getString("apiKey"));
384 730daee8 Adam Menz
                        acc.setUsername(b.getString("username"));
385 730daee8 Adam Menz
                        acc.setAuthServer(b.getString("server"));
386 730daee8 Adam Menz
                        accounts.add(acc);
387 730daee8 Adam Menz
                        writeAccounts();
388 730daee8 Adam Menz
                        loadAccounts();
389 730daee8 Adam Menz
                }
390 441d5327 Adam Menz
        }        
391 e7534f91 Adam Menz
/*
392 441d5327 Adam Menz
        private void setActivityIndicatorsVisibility(int visibility) {
393 441d5327 Adam Menz
                //FINISH THIS TO LET USER KNOW PROGRAM IS STILL WORKING
394 7b55f1ec Adam Menz
                
395 7b55f1ec Adam Menz
        //ProgressBar pb = new ProgressBar();
396 7b55f1ec Adam Menz
            //TextView tv = (TextView) findViewById(R.id.login_authenticating_label);
397 7b55f1ec Adam Menz
        //pb.setVisibility(visibility);
398 7b55f1ec Adam Menz
        //tv.setVisibility(visibility);
399 7b55f1ec Adam Menz
    }
400 7b55f1ec Adam Menz
        
401 7b55f1ec Adam Menz
        private void setActivityIndicatorsVisibility(int visibility, View v) {
402 7b55f1ec Adam Menz
                //FINISH THIS TO LET USER KNOW PROGRAM IS STILL WORKING
403 441d5327 Adam Menz
                
404 441d5327 Adam Menz
        //ProgressBar pb = new ProgressBar();
405 441d5327 Adam Menz
            //TextView tv = (TextView) findViewById(R.id.login_authenticating_label);
406 441d5327 Adam Menz
        //pb.setVisibility(visibility);
407 441d5327 Adam Menz
        //tv.setVisibility(visibility);
408 441d5327 Adam Menz
    }
409 e7534f91 Adam Menz
*/
410 441d5327 Adam Menz
        
411 e7534f91 Adam Menz
        private void showDialog() {
412 e7534f91 Adam Menz
                authenticating = true;
413 3e180b04 Adam Menz
                if(dialog == null || !dialog.isShowing()){
414 3e180b04 Adam Menz
                        dialog = ProgressDialog.show(ListAccountsActivity.this, "", "Authenticating...", true);
415 3e180b04 Adam Menz
                }
416 441d5327 Adam Menz
    }
417 441d5327 Adam Menz
    
418 e7534f91 Adam Menz
    private void hideDialog() {
419 e7534f91 Adam Menz
            if(dialog != null){
420 e7534f91 Adam Menz
                    dialog.dismiss();
421 e7534f91 Adam Menz
            }
422 e7534f91 Adam Menz
            authenticating = false;
423 441d5327 Adam Menz
    }
424 e7534f91 Adam Menz
425 441d5327 Adam Menz
        private class AuthenticateTask extends AsyncTask<Void, Void, Boolean> {
426 441d5327 Adam Menz
            
427 441d5327 Adam Menz
                @Override
428 e7534f91 Adam Menz
                protected void onPreExecute(){
429 e7534f91 Adam Menz
                        showDialog();
430 e7534f91 Adam Menz
                }
431 e7534f91 Adam Menz
                
432 e7534f91 Adam Menz
                @Override
433 441d5327 Adam Menz
                protected Boolean doInBackground(Void... arg0) {
434 96a8e632 Adam Menz
                        long startTime = System.currentTimeMillis();
435 96a8e632 Adam Menz
                        boolean b =  new Boolean(Authentication.authenticate(context));
436 96a8e632 Adam Menz
                        long endTime = System.currentTimeMillis();
437 96a8e632 Adam Menz
                        Log.d("info", "it took " + (endTime - startTime) + " millis");
438 96a8e632 Adam Menz
                        return b;
439 441d5327 Adam Menz
                        //return true;
440 441d5327 Adam Menz
                }
441 441d5327 Adam Menz
            
442 441d5327 Adam Menz
                @Override
443 441d5327 Adam Menz
                protected void onPostExecute(Boolean result) {
444 441d5327 Adam Menz
                        if (result.booleanValue()) {
445 441d5327 Adam Menz
                                //startActivity(tabViewIntent);
446 e7534f91 Adam Menz
                        new LoadImagesTask().execute((Void[]) null);
447 441d5327 Adam Menz
                        } else {
448 e7534f91 Adam Menz
                                hideDialog();
449 441d5327 Adam Menz
                                showAlert("Login Failure", "Authentication failed.  Please check your User Name and API Key.");
450 441d5327 Adam Menz
                        }
451 441d5327 Adam Menz
                }
452 441d5327 Adam Menz
    }
453 441d5327 Adam Menz
454 aeff0a62 Adam Menz
    private class LoadImagesTask extends AsyncTask<Void, Void, ArrayList<Image>> {
455 441d5327 Adam Menz
            
456 441d5327 Adam Menz
                @Override
457 aeff0a62 Adam Menz
                protected ArrayList<Image> doInBackground(Void... arg0) {
458 aeff0a62 Adam Menz
                        return (new ImageManager()).createList(true, context);
459 441d5327 Adam Menz
                }
460 441d5327 Adam Menz
            
461 441d5327 Adam Menz
                @Override
462 aeff0a62 Adam Menz
                protected void onPostExecute(ArrayList<Image> result) {
463 441d5327 Adam Menz
                        if (result != null && result.size() > 0) {
464 aeff0a62 Adam Menz
                                TreeMap<String, Image> imageMap = new TreeMap<String, Image>();
465 441d5327 Adam Menz
                                for (int i = 0; i < result.size(); i++) {
466 aeff0a62 Adam Menz
                                        Image image = result.get(i);
467 aeff0a62 Adam Menz
                                        imageMap.put(image.getId(), image);
468 441d5327 Adam Menz
                                }
469 aeff0a62 Adam Menz
                                Image.setImages(imageMap);
470 aeff0a62 Adam Menz
                                new LoadProtocolsTask().execute((Void[]) null);
471 441d5327 Adam Menz
                        } else {
472 e7534f91 Adam Menz
                                hideDialog();
473 aeff0a62 Adam Menz
                                showAlert("Login Failure", "There was a problem loading server images.  Please try again.");
474 441d5327 Adam Menz
                        }
475 441d5327 Adam Menz
                }
476 441d5327 Adam Menz
    }
477 aeff0a62 Adam Menz
    
478 aeff0a62 Adam Menz
    private class LoadProtocolsTask extends AsyncTask<Void, Void, ArrayList<Protocol>> {
479 441d5327 Adam Menz
480 aeff0a62 Adam Menz
                @Override
481 aeff0a62 Adam Menz
                protected ArrayList<Protocol> doInBackground(Void... arg0) {
482 aeff0a62 Adam Menz
                        return (new ProtocolManager()).createList(context);
483 aeff0a62 Adam Menz
                }
484 aeff0a62 Adam Menz
485 aeff0a62 Adam Menz
                @Override
486 aeff0a62 Adam Menz
                protected void onPostExecute(ArrayList<Protocol> result) {
487 aeff0a62 Adam Menz
                        if (result != null && result.size() > 0) {
488 aeff0a62 Adam Menz
                                Protocol.setProtocols(result);
489 6ecf99bb Adam Menz
                                new LoadAlgorithmsTask().execute((Void[]) null);
490 aeff0a62 Adam Menz
                        } else {
491 403bb53b Adam Menz
                                hideDialog();
492 aeff0a62 Adam Menz
                                showAlert("Login Failure", "There was a problem loading load balancer protocols.  Please try again.");
493 aeff0a62 Adam Menz
                        }
494 aeff0a62 Adam Menz
                }
495 aeff0a62 Adam Menz
        }
496 aeff0a62 Adam Menz
    
497 6ecf99bb Adam Menz
    private class LoadAlgorithmsTask extends AsyncTask<Void, Void, ArrayList<Algorithm>> {
498 6ecf99bb Adam Menz
499 6ecf99bb Adam Menz
                @Override
500 6ecf99bb Adam Menz
                protected ArrayList<Algorithm> doInBackground(Void... arg0) {
501 6ecf99bb Adam Menz
                        return (new AlgorithmManager()).createList(context);
502 6ecf99bb Adam Menz
                }
503 6ecf99bb Adam Menz
504 6ecf99bb Adam Menz
                @Override
505 6ecf99bb Adam Menz
                protected void onPostExecute(ArrayList<Algorithm> result) {
506 6ecf99bb Adam Menz
                        if (result != null && result.size() > 0) {
507 6ecf99bb Adam Menz
                                Algorithm.setAlgorithms(result);
508 6ecf99bb Adam Menz
                                new LoadFlavorsTask().execute((Void[]) null);
509 6ecf99bb Adam Menz
                        } else {
510 403bb53b Adam Menz
                                hideDialog();
511 6ecf99bb Adam Menz
                                showAlert("Login Failure", "There was a problem loading load balancer algorithms.  Please try again.");
512 6ecf99bb Adam Menz
                        }
513 6ecf99bb Adam Menz
                }
514 6ecf99bb Adam Menz
        }
515 6ecf99bb Adam Menz
    
516 aeff0a62 Adam Menz
    private class LoadFlavorsTask extends AsyncTask<Void, Void, ArrayList<Flavor>> {
517 441d5327 Adam Menz
            
518 441d5327 Adam Menz
                @Override
519 aeff0a62 Adam Menz
                protected ArrayList<Flavor> doInBackground(Void... arg0) {
520 aeff0a62 Adam Menz
                        return (new FlavorManager()).createList(true, context);
521 441d5327 Adam Menz
                }
522 441d5327 Adam Menz
            
523 441d5327 Adam Menz
                @Override
524 aeff0a62 Adam Menz
                protected void onPostExecute(ArrayList<Flavor> result) {
525 441d5327 Adam Menz
                        if (result != null && result.size() > 0) {
526 aeff0a62 Adam Menz
                                TreeMap<String, Flavor> flavorMap = new TreeMap<String, Flavor>();
527 441d5327 Adam Menz
                                for (int i = 0; i < result.size(); i++) {
528 aeff0a62 Adam Menz
                                        Flavor flavor = result.get(i);
529 aeff0a62 Adam Menz
                                        flavorMap.put(flavor.getId(), flavor);
530 441d5327 Adam Menz
                                }
531 aeff0a62 Adam Menz
                                Flavor.setFlavors(flavorMap);
532 aeff0a62 Adam Menz
                                hideDialog();
533 aeff0a62 Adam Menz
                                startActivityForResult(tabViewIntent, 187);
534 441d5327 Adam Menz
                        } else {
535 e7534f91 Adam Menz
                                hideDialog();
536 aeff0a62 Adam Menz
                                showAlert("Login Failure", "There was a problem loading server flavors.  Please try again.");
537 441d5327 Adam Menz
                        }
538 441d5327 Adam Menz
                }
539 441d5327 Adam Menz
    }
540 441d5327 Adam Menz
    
541 441d5327 Adam Menz
    private void showAlert(String title, String message) {
542 441d5327 Adam Menz
                AlertDialog alert = new AlertDialog.Builder(this).create();
543 441d5327 Adam Menz
                alert.setTitle(title);
544 441d5327 Adam Menz
                alert.setMessage(message);
545 441d5327 Adam Menz
                alert.setButton("OK", new DialogInterface.OnClickListener() {
546 441d5327 Adam Menz
              public void onClick(DialogInterface dialog, int which) {
547 441d5327 Adam Menz
                return;
548 441d5327 Adam Menz
            } }); 
549 441d5327 Adam Menz
                alert.show();
550 441d5327 Adam Menz
    }
551 0ae79b26 Adam Menz
    
552 0ae79b26 Adam Menz
    private void showToast(String message) {
553 0ae79b26 Adam Menz
                Context context = getApplicationContext();
554 0ae79b26 Adam Menz
                int duration = Toast.LENGTH_SHORT;
555 0ae79b26 Adam Menz
                Toast toast = Toast.makeText(context, message, duration);
556 0ae79b26 Adam Menz
                toast.show();
557 0ae79b26 Adam Menz
    }
558 0ae79b26 Adam Menz
    
559 0ae79b26 Adam Menz
    
560 441d5327 Adam Menz
        
561 441d5327 Adam Menz
                
562 441d5327 Adam Menz
}