Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / android / PithosGroupsActivity.java @ 6ba04c48

History | View | Annotate | Download (10.4 kB)

1 856ad13d koutsoub
package com.rackspace.cloud.android;
2 856ad13d koutsoub
3 732d9c2c koutsoub
import java.util.ArrayList;
4 732d9c2c koutsoub
import java.util.HashMap;
5 732d9c2c koutsoub
import java.util.Map;
6 732d9c2c koutsoub
7 ad4d3f12 koutsoub
import org.apache.http.HttpEntity;
8 ad4d3f12 koutsoub
import org.apache.http.HttpResponse;
9 ad4d3f12 koutsoub
10 856ad13d koutsoub
import android.app.Activity;
11 732d9c2c koutsoub
import android.app.AlertDialog;
12 98604824 koutsoub
import android.app.ExpandableListActivity;
13 856ad13d koutsoub
import android.content.Context;
14 732d9c2c koutsoub
import android.content.DialogInterface;
15 732d9c2c koutsoub
import android.graphics.Color;
16 ad4d3f12 koutsoub
import android.os.AsyncTask;
17 856ad13d koutsoub
import android.os.Build;
18 856ad13d koutsoub
import android.os.Bundle;
19 732d9c2c koutsoub
import android.util.Log;
20 732d9c2c koutsoub
import android.view.ContextMenu;
21 732d9c2c koutsoub
import android.view.ContextMenu.ContextMenuInfo;
22 732d9c2c koutsoub
import android.view.Menu;
23 732d9c2c koutsoub
import android.view.MenuInflater;
24 732d9c2c koutsoub
import android.view.MenuItem;
25 732d9c2c koutsoub
import android.view.View;
26 732d9c2c koutsoub
import android.widget.AutoCompleteTextView;
27 732d9c2c koutsoub
import android.widget.EditText;
28 98604824 koutsoub
import android.widget.ExpandableListView;
29 732d9c2c koutsoub
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
30 856ad13d koutsoub
31 856ad13d koutsoub
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
32 ad4d3f12 koutsoub
33 856ad13d koutsoub
import com.rackspace.cloud.android.widget.GroupsListView;
34 856ad13d koutsoub
import com.rackspace.cloud.files.api.client.Container;
35 732d9c2c koutsoub
import com.rackspace.cloud.files.api.client.ContainerManager;
36 732d9c2c koutsoub
import com.rackspace.cloud.files.api.client.ContainerObjectManager;
37 732d9c2c koutsoub
import com.rackspace.cloud.files.api.client.GroupResource;
38 732d9c2c koutsoub
import com.rackspace.cloud.servers.api.client.Account;
39 732d9c2c koutsoub
import com.rackspace.cloud.servers.api.client.CloudServersException;
40 732d9c2c koutsoub
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
41 856ad13d koutsoub
42 ad4d3f12 koutsoub
public class PithosGroupsActivity extends CloudActivity {
43 856ad13d koutsoub
        private Context context;
44 856ad13d koutsoub
        private boolean loading;
45 856ad13d koutsoub
        private GoogleAnalyticsTracker tracker;
46 ad4d3f12 koutsoub
47 856ad13d koutsoub
        @Override
48 856ad13d koutsoub
        public void onCreate(Bundle savedInstanceState) {
49 856ad13d koutsoub
                super.onCreate(savedInstanceState);
50 856ad13d koutsoub
                startTracker();
51 856ad13d koutsoub
                trackPageView(GoogleAnalytics.PAGE_FOLDER);
52 856ad13d koutsoub
                setContentView(R.layout.groups);
53 856ad13d koutsoub
                GroupsListView groupsList = ((GroupsListView) findViewById(R.id.groupsListView));
54 732d9c2c koutsoub
                registerForContextMenu(groupsList);
55 856ad13d koutsoub
                /*
56 856ad13d koutsoub
                 * groupsList.setOnGroupExpandListener(new OnGroupExpandListener() {
57 856ad13d koutsoub
                 * 
58 856ad13d koutsoub
                 * @Override public void onGroupExpand(int groupPosition) {
59 856ad13d koutsoub
                 * GroupResource g = (GroupResource)
60 856ad13d koutsoub
                 * groupsList.getListdapter().getGroup(groupPosition); if(g!=null){
61 856ad13d koutsoub
                 * getGroupUserTask(groupPosition).execute(g.getUri()); }
62 856ad13d koutsoub
                 * 
63 856ad13d koutsoub
                 * } });
64 856ad13d koutsoub
                 */
65 856ad13d koutsoub
        }
66 ad4d3f12 koutsoub
67 732d9c2c koutsoub
        @Override
68 732d9c2c koutsoub
        public boolean onCreateOptionsMenu(Menu menu) {
69 732d9c2c koutsoub
                super.onCreateOptionsMenu(menu);
70 732d9c2c koutsoub
                MenuInflater inflater = getMenuInflater();
71 732d9c2c koutsoub
                inflater.inflate(R.menu.groups_menu, menu);
72 732d9c2c koutsoub
                return true;
73 732d9c2c koutsoub
        }
74 732d9c2c koutsoub
75 732d9c2c koutsoub
        @Override
76 732d9c2c koutsoub
        /*
77 ad4d3f12 koutsoub
         * option performed for delete depends on if you are at the top of a
78 ad4d3f12 koutsoub
         * container or in a folder
79 732d9c2c koutsoub
         */
80 732d9c2c koutsoub
        public boolean onOptionsItemSelected(MenuItem item) {
81 732d9c2c koutsoub
                switch (item.getItemId()) {
82 732d9c2c koutsoub
                case R.id.add_group:
83 732d9c2c koutsoub
                        showNew();
84 732d9c2c koutsoub
                        return true;
85 732d9c2c koutsoub
                default:
86 732d9c2c koutsoub
                        break;
87 ad4d3f12 koutsoub
88 732d9c2c koutsoub
                }
89 732d9c2c koutsoub
                return false;
90 732d9c2c koutsoub
        }
91 ad4d3f12 koutsoub
92 732d9c2c koutsoub
        @Override
93 732d9c2c koutsoub
        public void onCreateContextMenu(ContextMenu menu, View v,
94 732d9c2c koutsoub
                        ContextMenuInfo menuInfo) {
95 732d9c2c koutsoub
                super.onCreateContextMenu(menu, v, menuInfo);
96 ad4d3f12 koutsoub
                ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
97 ad4d3f12 koutsoub
                int type = ExpandableListView
98 ad4d3f12 koutsoub
                                .getPackedPositionType(info.packedPosition);
99 ad4d3f12 koutsoub
                if (type == 1)
100 732d9c2c koutsoub
                        menu.add(1, 2, 3, "Delete");
101 ad4d3f12 koutsoub
                else {
102 98604824 koutsoub
                        menu.add(1, 1, 2, "Add User");
103 732d9c2c koutsoub
                        menu.add(1, 2, 3, "Delete");
104 732d9c2c koutsoub
                }
105 732d9c2c koutsoub
        }
106 ad4d3f12 koutsoub
107 732d9c2c koutsoub
        @Override
108 732d9c2c koutsoub
        public boolean onContextItemSelected(MenuItem item) {
109 732d9c2c koutsoub
                final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item
110 732d9c2c koutsoub
                                .getMenuInfo();
111 98604824 koutsoub
                int groupPos = 0, childPos = 0;
112 ad4d3f12 koutsoub
                int type = ExpandableListView
113 ad4d3f12 koutsoub
                                .getPackedPositionType(info.packedPosition);
114 98604824 koutsoub
                final GroupResource group;
115 98604824 koutsoub
                final String user;
116 98604824 koutsoub
                final GroupsListView groupsList = ((GroupsListView) findViewById(R.id.groupsListView));
117 98604824 koutsoub
                if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
118 ad4d3f12 koutsoub
                        groupPos = ExpandableListView
119 ad4d3f12 koutsoub
                                        .getPackedPositionGroup(info.packedPosition);
120 ad4d3f12 koutsoub
                        childPos = ExpandableListView
121 ad4d3f12 koutsoub
                                        .getPackedPositionChild(info.packedPosition);
122 ad4d3f12 koutsoub
                        group = (GroupResource) groupsList.getGroupsAdapter().getGroup(
123 ad4d3f12 koutsoub
                                        groupPos);
124 ad4d3f12 koutsoub
                        user = (String) groupsList.getGroupsAdapter().getChild(groupPos,
125 ad4d3f12 koutsoub
                                        childPos);
126 ad4d3f12 koutsoub
127 ad4d3f12 koutsoub
                } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
128 ad4d3f12 koutsoub
                        groupPos = ExpandableListView
129 ad4d3f12 koutsoub
                                        .getPackedPositionGroup(info.packedPosition);
130 ad4d3f12 koutsoub
                        group = (GroupResource) groupsList.getGroupsAdapter().getGroup(
131 ad4d3f12 koutsoub
                                        groupPos);
132 ad4d3f12 koutsoub
                        user = null;
133 ad4d3f12 koutsoub
                } else {
134 98604824 koutsoub
                        group = null;
135 98604824 koutsoub
                        user = null;
136 98604824 koutsoub
                }
