Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ListServersActivity.java @ 35e7942d

History | View | Annotate | Download (4.9 kB)

1 35e7942d Michael Mayo
/**
2 35e7942d Michael Mayo
 * 
3 35e7942d Michael Mayo
 */
4 35e7942d Michael Mayo
package com.rackspacecloud.android;
5 35e7942d Michael Mayo
6 35e7942d Michael Mayo
import java.util.ArrayList;
7 35e7942d Michael Mayo
8 35e7942d Michael Mayo
import com.rackspace.cloud.servers.api.client.EntityList;
9 35e7942d Michael Mayo
import com.rackspace.cloud.servers.api.client.Server;
10 35e7942d Michael Mayo
import com.rackspace.cloud.servers.api.client.ServerManager;
11 35e7942d Michael Mayo
import com.rackspace.cloud.servers.api.client.http.Authentication;
12 35e7942d Michael Mayo
13 35e7942d Michael Mayo
import android.app.ListActivity;
14 35e7942d Michael Mayo
import android.os.AsyncTask;
15 35e7942d Michael Mayo
import android.os.Bundle;
16 35e7942d Michael Mayo
import android.view.LayoutInflater;
17 35e7942d Michael Mayo
import android.view.View;
18 35e7942d Michael Mayo
import android.view.ViewGroup;
19 35e7942d Michael Mayo
import android.widget.ArrayAdapter;
20 35e7942d Michael Mayo
import android.widget.ImageView;
21 35e7942d Michael Mayo
import android.widget.ListView;
22 35e7942d Michael Mayo
import android.widget.TextView;
23 35e7942d Michael Mayo
24 35e7942d Michael Mayo
/**
25 35e7942d Michael Mayo
 * @author mike
26 35e7942d Michael Mayo
 *
27 35e7942d Michael Mayo
 */
28 35e7942d Michael Mayo
public class ListServersActivity extends ListActivity {
29 35e7942d Michael Mayo
30 35e7942d Michael Mayo
        private Server[] servers;
31 35e7942d Michael Mayo
        
32 35e7942d Michael Mayo
        @Override
33 35e7942d Michael Mayo
    public void onCreate(Bundle savedInstanceState) {
34 35e7942d Michael Mayo
        super.onCreate(savedInstanceState);
35 35e7942d Michael Mayo
        loadServers();        
36 35e7942d Michael Mayo
    }
37 35e7942d Michael Mayo
38 35e7942d Michael Mayo
        
39 35e7942d Michael Mayo
    protected void onListItemClick(ListView l, View v, int position, long id) {        
40 35e7942d Michael Mayo
            //startActivity(new Intent(this, ViewSliceActivity.class));
41 35e7942d Michael Mayo
    }
42 35e7942d Michael Mayo
    
43 35e7942d Michael Mayo
    private void loadServers() {
44 35e7942d Michael Mayo
            displayLoadingCell();
45 35e7942d Michael Mayo
            new LoadServersTask().execute((Void[]) null);
46 35e7942d Michael Mayo
    }
47 35e7942d Michael Mayo
    
48 35e7942d Michael Mayo
    private void setServerList(ArrayList<Server> servers) {
49 35e7942d Michael Mayo
            String[] serverNames = new String[servers.size()];
50 35e7942d Michael Mayo
            this.servers = new Server[servers.size()];
51 35e7942d Michael Mayo
            
52 35e7942d Michael Mayo
                if (servers != null) {
53 35e7942d Michael Mayo
                        for (int i = 0; i < servers.size(); i++) {
54 35e7942d Michael Mayo
                                Server server = servers.get(i);
55 35e7942d Michael Mayo
                                this.servers[i] = server;
56 35e7942d Michael Mayo
                                serverNames[i] = server.getName();
57 35e7942d Michael Mayo
                        }
58 35e7942d Michael Mayo
                }
59 35e7942d Michael Mayo
                
60 35e7942d Michael Mayo
                // TODO: throws ClassCastException with empty list
61 35e7942d Michael Mayo
                if (serverNames.length == 0) {
62 35e7942d Michael Mayo
                        displayNoServersCell();
63 35e7942d Michael Mayo
                } else {
64 35e7942d Michael Mayo
                        
65 35e7942d Michael Mayo
                        getListView().setDividerHeight(1); // restore divider linesan 
66 35e7942d Michael Mayo
                        //setListAdapter(new ArrayAdapter<String>(this, R.layout.listservercell, R.id.label, serverNames));
67 35e7942d Michael Mayo
                        setListAdapter(new ServerAdapter());
68 35e7942d Michael Mayo
                }
69 35e7942d Michael Mayo
    }
70 35e7942d Michael Mayo
    
71 35e7942d Michael Mayo
    private void displayLoadingCell() {
72 35e7942d Michael Mayo
            String a[] = new String[1];
73 35e7942d Michael Mayo
            a[0] = "Loading...";
74 35e7942d Michael Mayo
        setListAdapter(new ArrayAdapter<String>(this, R.layout.loadingcell, R.id.loading_label, a));
75 35e7942d Michael Mayo
        getListView().setTextFilterEnabled(true);
76 35e7942d Michael Mayo
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
77 35e7942d Michael Mayo
        getListView().setItemsCanFocus(false);
78 35e7942d Michael Mayo
        //getListView().setClickable(false); // TODO: so it will never be highlighted on touch
79 35e7942d Michael Mayo
    }
80 35e7942d Michael Mayo
    
81 35e7942d Michael Mayo
    private void displayNoServersCell() {
82 35e7942d Michael Mayo
            String a[] = new String[1];
83 35e7942d Michael Mayo
            a[0] = "No Servers";
84 35e7942d Michael Mayo
        setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a));
