Revision 038ac9a4 src/com/rackspacecloud/android/ListServersActivity.java

b/src/com/rackspacecloud/android/ListServersActivity.java
28 28

  
29 29
/**
30 30
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
31
 *
31
 * 
32 32
 */
33 33
public class ListServersActivity extends GaListActivity {
34
	
34

  
35 35
	private Server[] servers;
36 36
	private Context context;
37
	
38
	
37

  
39 38
	@Override
40
    public void onCreate(Bundle savedInstanceState) {
41
        super.onCreate(savedInstanceState);
42
        trackPageView(PAGE_SERVERS);
43
        context = getApplicationContext();
44
        restoreState(savedInstanceState);
45
    }
46
	
39
	public void onCreate(Bundle savedInstanceState) {
40
		super.onCreate(savedInstanceState);
41
		trackPageView(PAGE_SERVERS);
42
		context = getApplicationContext();
43
		restoreState(savedInstanceState);
44
	}
45

  
47 46
	@Override
48 47
	protected void onSaveInstanceState(Bundle outState) {
49 48
		super.onSaveInstanceState(outState);
50 49
		outState.putSerializable("servers", servers);
51 50
	}
52 51

  
53
    private void restoreState(Bundle state) {
54
    	if (state != null && state.containsKey("servers") && state.getSerializable("servers") != null) {
55
    		servers = (Server[]) state.getSerializable("servers");
56
    		if (servers.length == 0) {
57
    			displayNoServersCell();
58
    		} else {
59
    			getListView().setDividerHeight(1); // restore divider lines 
60
    			setListAdapter(new ServerAdapter());
61
    		}
62
    	} else {
63
            loadServers();        
64
    	}
65
    }
66
        
67
    protected void onListItemClick(ListView l, View v, int position, long id) {
68
    	if (servers != null && servers.length > 0) {
69
	    	Intent viewIntent = new Intent(this, ViewServerActivity.class);
70
	    	viewIntent.putExtra("server", servers[position]);
71
			startActivityForResult(viewIntent, 55); // arbitrary number; never used again
72
    	}
73
    }
74
    
75
    private void loadServers() {
76
    	displayLoadingCell();
77
    	new LoadServersTask().execute((Void[]) null);
78
    }
79
    
80
    private void setServerList(ArrayList<Server> servers) {
81
    	if (servers == null) {
82
    		servers = new ArrayList<Server>();
83
    	}
84
    	String[] serverNames = new String[servers.size()];
85
    	this.servers = new Server[servers.size()];
86
    	
52
	private void restoreState(Bundle state) {
53
		if (state != null && state.containsKey("servers")
54
				&& state.getSerializable("servers") != null) {
55
			servers = (Server[]) state.getSerializable("servers");
56
			if (servers.length == 0) {
57
				displayNoServersCell();
58
			} else {
59
				getListView().setDividerHeight(1); // restore divider lines
60
				setListAdapter(new ServerAdapter());
61
			}
62
		} else {
63
			loadServers();
64
		}
65
	}
66

  
67
	protected void onListItemClick(ListView l, View v, int position, long id) {
68
		if (servers != null && servers.length > 0) {
69
			Intent viewIntent = new Intent(this, ViewServerActivity.class);
70
			viewIntent.putExtra("server", servers[position]);
71
			startActivityForResult(viewIntent, 55); // arbitrary number; never
72
													// used again
73
		}
74
	}
75

  
76
	private void loadServers() {
77
		displayLoadingCell();
78
		new LoadServersTask().execute((Void[]) null);
79
	}
80

  
81
	private void setServerList(ArrayList<Server> servers) {
82
		if (servers == null) {
83
			servers = new ArrayList<Server>();
84
		}
85
		String[] serverNames = new String[servers.size()];
86
		this.servers = new Server[servers.size()];
87

  
87 88
		if (servers != null) {
88 89
			for (int i = 0; i < servers.size(); i++) {
89 90
				Server server = servers.get(i);
......
91 92
				serverNames[i] = server.getName();
92 93
			}
93 94
		}
94
		
95

  
95 96
		if (serverNames.length == 0) {
96 97
			displayNoServersCell();
97 98
		} else {
98
			getListView().setDividerHeight(1); // restore divider lines 
99
			getListView().setDividerHeight(1); // restore divider lines
99 100
			setListAdapter(new ServerAdapter());
100 101
		}
101
    }
102
    
103
    private void displayLoadingCell() {
104
    	String a[] = new String[1];
105
    	a[0] = "Loading...";
106
        setListAdapter(new ArrayAdapter<String>(this, R.layout.loadingcell, R.id.loading_label, a));
107
        getListView().setTextFilterEnabled(true);
108
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
109
        getListView().setItemsCanFocus(false);
110
    }
111
    
112
    private void displayNoServersCell() {
113
    	String a[] = new String[1];
114
    	a[0] = "No Servers";
115
        setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a));
116
        getListView().setTextFilterEnabled(true);
117
        getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
118
        getListView().setItemsCanFocus(false);
119
    }
120
    
121
    private void showAlert(String title, String message) {
122
    	//Can't create handler inside thread that has not called Looper.prepare()
123
    	//Looper.prepare();
124
    	try {
125
		AlertDialog alert = new AlertDialog.Builder(this).create();
126
		alert.setTitle(title);
127
		alert.setMessage(message);
128
		alert.setButton("OK", new DialogInterface.OnClickListener() {
129
	      public void onClick(DialogInterface dialog, int which) {
130
	        return;
131
	    } }); 
132
		alert.show();
133
    	} catch (Exception e) {
134
    		e.printStackTrace();
135
    	}
136
    }