137 ad4d3f12 koutsoub
                Log.i("GROUPS", "****************************");
138 ad4d3f12 koutsoub
                Log.i("GROUPS", "group:" + groupPos + " child:" + childPos);
139 ad4d3f12 koutsoub
                Log.i("GROUPS", "****************************");
140 ad4d3f12 koutsoub
141 732d9c2c koutsoub
                AlertDialog alertDialog = null;
142 732d9c2c koutsoub
                switch (item.getItemId()) {
143 732d9c2c koutsoub
                // case R.id.new_folder:
144 732d9c2c koutsoub
                // new
145 732d9c2c koutsoub
                // NewFolderDialog(GssClient.this,GssClient.this,(FolderResource)currentResource).show();
146 732d9c2c koutsoub
                // return true;
147 732d9c2c koutsoub
                case 2:
148 ad4d3f12 koutsoub
                        final boolean isUser = user != null;
149 732d9c2c koutsoub
                        alertDialog = new AlertDialog.Builder(this).create();
150 ad4d3f12 koutsoub
                        if (isUser) {
151 98604824 koutsoub
                                alertDialog.setTitle("Delete User");
152 ad4d3f12 koutsoub
                                alertDialog.setMessage("R u sure you want to delete this user?"
153 ad4d3f12 koutsoub
                                                + user);
154 ad4d3f12 koutsoub
                        } else {
155 98604824 koutsoub
                                alertDialog.setTitle("Delete Group");
156 98604824 koutsoub
                                alertDialog
157 ad4d3f12 koutsoub
                                                .setMessage("R u sure you want to delete this group and all its users?"
158 ad4d3f12 koutsoub
                                                                + group.getName());
159 98604824 koutsoub
                        }
160 732d9c2c koutsoub
                        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
161 732d9c2c koutsoub
                                public void onClick(DialogInterface dialog, int which) {
162 ad4d3f12 koutsoub
                                        Map<String, String> headers = new HashMap<String, String>();
163 ad4d3f12 koutsoub
                                        if (isUser) {
164 ad4d3f12 koutsoub
                                                group.getUsers().remove(user);
165 ad4d3f12 koutsoub
                                                new GroupOrUserTask().execute("X-Account-Group-" + group.getName(),
166 ad4d3f12 koutsoub
                                                                group.getUserString());
167 ad4d3f12 koutsoub
                                        } else {
168 ad4d3f12 koutsoub
                                                new GroupOrUserTask().execute("X-Account-Group-" + group.getName(),
169 ad4d3f12 koutsoub
                                                                "~");
170 732d9c2c koutsoub
                                        }
171 732d9c2c koutsoub
                                }
172 732d9c2c koutsoub
                        });