85 35e7942d Michael Mayo
        getListView().setTextFilterEnabled(true);
86 35e7942d Michael Mayo
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
87 35e7942d Michael Mayo
        //getListView().setClickable(false); // so it will never be highlighted on touch
88 35e7942d Michael Mayo
        getListView().setItemsCanFocus(false);
89 35e7942d Michael Mayo
    }
90 35e7942d Michael Mayo
    
91 35e7942d Michael Mayo
    private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> {
92 35e7942d Michael Mayo
            
93 35e7942d Michael Mayo
                @Override
94 35e7942d Michael Mayo
                protected ArrayList<Server> doInBackground(Void... arg0) {
95 35e7942d Michael Mayo
                        return (new ServerManager()).createList(true);
96 35e7942d Michael Mayo
                }
97 35e7942d Michael Mayo
            
98 35e7942d Michael Mayo
                @Override
99 35e7942d Michael Mayo
                protected void onPostExecute(ArrayList<Server> result) {
100 35e7942d Michael Mayo
                        setServerList(result);
101 35e7942d Michael Mayo
                }
102 35e7942d Michael Mayo
    }
103 35e7942d Michael Mayo
    
104 35e7942d Michael Mayo
    
105 35e7942d Michael Mayo
    //public void setList() {
106 35e7942d Michael Mayo
            //guiThread.post(new RefreshSlicesListTask(this));
107 35e7942d Michael Mayo
    //}
108 35e7942d Michael Mayo
        
109 35e7942d Michael Mayo
    /*
110 35e7942d Michael Mayo
    @Override 
111 35e7942d Michael Mayo
    public boolean onCreateOptionsMenu(Menu menu) {
112 35e7942d Michael Mayo
                super.onCreateOptionsMenu(menu);
113 35e7942d Michael Mayo
                MenuInflater inflater = getMenuInflater();
114 35e7942d Michael Mayo
                inflater.inflate(R.menu.slices_list_menu, menu);
115 35e7942d Michael Mayo
                return true;
116 35e7942d Michael Mayo
        } 
117 35e7942d Michael Mayo
    
118 35e7942d Michael Mayo
    @Override 
119 35e7942d Michael Mayo
    public boolean onOptionsItemSelected(MenuItem item) {
120 35e7942d Michael Mayo
                switch (item.getItemId()) {
121 35e7942d Michael Mayo
                case R.id.settings:
122 35e7942d Michael Mayo
                        startActivity(new Intent(this, SettingsActivity.class));
123 35e7942d Michael Mayo
                        return true;
124 35e7942d Michael Mayo
                        // More items go here (if any) ...
125 35e7942d Michael Mayo
                case R.id.refresh:
126 35e7942d Michael Mayo
                        Slicehost.setSlices(null);
127 35e7942d Michael Mayo
                        initThreading();
128 35e7942d Michael Mayo
                guiThread.post(updateTask);        
129 35e7942d Michael Mayo
                displayLoadingCell();
130 35e7942d Michael Mayo
                return true;
131 35e7942d Michael Mayo
                case R.id.dns_menu_add_zone:
132 35e7942d Michael Mayo
                        startActivity(new Intent(this, AddZoneActivity.class));
133 35e7942d Michael Mayo
                        return true;
134 35e7942d Michael Mayo
                        // More items go here (if any) ...
135 35e7942d Michael Mayo
                }
136 35e7942d Michael Mayo
                return false;
137 35e7942d Michael Mayo
        } 
138 35e7942d Michael Mayo
        */
139 35e7942d Michael Mayo
    
140 35e7942d Michael Mayo
        class ServerAdapter extends ArrayAdapter<Server> {
141 35e7942d Michael Mayo
                ServerAdapter() {
142 35e7942d Michael Mayo
                        super(ListServersActivity.this, R.layout.listservercell, servers);
143 35e7942d Michael Mayo
                }
144 35e7942d Michael Mayo
                
145 35e7942d Michael Mayo
                public View getView(int position, View convertView, ViewGroup parent) {
146 35e7942d Michael Mayo
                        
147 35e7942d Michael Mayo
                        Server server = servers[position];
148 35e7942d Michael Mayo
                        LayoutInflater inflater = getLayoutInflater();
149 35e7942d Michael Mayo
                        View row = inflater.inflate(R.layout.listservercell, parent, false);
150 35e7942d Michael Mayo
151 35e7942d Michael Mayo
                        TextView label = (TextView) row.findViewById(R.id.label);
152 35e7942d Michael Mayo
                        label.setText(server.getName());
153 35e7942d Michael Mayo
                        
154 35e7942d Michael Mayo
                        TextView sublabel = (TextView) row.findViewById(R.id.sublabel);
155 35e7942d Michael Mayo
                        sublabel.setText(server.getFlavorId() + " - " + server.getImageId());
156 35e7942d Michael Mayo
                        
157 35e7942d Michael Mayo
                        ImageView icon = (ImageView) row.findViewById(R.id.icon);
158 35e7942d Michael Mayo
                        if (position == 0) {
159 35e7942d Michael Mayo
                                icon.setImageResource(R.drawable.ubuntu_icon);
160 35e7942d Michael Mayo
                        } else {
161 35e7942d Michael Mayo
                                icon.setImageResource(R.drawable.centos_icon);
162 35e7942d Michael Mayo
                        }
163 35e7942d Michael Mayo
                        return(row);
164 35e7942d Michael Mayo
                }
165 35e7942d Michael Mayo
        }
166 35e7942d Michael Mayo
    
167 35e7942d Michael Mayo
}