137
            
138
    private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> {
139
    	
140
    	private CloudServersException exception;
141
    	
102
	}
103

  
104
	private void displayLoadingCell() {
105
		String a[] = new String[1];
106
		a[0] = "Loading...";
107
		setListAdapter(new ArrayAdapter<String>(this, R.layout.loadingcell,
108
				R.id.loading_label, a));
109
		getListView().setTextFilterEnabled(true);
110
		getListView().setDividerHeight(0); // hide the dividers so it won't look
111
											// like a list row
112
		getListView().setItemsCanFocus(false);
113
	}
114

  
115
	private void displayNoServersCell() {
116
		String a[] = new String[1];
117
		a[0] = "No Servers";
118
		setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell,
119
				R.id.no_servers_label, a));
120
		getListView().setTextFilterEnabled(true);
121
		getListView().setDividerHeight(0); // hide the dividers so it won't look
122
											// like a list row
123
		getListView().setItemsCanFocus(false);
124
	}
125

  
126
	private void showAlert(String title, String message) {
127
		// Can't create handler inside thread that has not called
128
		// Looper.prepare()
129
		// Looper.prepare();
130
		try {
131
			AlertDialog alert = new AlertDialog.Builder(this).create();
132
			alert.setTitle(title);
133
			alert.setMessage(message);
134
			alert.setButton("OK", new DialogInterface.OnClickListener() {
135
				public void onClick(DialogInterface dialog, int which) {
136
					return;
137
				}
138
			});
139
			alert.show();
140
		} catch (Exception e) {
141
			e.printStackTrace();
142
		}
143
	}
144

  
145
	private class LoadServersTask extends
146
			AsyncTask<Void, Void, ArrayList<Server>> {
147

  
148
		private CloudServersException exception;
149

  
142 150
		@Override
143 151
		protected ArrayList<Server> doInBackground(Void... arg0) {
144 152
			ArrayList<Server> servers = null;
145 153
			try {
146 154
				servers = (new ServerManager()).createList(true, context);
147 155
			} catch (CloudServersException e) {
148
				exception = e;				
156
				exception = e;
149 157
			}
150 158
			return servers;
151 159
		}
152
    	
160

  
153 161
		@Override
154 162
		protected void onPostExecute(ArrayList<Server> result) {
155 163
			if (exception != null) {
......
157 165
			}
158 166
			setServerList(result);
159 167
		}
160
    }
161
    
162
    @Override 
163
    public boolean onCreateOptionsMenu(Menu menu) {
168
	}
169

  
170
	@Override
171
	public boolean onCreateOptionsMenu(Menu menu) {
164 172
		super.onCreateOptionsMenu(menu);
165 173
		MenuInflater inflater = getMenuInflater();
166 174
		inflater.inflate(R.menu.servers_list_menu, menu);
167 175
		return true;
168
	} 
169
    
170
    @Override 
171
    public boolean onOptionsItemSelected(MenuItem item) {
176
	}
177

  
178
	@Override
179
	public boolean onOptionsItemSelected(MenuItem item) {
172 180
		switch (item.getItemId()) {
173 181
		case R.id.add_server:
174
			startActivityForResult(new Intent(this, AddServerActivity.class), 56); // arbitrary number; never used again
182
			startActivityForResult(new Intent(this, AddServerActivity.class),
183
					56); // arbitrary number; never used again
175 184
			return true;
176 185
		case R.id.refresh:
177 186
			servers = null;
178 187
			loadServers();
179
	        return true;
188
			return true;
180 189
		}
181 190
		return false;
182
	} 
183
	//*/
184
    
191
	}
192

  
193
	// */
194

  
185 195
	class ServerAdapter extends ArrayAdapter<Server> {
186 196
		ServerAdapter() {
187 197
			super(ListServersActivity.this, R.layout.listservercell, servers);
188 198
		}
189
		
199

  
190 200
		public View getView(int position, View convertView, ViewGroup parent) {
191
			
201

  
192 202
			Server server = servers[position];
193 203
			LayoutInflater inflater = getLayoutInflater();
194 204
			View row = inflater.inflate(R.layout.listservercell, parent, false);
195 205

  
196 206
			TextView label = (TextView) row.findViewById(R.id.label);
197 207
			label.setText(server.getName());
198
			
208

  
199 209
			TextView sublabel = (TextView) row.findViewById(R.id.sublabel);
200
			sublabel.setText(server.getFlavor().getName() + " - " + server.getImage().getName());
201
			
210
			sublabel.setText(server.getFlavor().getName() + " - "
211
					+ server.getImage().getName());
212

  
202 213
			ImageView icon = (ImageView) row.findViewById(R.id.icon);
203 214
			icon.setImageResource(server.getImage().iconResourceId());
204 215

  
205
			return(row);
216
			return (row);
206 217
		}
207 218
	}
208
    
219

  
209 220
	@Override
210 221
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
211
	  super.onActivityResult(requestCode, resultCode, data);
212
	  
213
	  if (resultCode == RESULT_OK) {	  
214
		  // a sub-activity kicked back, so we want to refresh the server list
215
		  loadServers();
216
	  }
217
	}	
222
		super.onActivityResult(requestCode, resultCode, data);
223

  
224
		if (resultCode == RESULT_OK) {
225
			// a sub-activity kicked back, so we want to refresh the server list
226
			loadServers();
227
		}
228
	}
218 229
}

Also available in: Unified diff