173 732d9c2c koutsoub
                        alertDialog.setButton2("CANCEL",
174 732d9c2c koutsoub
                                        new DialogInterface.OnClickListener() {
175 732d9c2c koutsoub
                                                public void onClick(DialogInterface dialog, int which) {
176 732d9c2c koutsoub
177 732d9c2c koutsoub
                                                }
178 732d9c2c koutsoub
                                        });
179 732d9c2c koutsoub
                        alertDialog.setCancelable(true);
180 732d9c2c koutsoub
                        alertDialog.show();
181 732d9c2c koutsoub
                        return true;
182 732d9c2c koutsoub
                case 1:
183 ad4d3f12 koutsoub
                        final AlertDialog.Builder alert = new AlertDialog.Builder(
184 ad4d3f12 koutsoub
                                        PithosGroupsActivity.this);
185 ad4d3f12 koutsoub
                        alert.setTitle("Add User");
186 ad4d3f12 koutsoub
                        final AutoCompleteTextView input = new AutoCompleteTextView(
187 ad4d3f12 koutsoub
                                        PithosGroupsActivity.this);
188 ad4d3f12 koutsoub
                        input.setTextColor(Color.BLACK);
189 ad4d3f12 koutsoub
                        // input.setAdapter(new
190 ad4d3f12 koutsoub
                        // UserAdapter(GssGroups.this,getDroidApplication().getUserDetails(),
