Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ListServersActivity.java @ af63e739

History | View | Annotate | Download (4.9 kB)

1
/**
2
 * 
3
 */
4
package com.rackspacecloud.android;
5

    
6
import java.util.ArrayList;
7

    
8
import com.rackspace.cloud.servers.api.client.Server;
9
import com.rackspace.cloud.servers.api.client.ServerManager;
10

    
11
import android.app.ListActivity;
12
import android.content.Intent;
13
import android.os.AsyncTask;
14
import android.os.Bundle;
15
import android.view.LayoutInflater;
16
import android.view.Menu;
17
import android.view.MenuInflater;
18
import android.view.MenuItem;
19
import android.view.View;
20
import android.view.ViewGroup;
21
import android.widget.ArrayAdapter;
22
import android.widget.ImageView;
23
import android.widget.ListView;
24
import android.widget.TextView;
25

    
26
/**
27
 * @author mike
28
 *
29
 */
30
public class ListServersActivity extends ListActivity {
31

    
32
        private Server[] servers;
33
        
34
        @Override
35
    public void onCreate(Bundle savedInstanceState) {
36
        super.onCreate(savedInstanceState);
37
        loadServers();        
38
    }
39

    
40
        
41
    protected void onListItemClick(ListView l, View v, int position, long id) {        
42
            Intent viewIntent = new Intent(this, ViewServerActivity.class);
43
            viewIntent.putExtra("server", servers[position]);
44
                startActivityForResult(viewIntent, 55); // arbitrary number; never used again
45

    
46
    }
47
    
48
    private void loadServers() {
49
            displayLoadingCell();
50
            new LoadServersTask().execute((Void[]) null);
51
    }
52
    
53
    private void setServerList(ArrayList<Server> servers) {
54
            String[] serverNames = new String[servers.size()];
55
            this.servers = new Server[servers.size()];
56
            
57
                if (servers != null) {
58
                        for (int i = 0; i < servers.size(); i++) {
59
                                Server server = servers.get(i);
60
                                this.servers[i] = server;
61
                                serverNames[i] = server.getName();
62
                        }
63
                }
64
                
65
                // TODO: throws ClassCastException with empty list
66
                if (serverNames.length == 0) {
67
                        displayNoServersCell();
68
                } else {
69
                        
70
                        getListView().setDividerHeight(1); // restore divider linesan 
71
                        //setListAdapter(new ArrayAdapter<String>(this, R.layout.listservercell, R.id.label, serverNames));
72
                        setListAdapter(new ServerAdapter());
73
                }
74
    }
75
    
76
    private void displayLoadingCell() {
77
            String a[] = new String[1];
78
            a[0] = "Loading...";
79
        setListAdapter(new ArrayAdapter<String>(this, R.layout.loadingcell, R.id.loading_label, a));
80
        getListView().setTextFilterEnabled(true);
81
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
82
        getListView().setItemsCanFocus(false);
83
        //getListView().setClickable(false); // TODO: so it will never be highlighted on touch
84
    }
85
    
86
    private void displayNoServersCell() {
87
            String a[] = new String[1];
88
            a[0] = "No Servers";
89
        setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a));
90
        getListView().setTextFilterEnabled(true);
91
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
92
        //getListView().setClickable(false); // so it will never be highlighted on touch
93
        getListView().setItemsCanFocus(false);
94
    }
95
    
96
    private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> {
97
            
98
                @Override
99
                protected ArrayList<Server> doInBackground(Void... arg0) {
100
                        return (new ServerManager()).createList(true);
101
                }
102
            
103
                @Override
104
                protected void onPostExecute(ArrayList<Server> result) {
105
                        setServerList(result);
106
                }
107
    }
108
    
109
    @Override 
110
    public boolean onCreateOptionsMenu(Menu menu) {
111
                super.onCreateOptionsMenu(menu);
112
                MenuInflater inflater = getMenuInflater();
113
                inflater.inflate(R.menu.servers_list_menu, menu);
114
                return true;
115
        } 
116
    
117
    @Override 
118
    public boolean onOptionsItemSelected(MenuItem item) {
119
                switch (item.getItemId()) {
120
                case R.id.add_server:
121
                        startActivityForResult(new Intent(this, AddServerActivity.class), 56); // arbitrary number; never used again
122
                        return true;
123
                case R.id.refresh:
124
                        loadServers();
125
                return true;
126
                }
127
                return false;
128
        } 
129
        //*/
130
    
131
        class ServerAdapter extends ArrayAdapter<Server> {
132
                ServerAdapter() {
133
                        super(ListServersActivity.this, R.layout.listservercell, servers);
134
                }
135
                
136
                public View getView(int position, View convertView, ViewGroup parent) {
137
                        
138
                        Server server = servers[position];
139
                        LayoutInflater inflater = getLayoutInflater();
140
                        View row = inflater.inflate(R.layout.listservercell, parent, false);
141

    
142
                        TextView label = (TextView) row.findViewById(R.id.label);
143
                        label.setText(server.getName());
144
                        
145
                        TextView sublabel = (TextView) row.findViewById(R.id.sublabel);
146
                        sublabel.setText(server.getFlavor().getName() + " - " + server.getImage().getName());
147
                        
148
                        ImageView icon = (ImageView) row.findViewById(R.id.icon);
149
                        icon.setImageResource(server.getImage().iconResourceId());
150

    
151
                        return(row);
152
                }
153
        }
154
    
155
        @Override
156
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
157
          super.onActivityResult(requestCode, resultCode, data);
158
          
159
          if (resultCode == RESULT_OK) {          
160
                  // a sub-activity kicked back, so we want to refresh the server list
161
                  loadServers();
162
          }
163
        }        
164
}