191 ad4d3f12 koutsoub
                        // new ArrayList<String>(),true));
192 ad4d3f12 koutsoub
                        alert.setView(input);
193 ad4d3f12 koutsoub
                        alert.setPositiveButton("Add",
194 ad4d3f12 koutsoub
                                        new DialogInterface.OnClickListener() {
195 ad4d3f12 koutsoub
                                                public void onClick(DialogInterface dialog,
196 ad4d3f12 koutsoub
                                                                int whichButton) {
197 ad4d3f12 koutsoub
                                                        String value = input.getText().toString().trim();
198 ad4d3f12 koutsoub
                                                        new GroupOrUserTask().execute("X-Account-Group-" + group.getName(),
199 ad4d3f12 koutsoub
                                                                        group.getUserString() + value);
200 ad4d3f12 koutsoub
                                                }
201 ad4d3f12 koutsoub
                                        });
202 ad4d3f12 koutsoub
203 ad4d3f12 koutsoub
                        alert.setNegativeButton("Cancel",
204 ad4d3f12 koutsoub
                                        new DialogInterface.OnClickListener() {
205 ad4d3f12 koutsoub
                                                public void onClick(DialogInterface dialog,
206 ad4d3f12 koutsoub
                                                                int whichButton) {
207 ad4d3f12 koutsoub
                                                        dialog.cancel();
208 ad4d3f12 koutsoub
                                                }
209 ad4d3f12 koutsoub
                                        });
210 ad4d3f12 koutsoub
                        alert.show();
211 732d9c2c koutsoub
                        return true;
212 732d9c2c koutsoub
                default:
213 732d9c2c koutsoub
                        return super.onContextItemSelected(item);
214 732d9c2c koutsoub
                }
215 732d9c2c koutsoub
        }
216 732d9c2c koutsoub
        
217 ad4d3f12 koutsoub
        private HttpBundle updateObject( String header, String value) throws CloudServersException{
218 ad4d3f12 koutsoub
                Map<String, String> headers = new HashMap<String, String>();
219 ad4d3f12 koutsoub
220 ad4d3f12 koutsoub
                headers.put(header,value);
221 ad4d3f12 koutsoub
                HttpBundle bundel  = new ContainerObjectManager(
222 ad4d3f12 koutsoub
                                        getApplicationContext()).updateObject(
223 ad4d3f12 koutsoub
                                        null, null, null, "application/json",
224 ad4d3f12 koutsoub
                                        headers, null);
225 ad4d3f12 koutsoub
                return bundel;
226 ad4d3f12 koutsoub
        }
227 ad4d3f12 koutsoub
228 ad4d3f12 koutsoub
        private class GroupOrUserTask extends
229 ad4d3f12 koutsoub
                        AsyncTask<String, Void, HttpBundle> {
230 ad4d3f12 koutsoub
231 ad4d3f12 koutsoub
                private CloudServersException exception;
232 ad4d3f12 koutsoub
233 ad4d3f12 koutsoub
                @Override
234 ad4d3f12 koutsoub
                protected void onPreExecute() {
235 ad4d3f12 koutsoub
                        showDialog();
236 ad4d3f12 koutsoub
                        app.setDownloadingObject(true);
237 ad4d3f12 koutsoub
                }
238 ad4d3f12 koutsoub
239 ad4d3f12 koutsoub
                @Override
240 ad4d3f12 koutsoub
                protected HttpBundle doInBackground(String... arg0) {
241 ad4d3f12 koutsoub
                        HttpBundle bundle = null;
242 ad4d3f12 koutsoub
                        try {
243 ad4d3f12 koutsoub
                                bundle = updateObject(arg0[0], arg0[1]);
244 ad4d3f12 koutsoub
                        } catch (CloudServersException e) {
245 ad4d3f12 koutsoub
                                exception = e;
246 ad4d3f12 koutsoub
                        }
247 ad4d3f12 koutsoub
                        return bundle;
248 ad4d3f12 koutsoub
                }
249 ad4d3f12 koutsoub
250 ad4d3f12 koutsoub
                @Override
251 ad4d3f12 koutsoub
                protected void onPostExecute(HttpBundle bundle) {
252 ad4d3f12 koutsoub
                        hideDialog();
253 ad4d3f12 koutsoub
                        HttpResponse response = bundle.getResponse();
254 ad4d3f12 koutsoub
                        if (response != null) {
255 ad4d3f12 koutsoub
                                int statusCode = response.getStatusLine().getStatusCode();
256 ad4d3f12 koutsoub
                                Log.i("Groups","status:"+statusCode);
257 ad4d3f12 koutsoub
                                if (statusCode == 202) {
258 ad4d3f12 koutsoub
                                        setResult(Activity.RESULT_OK);
259 ecbad159 koutsoub
                                        refresh();
260 ad4d3f12 koutsoub
                                        ((GroupsListView) findViewById(R.id.groupsListView))
261 ad4d3f12 koutsoub
                                        .getGroupsAdapter().notifyDataSetChanged();
262 ad4d3f12 koutsoub
                                        
263 ad4d3f12 koutsoub
                                } else {
264 ad4d3f12 koutsoub
                                        CloudServersException cse = parseCloudServersException(response);
265 ad4d3f12 koutsoub
                                        cse.printStackTrace();
266 ad4d3f12 koutsoub
                                        if ("".equals(cse.getMessage())) {
267 ad4d3f12 koutsoub
                                                showError("There was a problem updating your Groups.",
268 ad4d3f12 koutsoub
                                                                bundle);
269 ad4d3f12 koutsoub
                                        } else {
270 ad4d3f12 koutsoub
                                                showError("There was a problem updating your Groups. "
271 ad4d3f12 koutsoub
                                                                + cse.getMessage(), bundle);
272 ad4d3f12 koutsoub
                                        }
273 ecbad159 koutsoub
                                }
274 ad4d3f12 koutsoub
                        } else if (exception != null) {
275 ad4d3f12 koutsoub
                                showError("There was a problem updating your Groups. "
276 ad4d3f12 koutsoub
                                                + exception.getMessage(), bundle);
277 ecbad159 koutsoub
                        }
278 ecbad159 koutsoub
                        
279 ad4d3f12 koutsoub
                }
280 ad4d3f12 koutsoub
        }
281 ad4d3f12 koutsoub
282 ad4d3f12 koutsoub
        private void showNew() {
283 ad4d3f12 koutsoub
                final AlertDialog.Builder alert = new AlertDialog.Builder(
284 ad4d3f12 koutsoub
                                PithosGroupsActivity.this);
285 ad4d3f12 koutsoub
                alert.setTitle("New Group");
286 ad4d3f12 koutsoub
                final EditText input = new EditText(PithosGroupsActivity.this);
287 ad4d3f12 koutsoub
                alert.setView(input);
288 ad4d3f12 koutsoub
                alert.setPositiveButton("Create",
289 ad4d3f12 koutsoub
                                new DialogInterface.OnClickListener() {
290 ad4d3f12 koutsoub
                                        public void onClick(DialogInterface dialog, int whichButton) {
291 ad4d3f12 koutsoub
                                                String value = input.getText().toString().trim();
292 ad4d3f12 koutsoub
                                                new GroupOrUserTask().execute("X-Account-Group-" + value, "placeholder,");
293 ad4d3f12 koutsoub
294 ad4d3f12 koutsoub
                                        }
295 ad4d3f12 koutsoub
                                });
296 ad4d3f12 koutsoub
297 ecbad159 koutsoub
                alert.setNegativeButton("Cancel",
298 ecbad159 koutsoub
                                new DialogInterface.OnClickListener() {
299 ad4d3f12 koutsoub
                                        public void onClick(DialogInterface dialog, int whichButton) {
300 ad4d3f12 koutsoub
                                                dialog.cancel();
301 ad4d3f12 koutsoub
                                        }
302 ad4d3f12 koutsoub
                                });
303 732d9c2c koutsoub
                alert.show();
304 ad4d3f12 koutsoub
305 732d9c2c koutsoub
        }
306 ad4d3f12 koutsoub
307 ad4d3f12 koutsoub
        protected void refresh() {
308 732d9c2c koutsoub
                try {
309 732d9c2c koutsoub
                        new ContainerManager(getApplicationContext()).createList(true);
310 732d9c2c koutsoub
                } catch (CloudServersException e) {
311 732d9c2c koutsoub
                        // TODO Auto-generated catch block
312 732d9c2c koutsoub
                        e.printStackTrace();
313 732d9c2c koutsoub
                }
314 ad4d3f12 koutsoub
                ((GroupsListView) findViewById(R.id.groupsListView)).getGroupsAdapter()
315 ad4d3f12 koutsoub
                                .notifyDataSetChanged();
316 732d9c2c koutsoub
        }
317 856ad13d koutsoub
318 856ad13d koutsoub
        protected Container getContainer() {
319 856ad13d koutsoub
                return (Container) this.getIntent().getExtras().get("container");
320 856ad13d koutsoub
        }
321 856ad13d koutsoub
322 856ad13d koutsoub
        @Override
323 856ad13d koutsoub
        protected void onSaveInstanceState(Bundle outState) {
324 856ad13d koutsoub
                super.onSaveInstanceState(outState);
325 856ad13d koutsoub
326 856ad13d koutsoub
        }
327 856ad13d koutsoub
328 856ad13d koutsoub
        public void startTracker() {
329 856ad13d koutsoub
                if (!"google_sdk".equals(Build.PRODUCT) && !"sdk".equals(Build.PRODUCT)) {
330 856ad13d koutsoub
                        tracker = GoogleAnalyticsTracker.getInstance();
331 856ad13d koutsoub
                        tracker.start(Config.WEB_PROPERTY_ID, 20, this);
332 856ad13d koutsoub
                }
333 856ad13d koutsoub
        }
334 856ad13d koutsoub
335 856ad13d koutsoub
        public void trackPageView(String page) {
336 856ad13d koutsoub
                if (tracker != null) {
337 856ad13d koutsoub
                        tracker.trackPageView(page);
338 856ad13d koutsoub
                }
339 856ad13d koutsoub
        }
340 856ad13d koutsoub
341 856ad13d koutsoub
        @Override
342 856ad13d koutsoub
        protected void onDestroy() {
343 856ad13d koutsoub
                super.onDestroy();
344 856ad13d koutsoub
                if (tracker != null) {
345 856ad13d koutsoub
                        tracker.stop();
346 856ad13d koutsoub
                }
347 856ad13d koutsoub
        }
348 856ad13d koutsoub
349 856ad13d koutsoub
        public void trackEvent(String category, String action, String label,
350 856ad13d koutsoub
                        int value) {
351 856ad13d koutsoub
                if (tracker != null) {
352 856ad13d koutsoub
                        tracker.trackEvent(category, action, label, value);
353 856ad13d koutsoub
                }
354 856ad13d koutsoub
        }
355 856ad13d koutsoub
356 856ad13d koutsoub
}