root / src / com / rackspacecloud / android / ContainerObjectDetails.java @ 6b8dad86
History | View | Annotate | Download (18.9 kB)
1 | 3d6041e8 | Phillip Toohill | package com.rackspacecloud.android; |
---|---|---|---|
2 | 3d6041e8 | Phillip Toohill | |
3 | 51938302 | Adam Menz | import java.io.BufferedOutputStream; |
4 | 51938302 | Adam Menz | import java.io.File; |
5 | 51938302 | Adam Menz | import java.io.FileNotFoundException; |
6 | 51938302 | Adam Menz | import java.io.FileOutputStream; |
7 | 3d6041e8 | Phillip Toohill | import java.io.IOException; |
8 | 3d6041e8 | Phillip Toohill | import java.io.StringReader; |
9 | 3d6041e8 | Phillip Toohill | |
10 | 3d6041e8 | Phillip Toohill | import javax.xml.parsers.FactoryConfigurationError; |
11 | 3d6041e8 | Phillip Toohill | import javax.xml.parsers.ParserConfigurationException; |
12 | 3d6041e8 | Phillip Toohill | import javax.xml.parsers.SAXParser; |
13 | 3d6041e8 | Phillip Toohill | import javax.xml.parsers.SAXParserFactory; |
14 | 3d6041e8 | Phillip Toohill | |
15 | 51938302 | Adam Menz | import org.apache.http.HttpEntity; |
16 | 3d6041e8 | Phillip Toohill | import org.apache.http.HttpResponse; |
17 | 3d6041e8 | Phillip Toohill | import org.apache.http.client.ClientProtocolException; |
18 | 3d6041e8 | Phillip Toohill | import org.apache.http.impl.client.BasicResponseHandler; |
19 | 51938302 | Adam Menz | import org.apache.http.util.EntityUtils; |
20 | 3d6041e8 | Phillip Toohill | import org.xml.sax.InputSource; |
21 | 3d6041e8 | Phillip Toohill | import org.xml.sax.SAXException; |
22 | 3d6041e8 | Phillip Toohill | import org.xml.sax.XMLReader; |
23 | 3d6041e8 | Phillip Toohill | |
24 | 3d6041e8 | Phillip Toohill | import android.app.Activity; |
25 | 3d6041e8 | Phillip Toohill | import android.app.AlertDialog; |
26 | 3d6041e8 | Phillip Toohill | import android.app.Dialog; |
27 | d3ea294b | Adam Menz | import android.app.ProgressDialog; |
28 | b347d5e3 | Chmouel Boudjnah | import android.content.Context; |
29 | 3d6041e8 | Phillip Toohill | import android.content.DialogInterface; |
30 | 82cd98ea | unknown | import android.content.Intent; |
31 | 82cd98ea | unknown | import android.net.Uri; |
32 | 3d6041e8 | Phillip Toohill | import android.os.AsyncTask; |
33 | 3d6041e8 | Phillip Toohill | import android.os.Bundle; |
34 | 51938302 | Adam Menz | import android.os.Environment; |
35 | 006434d8 | Adam Menz | import android.util.Log; |
36 | 3d6041e8 | Phillip Toohill | import android.view.Menu; |
37 | 3d6041e8 | Phillip Toohill | import android.view.MenuInflater; |
38 | 3d6041e8 | Phillip Toohill | import android.view.MenuItem; |
39 | 82cd98ea | unknown | import android.view.View; |
40 | 82cd98ea | unknown | import android.widget.Button; |
41 | 3d6041e8 | Phillip Toohill | import android.widget.TextView; |
42 | 697895bc | Adam Menz | import android.widget.Toast; |
43 | 3d6041e8 | Phillip Toohill | |
44 | 3d6041e8 | Phillip Toohill | import com.rackspace.cloud.files.api.client.ContainerObjectManager; |
45 | 3d6041e8 | Phillip Toohill | import com.rackspace.cloud.files.api.client.ContainerObjects; |
46 | 3d6041e8 | Phillip Toohill | import com.rackspace.cloud.servers.api.client.CloudServersException; |
47 | 32731215 | Adam Menz | import com.rackspace.cloud.servers.api.client.http.HttpBundle; |
48 | 3d6041e8 | Phillip Toohill | import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser; |
49 | 3d6041e8 | Phillip Toohill | |
50 | 3d6041e8 | Phillip Toohill | /**
|
51 | 3d6041e8 | Phillip Toohill | *
|
52 | 3d6041e8 | Phillip Toohill | * @author Phillip Toohill
|
53 | 3d6041e8 | Phillip Toohill | *
|
54 | 3d6041e8 | Phillip Toohill | */
|
55 | 3d6041e8 | Phillip Toohill | |
56 | 6b8dad86 | Adam Menz | //doesn't extend cloud activity because of the complex
|
57 | 6b8dad86 | Adam Menz | //dialog management needed for the listeners
|
58 | 0edf6b39 | Adam Menz | public class ContainerObjectDetails extends GaActivity { |
59 | 3e180b04 | Adam Menz | |
60 | 3d6041e8 | Phillip Toohill | private static final int deleteObject = 0; |
61 | 51938302 | Adam Menz | private final String DOWNLOAD_DIRECTORY = "/RackspaceCloud"; |
62 | 0edf6b39 | Adam Menz | |
63 | 3d6041e8 | Phillip Toohill | private ContainerObjects objects;
|
64 | 3d6041e8 | Phillip Toohill | private String containerNames; |
65 | 3d6041e8 | Phillip Toohill | private String cdnURL; |
66 | 8b432514 | Phillip Toohill | private String cdnEnabled; |
67 | 3d6041e8 | Phillip Toohill | public String LOG = "ViewObject"; |
68 | 6864568a | Phillip Toohill | private int bConver = 1048576; |
69 | 6864568a | Phillip Toohill | private int kbConver = 1024; |
70 | 6864568a | Phillip Toohill | private double megaBytes; |
71 | 6864568a | Phillip Toohill | private double kiloBytes; |
72 | 82cd98ea | unknown | public Button previewButton; |
73 | 51938302 | Adam Menz | public Button downloadButton; |
74 | b347d5e3 | Chmouel Boudjnah | public Context context; |
75 | 3e180b04 | Adam Menz | private boolean displayDialog; |
76 | 51938302 | Adam Menz | private ProgressDialog dialog;
|
77 | 51938302 | Adam Menz | private Boolean isDownloaded; |
78 | 3e180b04 | Adam Menz | private AndroidCloudApplication app;
|
79 | 3e180b04 | Adam Menz | private DeleteObjectListenerTask deleteObjTask;
|
80 | 3e180b04 | Adam Menz | private DownloadObjectListenerTask downloadObjTask;
|
81 | 0edf6b39 | Adam Menz | |
82 | 3e180b04 | Adam Menz | /** Called when the activity is first created. */
|
83 | 3e180b04 | Adam Menz | @Override
|
84 | 3e180b04 | Adam Menz | public void onCreate(Bundle savedInstanceState) { |
85 | 3e180b04 | Adam Menz | super.onCreate(savedInstanceState);
|
86 | 0edf6b39 | Adam Menz | trackPageView(PAGE_STORAGE_OBJECT); |
87 | 0edf6b39 | Adam Menz | |
88 | 3e180b04 | Adam Menz | context = getApplicationContext(); |
89 | 3e180b04 | Adam Menz | |
90 | 3e180b04 | Adam Menz | objects = (ContainerObjects) this.getIntent().getExtras().get("container"); |
91 | 3e180b04 | Adam Menz | containerNames = (String) this.getIntent().getExtras().get("containerNames"); |
92 | 3e180b04 | Adam Menz | cdnURL = (String) this.getIntent().getExtras().get("cdnUrl"); |
93 | 3e180b04 | Adam Menz | cdnEnabled = (String) this.getIntent().getExtras().get("isCdnEnabled"); |
94 | 3e180b04 | Adam Menz | |
95 | 3e180b04 | Adam Menz | |
96 | 3e180b04 | Adam Menz | setContentView(R.layout.viewobject); |
97 | 3e180b04 | Adam Menz | restoreState(savedInstanceState); |
98 | 3e180b04 | Adam Menz | |
99 | 3e180b04 | Adam Menz | } |
100 | 3e180b04 | Adam Menz | |
101 | 3d6041e8 | Phillip Toohill | @Override
|
102 | 3d6041e8 | Phillip Toohill | protected void onSaveInstanceState(Bundle outState) { |
103 | 3d6041e8 | Phillip Toohill | super.onSaveInstanceState(outState);
|
104 | 3d6041e8 | Phillip Toohill | outState.putSerializable("container", objects);
|
105 | 51938302 | Adam Menz | outState.putBoolean("isDownloaded", isDownloaded);
|
106 | 3e180b04 | Adam Menz | outState.putBoolean("displayDialog", displayDialog);
|
107 | 3e180b04 | Adam Menz | |
108 | 3e180b04 | Adam Menz | if(displayDialog){
|
109 | 3e180b04 | Adam Menz | hideDialog(); |
110 | 3e180b04 | Adam Menz | displayDialog = true;
|
111 | 3e180b04 | Adam Menz | } |
112 | 3d6041e8 | Phillip Toohill | } |
113 | 3d6041e8 | Phillip Toohill | |
114 | 3e180b04 | Adam Menz | private void restoreState(Bundle state) { |
115 | 3e180b04 | Adam Menz | |
116 | 3e180b04 | Adam Menz | /*
|
117 | 3e180b04 | Adam Menz | * need reference to the app so you can access curDirFiles
|
118 | 3e180b04 | Adam Menz | * as well as processing status
|
119 | 3e180b04 | Adam Menz | */
|
120 | 3e180b04 | Adam Menz | app = (AndroidCloudApplication)this.getApplication();
|
121 | 51938302 | Adam Menz | |
122 | 3e180b04 | Adam Menz | if (state != null && state.containsKey("displayDialog") && state.getBoolean("displayDialog")) { |
123 | 3e180b04 | Adam Menz | showDialog(); |
124 | 51938302 | Adam Menz | } else {
|
125 | 3e180b04 | Adam Menz | hideDialog(); |
126 | 51938302 | Adam Menz | } |
127 | 3e180b04 | Adam Menz | |
128 | 3e180b04 | Adam Menz | if (state != null && state.containsKey("container")) { |
129 | 3e180b04 | Adam Menz | objects = (ContainerObjects) state.getSerializable("container");
|
130 | 3e180b04 | Adam Menz | } |
131 | 3e180b04 | Adam Menz | loadObjectData(); |
132 | 51938302 | Adam Menz | |
133 | 3e180b04 | Adam Menz | if ( cdnEnabled.equals("true")) { |
134 | 3e180b04 | Adam Menz | this.previewButton = (Button) findViewById(R.id.preview_button); |
135 | 3e180b04 | Adam Menz | previewButton.setOnClickListener(new MyOnClickListener());
|
136 | 3e180b04 | Adam Menz | } else {
|
137 | 3e180b04 | Adam Menz | this.previewButton = (Button) findViewById(R.id.preview_button); |
138 | 3e180b04 | Adam Menz | previewButton.setVisibility(View.GONE);
|
139 | 3e180b04 | Adam Menz | } |
140 | 3e180b04 | Adam Menz | |
141 | 3e180b04 | Adam Menz | if (state != null && state.containsKey("isDownloaded")){ |
142 | 3e180b04 | Adam Menz | isDownloaded = state.getBoolean("isDownloaded");
|
143 | 3e180b04 | Adam Menz | } |
144 | 3e180b04 | Adam Menz | else{
|
145 | 3e180b04 | Adam Menz | isDownloaded = fileIsDownloaded(); |
146 | 3e180b04 | Adam Menz | } |
147 | 3e180b04 | Adam Menz | this.downloadButton = (Button) findViewById(R.id.download_button); |
148 | 3e180b04 | Adam Menz | if ( isDownloaded ) {
|
149 | 3e180b04 | Adam Menz | downloadButton.setText("Open File");
|
150 | 3e180b04 | Adam Menz | } else {
|
151 | 3e180b04 | Adam Menz | downloadButton.setText("Download File");
|
152 | 3e180b04 | Adam Menz | } |
153 | 3e180b04 | Adam Menz | downloadButton.setOnClickListener(new MyOnClickListener());
|
154 | 3e180b04 | Adam Menz | |
155 | 3e180b04 | Adam Menz | if(app.isDeletingObject()){
|
156 | 3e180b04 | Adam Menz | deleteObjTask = new DeleteObjectListenerTask();
|
157 | 3e180b04 | Adam Menz | deleteObjTask.execute(); |
158 | 3e180b04 | Adam Menz | } |
159 | 3e180b04 | Adam Menz | |
160 | 3e180b04 | Adam Menz | if(app.isDownloadingObject()){
|
161 | 3e180b04 | Adam Menz | downloadObjTask = new DownloadObjectListenerTask();
|
162 | 3e180b04 | Adam Menz | downloadObjTask.execute(); |
163 | 3e180b04 | Adam Menz | } |
164 | 3e180b04 | Adam Menz | } |
165 | 3e180b04 | Adam Menz | |
166 | 3e180b04 | Adam Menz | @Override
|
167 | 3e180b04 | Adam Menz | protected void onStart(){ |
168 | 3e180b04 | Adam Menz | super.onStart();
|
169 | 3e180b04 | Adam Menz | if(displayDialog){
|
170 | 3e180b04 | Adam Menz | showDialog(); |
171 | 3e180b04 | Adam Menz | } |
172 | 3e180b04 | Adam Menz | } |
173 | 3e180b04 | Adam Menz | |
174 | 3e180b04 | Adam Menz | |
175 | 3e180b04 | Adam Menz | @Override
|
176 | 3e180b04 | Adam Menz | protected void onStop(){ |
177 | 3e180b04 | Adam Menz | super.onStop();
|
178 | 51938302 | Adam Menz | |
179 | 3e180b04 | Adam Menz | if(displayDialog){
|
180 | 3e180b04 | Adam Menz | hideDialog(); |
181 | 3e180b04 | Adam Menz | displayDialog = true;
|
182 | 3e180b04 | Adam Menz | } |
183 | 82cd98ea | unknown | |
184 | 3e180b04 | Adam Menz | /*
|
185 | 3e180b04 | Adam Menz | * Need to stop running listener task
|
186 | 3e180b04 | Adam Menz | * if we exit
|
187 | 3e180b04 | Adam Menz | */
|
188 | 3e180b04 | Adam Menz | if(deleteObjTask != null){ |
189 | 3e180b04 | Adam Menz | deleteObjTask.cancel(true);
|
190 | 3e180b04 | Adam Menz | } |
191 | 3e180b04 | Adam Menz | |
192 | 3e180b04 | Adam Menz | if(downloadObjTask != null){ |
193 | 3e180b04 | Adam Menz | downloadObjTask.cancel(true);
|
194 | 3e180b04 | Adam Menz | } |
195 | 3e180b04 | Adam Menz | } |
196 | 3e180b04 | Adam Menz | |
197 | 3e180b04 | Adam Menz | |
198 | 3e180b04 | Adam Menz | private void loadObjectData() { |
199 | 3e180b04 | Adam Menz | //Object Name
|
200 | 3e180b04 | Adam Menz | TextView name = (TextView) findViewById(R.id.view_container_name); |
201 | 3e180b04 | Adam Menz | name.setText(objects.getCName().toString()); |
202 | 3e180b04 | Adam Menz | |
203 | 3e180b04 | Adam Menz | //File size
|
204 | 3e180b04 | Adam Menz | if (objects.getBytes() >= bConver) {
|
205 | 6864568a | Phillip Toohill | megaBytes = Math.abs(objects.getBytes()/bConver + 0.2); |
206 | 3e180b04 | Adam Menz | TextView sublabel = (TextView) findViewById(R.id.view_file_bytes); |
207 | 3e180b04 | Adam Menz | sublabel.setText(megaBytes + " MB");
|
208 | 6864568a | Phillip Toohill | } else if (objects.getBytes() >= kbConver){ |
209 | 6864568a | Phillip Toohill | kiloBytes = Math.abs(objects.getBytes()/kbConver + 0.2); |
210 | 3e180b04 | Adam Menz | TextView sublabel = (TextView) findViewById(R.id.view_file_bytes); |
211 | 3e180b04 | Adam Menz | sublabel.setText(kiloBytes + " KB");
|
212 | 6864568a | Phillip Toohill | } else {
|
213 | 3e180b04 | Adam Menz | TextView sublabel = (TextView) findViewById(R.id.view_file_bytes); |
214 | 3e180b04 | Adam Menz | sublabel.setText(objects.getBytes() + " B");
|
215 | 78af992b | unknown | } |
216 | 3e180b04 | Adam Menz | |
217 | 3e180b04 | Adam Menz | //Content Type
|
218 | 3e180b04 | Adam Menz | TextView cType = (TextView) findViewById(R.id.view_content_type); |
219 | 3e180b04 | Adam Menz | cType.setText(objects.getContentType().toString()); |
220 | 3e180b04 | Adam Menz | |
221 | 3e180b04 | Adam Menz | //Last Modification date
|
222 | 3e180b04 | Adam Menz | String strDate = objects.getLastMod();
|
223 | 877f6f58 | Adam Menz | strDate = strDate.substring(0, strDate.indexOf('T')); |
224 | 877f6f58 | Adam Menz | /*
|
225 | 3e180b04 | Adam Menz | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.ssssss");
|
226 | 3e180b04 | Adam Menz | Date dateStr = null;
|
227 | 3e180b04 | Adam Menz | try {
|
228 | 3e180b04 | Adam Menz | dateStr = formatter.parse(strDate);
|
229 | 3e180b04 | Adam Menz | } catch (ParseException e1) {
|
230 | 3e180b04 | Adam Menz | e1.printStackTrace();
|
231 | 3e180b04 | Adam Menz | }
|
232 | 3e180b04 | Adam Menz | String formattedDate = formatter.format(dateStr);
|
233 | 877f6f58 | Adam Menz | |
234 | 3e180b04 | Adam Menz | Date date1 = null;
|
235 | 3e180b04 | Adam Menz | try {
|
236 | 3e180b04 | Adam Menz | date1 = formatter.parse(formattedDate);
|
237 | 3e180b04 | Adam Menz | } catch (ParseException e) {
|
238 | 3e180b04 | Adam Menz | e.printStackTrace();
|
239 | 3e180b04 | Adam Menz | }
|
240 | 3e180b04 | Adam Menz | formatter = new SimpleDateFormat("MMM-dd-yyyy");
|
241 | 3e180b04 | Adam Menz | formattedDate = formatter.format(date1);
|
242 | 877f6f58 | Adam Menz | */
|
243 | 3e180b04 | Adam Menz | TextView lastmod = (TextView) findViewById(R.id.view_file_modification); |
244 | 877f6f58 | Adam Menz | lastmod.setText(strDate); |
245 | 3e180b04 | Adam Menz | |
246 | 3e180b04 | Adam Menz | } |
247 | 3e180b04 | Adam Menz | |
248 | 3e180b04 | Adam Menz | private class MyOnClickListener implements View.OnClickListener { |
249 | 3e180b04 | Adam Menz | @Override
|
250 | 3e180b04 | Adam Menz | public void onClick(View v) { |
251 | 3e180b04 | Adam Menz | if(v.equals(findViewById(R.id.preview_button))){
|
252 | 3e180b04 | Adam Menz | Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse(cdnURL + "/" + objects.getCName())); |
253 | 3e180b04 | Adam Menz | startActivity(viewIntent); |
254 | 78af992b | unknown | } |
255 | 3e180b04 | Adam Menz | /*
|
256 | 3e180b04 | Adam Menz | * need to perform different functions based on if
|
257 | 3e180b04 | Adam Menz | * the file is in the devices filesystem
|
258 | 3e180b04 | Adam Menz | */
|
259 | 3e180b04 | Adam Menz | if(v.equals(findViewById(R.id.download_button))){
|
260 | 3e180b04 | Adam Menz | if(!isDownloaded){
|
261 | 3e180b04 | Adam Menz | if(storageIsReady()){
|
262 | 3e180b04 | Adam Menz | new ContainerObjectDownloadTask().execute();
|
263 | 3e180b04 | Adam Menz | } |
264 | 3e180b04 | Adam Menz | else{
|
265 | 3e180b04 | Adam Menz | showAlert("Error", "Storage not found."); |
266 | 3e180b04 | Adam Menz | } |
267 | 3e180b04 | Adam Menz | } |
268 | 3e180b04 | Adam Menz | else{
|
269 | 3e180b04 | Adam Menz | openFile(); |
270 | 3e180b04 | Adam Menz | } |
271 | 3e180b04 | Adam Menz | } |
272 | 3e180b04 | Adam Menz | } |
273 | 3e180b04 | Adam Menz | } |
274 | 3e180b04 | Adam Menz | |
275 | 3e180b04 | Adam Menz | private void showAlert(String title, String message) { |
276 | 3d6041e8 | Phillip Toohill | AlertDialog alert = new AlertDialog.Builder(this).create(); |
277 | 3d6041e8 | Phillip Toohill | alert.setTitle(title); |
278 | 3d6041e8 | Phillip Toohill | alert.setMessage(message); |
279 | 3d6041e8 | Phillip Toohill | alert.setButton("OK", new DialogInterface.OnClickListener() { |
280 | 3e180b04 | Adam Menz | public void onClick(DialogInterface dialog, int which) { |
281 | 3e180b04 | Adam Menz | return;
|
282 | 3e180b04 | Adam Menz | } }); |
283 | 3d6041e8 | Phillip Toohill | alert.show(); |
284 | 3e180b04 | Adam Menz | } |
285 | 3e180b04 | Adam Menz | //Create the Menu options
|
286 | 3e180b04 | Adam Menz | @Override
|
287 | 3e180b04 | Adam Menz | public boolean onCreateOptionsMenu(Menu menu) { |
288 | 3d6041e8 | Phillip Toohill | super.onCreateOptionsMenu(menu);
|
289 | 3d6041e8 | Phillip Toohill | MenuInflater inflater = getMenuInflater(); |
290 | 3d6041e8 | Phillip Toohill | inflater.inflate(R.menu.container_object_list_menu, menu); |
291 | 3d6041e8 | Phillip Toohill | return true; |
292 | 3d6041e8 | Phillip Toohill | } |
293 | 3e180b04 | Adam Menz | |
294 | 3e180b04 | Adam Menz | @Override
|
295 | 3e180b04 | Adam Menz | public boolean onOptionsItemSelected(MenuItem item) { |
296 | 3d6041e8 | Phillip Toohill | switch (item.getItemId()) {
|
297 | 3d6041e8 | Phillip Toohill | case R.id.delete_object:
|
298 | 3d6041e8 | Phillip Toohill | showDialog(deleteObject); |
299 | 3d6041e8 | Phillip Toohill | return true; |
300 | 3d6041e8 | Phillip Toohill | case R.id.refresh:
|
301 | 3d6041e8 | Phillip Toohill | loadObjectData(); |
302 | 3e180b04 | Adam Menz | return true; |
303 | 3d6041e8 | Phillip Toohill | } |
304 | 3d6041e8 | Phillip Toohill | return false; |
305 | 3d6041e8 | Phillip Toohill | } |
306 | 3e180b04 | Adam Menz | |
307 | 3e180b04 | Adam Menz | @Override
|
308 | 3e180b04 | Adam Menz | protected Dialog onCreateDialog(int id ) { |
309 | 3e180b04 | Adam Menz | switch (id) {
|
310 | 3e180b04 | Adam Menz | case deleteObject:
|
311 | 3e180b04 | Adam Menz | return new AlertDialog.Builder(ContainerObjectDetails.this) |
312 | 3e180b04 | Adam Menz | .setIcon(R.drawable.alert_dialog_icon) |
313 | 3e180b04 | Adam Menz | .setTitle("Delete File")
|
314 | 3e180b04 | Adam Menz | .setMessage("Are you sure you want to delete this file?")
|
315 | 3e180b04 | Adam Menz | .setPositiveButton("Delete File", new DialogInterface.OnClickListener() { |
316 | 3e180b04 | Adam Menz | public void onClick(DialogInterface dialog, int whichButton) { |
317 | 3e180b04 | Adam Menz | // User clicked OK so do some stuff
|
318 | 0edf6b39 | Adam Menz | trackEvent(CATEGORY_FILE, EVENT_DELETE, "", -1); |
319 | 3e180b04 | Adam Menz | new ContainerObjectDeleteTask().execute((Void[]) null); |
320 | 3e180b04 | Adam Menz | } |
321 | 3e180b04 | Adam Menz | }) |
322 | 3e180b04 | Adam Menz | .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { |
323 | 3e180b04 | Adam Menz | public void onClick(DialogInterface dialog, int whichButton) { |
324 | 3e180b04 | Adam Menz | // User clicked Cancel so do some stuff
|
325 | 3e180b04 | Adam Menz | } |
326 | 3e180b04 | Adam Menz | }) |
327 | 3e180b04 | Adam Menz | .create(); |
328 | 3e180b04 | Adam Menz | } |
329 | 3e180b04 | Adam Menz | return null; |
330 | 3e180b04 | Adam Menz | } |
331 | 3e180b04 | Adam Menz | /**
|
332 | 3d6041e8 | Phillip Toohill | * @return the file
|
333 | 3d6041e8 | Phillip Toohill | */
|
334 | 3d6041e8 | Phillip Toohill | public ContainerObjects getViewFile() {
|
335 | 3d6041e8 | Phillip Toohill | return objects;
|
336 | 3d6041e8 | Phillip Toohill | } |
337 | 3d6041e8 | Phillip Toohill | |
338 | 3d6041e8 | Phillip Toohill | /**
|
339 | 3d6041e8 | Phillip Toohill | * @param File the file to set
|
340 | 3d6041e8 | Phillip Toohill | */
|
341 | 3d6041e8 | Phillip Toohill | public void setViewFile(ContainerObjects object) { |
342 | 3d6041e8 | Phillip Toohill | this.objects = object;
|
343 | 3d6041e8 | Phillip Toohill | } |
344 | 3e180b04 | Adam Menz | |
345 | 51938302 | Adam Menz | /*
|
346 | 51938302 | Adam Menz | * returns false if external storage is not avaliable
|
347 | 51938302 | Adam Menz | * (if its mounted, missing, read-only, etc)
|
348 | 51938302 | Adam Menz | * from: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
|
349 | 51938302 | Adam Menz | */
|
350 | 51938302 | Adam Menz | private boolean storageIsReady(){ |
351 | 51938302 | Adam Menz | boolean mExternalStorageAvailable = false; |
352 | 51938302 | Adam Menz | boolean mExternalStorageWriteable = false; |
353 | 51938302 | Adam Menz | String state = Environment.getExternalStorageState();
|
354 | 51938302 | Adam Menz | |
355 | 51938302 | Adam Menz | if (Environment.MEDIA_MOUNTED.equals(state)) {
|
356 | 3e180b04 | Adam Menz | // We can read and write the media
|
357 | 3e180b04 | Adam Menz | mExternalStorageAvailable = mExternalStorageWriteable = true;
|
358 | 51938302 | Adam Menz | } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { |
359 | 3e180b04 | Adam Menz | // We can only read the media
|
360 | 3e180b04 | Adam Menz | mExternalStorageAvailable = true;
|
361 | 3e180b04 | Adam Menz | mExternalStorageWriteable = false;
|
362 | 51938302 | Adam Menz | } else {
|
363 | 3e180b04 | Adam Menz | // Something else is wrong. It may be one of many other states, but all we need
|
364 | 3e180b04 | Adam Menz | // to know is we can neither read nor write
|
365 | 3e180b04 | Adam Menz | mExternalStorageAvailable = mExternalStorageWriteable = false;
|
366 | 51938302 | Adam Menz | } |
367 | 51938302 | Adam Menz | return mExternalStorageAvailable && mExternalStorageWriteable;
|
368 | 51938302 | Adam Menz | } |
369 | 3e180b04 | Adam Menz | |
370 | 51938302 | Adam Menz | private boolean fileIsDownloaded(){ |
371 | 51938302 | Adam Menz | if(storageIsReady()){
|
372 | 51938302 | Adam Menz | String fileName = Environment.getExternalStorageDirectory().getPath() + "/RackspaceCloud/" + objects.getCName(); |
373 | 51938302 | Adam Menz | File f = new File(fileName); |
374 | 51938302 | Adam Menz | return f.isFile();
|
375 | 51938302 | Adam Menz | } |
376 | 51938302 | Adam Menz | return false; |
377 | 51938302 | Adam Menz | } |
378 | 3e180b04 | Adam Menz | |
379 | 51938302 | Adam Menz | private void openFile(){ |
380 | 51938302 | Adam Menz | File object = new File(Environment.getExternalStorageDirectory().getPath() + "/RackspaceCloud/" + objects.getCName()); |
381 | 51938302 | Adam Menz | Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
|
382 | 3e180b04 | Adam Menz | File file = new File(object.getAbsolutePath()); |
383 | 3e180b04 | Adam Menz | String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
|
384 | 3e180b04 | Adam Menz | String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
|
385 | 3e180b04 | Adam Menz | myIntent.setDataAndType(Uri.fromFile(file),mimetype); |
386 | 3e180b04 | Adam Menz | //myIntent.setData(Uri.fromFile(file));
|
387 | 3e180b04 | Adam Menz | try{
|
388 | 3e180b04 | Adam Menz | startActivity(myIntent); |
389 | 3e180b04 | Adam Menz | } |
390 | 3e180b04 | Adam Menz | catch(Exception e){ |
391 | 3e180b04 | Adam Menz | Toast.makeText(this, "Could not open file.", Toast.LENGTH_SHORT).show(); |
392 | 3e180b04 | Adam Menz | } |
393 | 51938302 | Adam Menz | } |
394 | 3e180b04 | Adam Menz | |
395 | 51938302 | Adam Menz | private boolean writeFile(byte[] data){ |
396 | 51938302 | Adam Menz | String directoryName = Environment.getExternalStorageDirectory().getPath() + DOWNLOAD_DIRECTORY;
|
397 | 51938302 | Adam Menz | File f = new File(directoryName); |
398 | 3e180b04 | Adam Menz | |
399 | 51938302 | Adam Menz | if(!f.isDirectory()){
|
400 | 51938302 | Adam Menz | if(!f.mkdir()){
|
401 | 51938302 | Adam Menz | return false; |
402 | 51938302 | Adam Menz | } |
403 | 51938302 | Adam Menz | } |
404 | 3e180b04 | Adam Menz | |
405 | 51938302 | Adam Menz | String filename = directoryName + "/" + objects.getCName(); |
406 | 51938302 | Adam Menz | File object = new File(filename); |
407 | 51938302 | Adam Menz | BufferedOutputStream bos = null; |
408 | 3e180b04 | Adam Menz | |
409 | 51938302 | Adam Menz | try{
|
410 | 51938302 | Adam Menz | FileOutputStream fos = new FileOutputStream(object); |
411 | 51938302 | Adam Menz | bos = new BufferedOutputStream(fos); |
412 | 51938302 | Adam Menz | bos.write(data); |
413 | 51938302 | Adam Menz | } |
414 | 51938302 | Adam Menz | catch(FileNotFoundException e){ |
415 | 51938302 | Adam Menz | e.printStackTrace(); |
416 | 51938302 | Adam Menz | } |
417 | 51938302 | Adam Menz | catch(IOException e){ |
418 | 51938302 | Adam Menz | e.printStackTrace(); |
419 | 51938302 | Adam Menz | } |
420 | 51938302 | Adam Menz | finally{
|
421 | 51938302 | Adam Menz | if(bos != null){ |
422 | 51938302 | Adam Menz | try {
|
423 | 51938302 | Adam Menz | bos.flush(); |
424 | 51938302 | Adam Menz | bos.close(); |
425 | 51938302 | Adam Menz | } catch (IOException e) { |
426 | 51938302 | Adam Menz | // TODO Auto-generated catch block
|
427 | 51938302 | Adam Menz | e.printStackTrace(); |
428 | 51938302 | Adam Menz | } |
429 | 51938302 | Adam Menz | } |
430 | 51938302 | Adam Menz | } |
431 | 51938302 | Adam Menz | return true; |
432 | 51938302 | Adam Menz | } |
433 | 3e180b04 | Adam Menz | |
434 | 3d6041e8 | Phillip Toohill | //Task's
|
435 | 3e180b04 | Adam Menz | |
436 | 3e180b04 | Adam Menz | private CloudServersException parseCloudServersException(HttpResponse response) {
|
437 | 3e180b04 | Adam Menz | CloudServersException cse = new CloudServersException();
|
438 | 3e180b04 | Adam Menz | try {
|
439 | 3e180b04 | Adam Menz | BasicResponseHandler responseHandler = new BasicResponseHandler();
|
440 | 3e180b04 | Adam Menz | String body = responseHandler.handleResponse(response);
|
441 | 3e180b04 | Adam Menz | CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
|
442 | 3e180b04 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
443 | 3e180b04 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
444 | 3e180b04 | Adam Menz | xmlReader.setContentHandler(parser); |
445 | 3e180b04 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
446 | 3e180b04 | Adam Menz | cse = parser.getException(); |
447 | 3e180b04 | Adam Menz | } catch (ClientProtocolException e) {
|
448 | 3e180b04 | Adam Menz | cse = new CloudServersException();
|
449 | 3e180b04 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
450 | 3e180b04 | Adam Menz | } catch (IOException e) { |
451 | 3e180b04 | Adam Menz | cse = new CloudServersException();
|
452 | 3e180b04 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
453 | 3e180b04 | Adam Menz | } catch (ParserConfigurationException e) { |
454 | 3e180b04 | Adam Menz | cse = new CloudServersException();
|
455 | 3e180b04 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
456 | 3e180b04 | Adam Menz | } catch (SAXException e) {
|
457 | 3e180b04 | Adam Menz | cse = new CloudServersException();
|
458 | 3e180b04 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
459 | 3e180b04 | Adam Menz | } catch (FactoryConfigurationError e) { |
460 | 3e180b04 | Adam Menz | cse = new CloudServersException();
|
461 | 3e180b04 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
462 | 3e180b04 | Adam Menz | } |
463 | 3e180b04 | Adam Menz | return cse;
|
464 | 3e180b04 | Adam Menz | } |
465 | 3e180b04 | Adam Menz | |
466 | 3e180b04 | Adam Menz | private void startFileError(String message, HttpBundle bundle){ |
467 | 3e180b04 | Adam Menz | Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
|
468 | 3e180b04 | Adam Menz | viewIntent.putExtra("errorMessage", message);
|
469 | 3e180b04 | Adam Menz | viewIntent.putExtra("response", bundle.getResponseText());
|
470 | 3e180b04 | Adam Menz | viewIntent.putExtra("request", bundle.getCurlRequest());
|
471 | 3e180b04 | Adam Menz | startActivity(viewIntent); |
472 | 3e180b04 | Adam Menz | } |
473 | 3e180b04 | Adam Menz | |
474 | 3e180b04 | Adam Menz | private void showDialog() { |
475 | 3e180b04 | Adam Menz | if(dialog == null || !dialog.isShowing()){ |
476 | 3e180b04 | Adam Menz | displayDialog = true;
|
477 | 3e180b04 | Adam Menz | dialog = ProgressDialog.show(ContainerObjectDetails.this, "", "Loading...", true); |
478 | 3e180b04 | Adam Menz | } |
479 | 3e180b04 | Adam Menz | } |
480 | 3e180b04 | Adam Menz | |
481 | 3e180b04 | Adam Menz | private void hideDialog() { |
482 | 3e180b04 | Adam Menz | if(dialog != null){ |
483 | 3e180b04 | Adam Menz | dialog.dismiss(); |
484 | 3e180b04 | Adam Menz | } |
485 | 3e180b04 | Adam Menz | displayDialog = false;
|
486 | 3e180b04 | Adam Menz | } |
487 | 3e180b04 | Adam Menz | |
488 | 3e180b04 | Adam Menz | private class ContainerObjectDeleteTask extends AsyncTask<Void, Void, HttpBundle> { |
489 | 3e180b04 | Adam Menz | |
490 | 3e180b04 | Adam Menz | private CloudServersException exception;
|
491 | 3e180b04 | Adam Menz | |
492 | 3e180b04 | Adam Menz | protected void onPreExecute(){ |
493 | 3e180b04 | Adam Menz | //dialog = ProgressDialog.show(ContainerObjectDetails.this, "", "Deleting...", true);
|
494 | 3e180b04 | Adam Menz | showDialog(); |
495 | 3e180b04 | Adam Menz | app.setDeleteingObject(true);
|
496 | 3e180b04 | Adam Menz | deleteObjTask = new DeleteObjectListenerTask();
|
497 | 3e180b04 | Adam Menz | deleteObjTask.execute(); |
498 | 3e180b04 | Adam Menz | } |
499 | 3e180b04 | Adam Menz | |
500 | 3e180b04 | Adam Menz | @Override
|
501 | 3e180b04 | Adam Menz | protected HttpBundle doInBackground(Void... arg0) { |
502 | 3e180b04 | Adam Menz | HttpBundle bundle = null;
|
503 | 3e180b04 | Adam Menz | try {
|
504 | 3e180b04 | Adam Menz | bundle = (new ContainerObjectManager(context)).deleteObject(containerNames, objects.getCName() );
|
505 | 3e180b04 | Adam Menz | } catch (CloudServersException e) {
|
506 | 3e180b04 | Adam Menz | exception = e; |
507 | 3e180b04 | Adam Menz | } |
508 | 3e180b04 | Adam Menz | |
509 | 3e180b04 | Adam Menz | return bundle;
|
510 | 3e180b04 | Adam Menz | } |
511 | 3e180b04 | Adam Menz | |
512 | 3e180b04 | Adam Menz | @Override
|
513 | 3e180b04 | Adam Menz | protected void onPostExecute(HttpBundle bundle) { |
514 | 3e180b04 | Adam Menz | //dialog.dismiss();
|
515 | 3e180b04 | Adam Menz | app.setDeleteingObject(false);
|
516 | 3e180b04 | Adam Menz | hideDialog(); |
517 | 3e180b04 | Adam Menz | HttpResponse response = bundle.getResponse(); |
518 | 3e180b04 | Adam Menz | if (response != null) { |
519 | 3e180b04 | Adam Menz | int statusCode = response.getStatusLine().getStatusCode();
|
520 | 3e180b04 | Adam Menz | if (statusCode == 204) { |
521 | 3e180b04 | Adam Menz | //handled by listner
|
522 | 3e180b04 | Adam Menz | } else {
|
523 | 3e180b04 | Adam Menz | CloudServersException cse = parseCloudServersException(response); |
524 | 3e180b04 | Adam Menz | if ("".equals(cse.getMessage())) { |
525 | 3e180b04 | Adam Menz | startFileError("There was a problem deleting your File.", bundle);
|
526 | 3e180b04 | Adam Menz | } else {
|
527 | 3e180b04 | Adam Menz | startFileError("There was a problem deleting your file: " + cse.getMessage(), bundle);
|
528 | 3e180b04 | Adam Menz | } |
529 | 3e180b04 | Adam Menz | } |
530 | 3e180b04 | Adam Menz | } else if (exception != null) { |
531 | 3e180b04 | Adam Menz | startFileError("There was a problem deleting your file: " + exception.getMessage(), bundle);
|
532 | 3e180b04 | Adam Menz | } |
533 | 3e180b04 | Adam Menz | } |
534 | 3e180b04 | Adam Menz | } |
535 | 3e180b04 | Adam Menz | |
536 | 3e180b04 | Adam Menz | private class ContainerObjectDownloadTask extends AsyncTask<Void, Void, HttpBundle> { |
537 | 3e180b04 | Adam Menz | |
538 | 3e180b04 | Adam Menz | private CloudServersException exception;
|
539 | 3e180b04 | Adam Menz | |
540 | 3e180b04 | Adam Menz | @Override
|
541 | 3e180b04 | Adam Menz | protected void onPreExecute(){ |
542 | 3e180b04 | Adam Menz | showDialog(); |
543 | 3e180b04 | Adam Menz | app.setDownloadingObject(true);
|
544 | 3e180b04 | Adam Menz | downloadObjTask = new DownloadObjectListenerTask();
|
545 | 3e180b04 | Adam Menz | downloadObjTask.execute(); |
546 | 3e180b04 | Adam Menz | } |
547 | 3e180b04 | Adam Menz | |
548 | 3e180b04 | Adam Menz | @Override
|
549 | 3e180b04 | Adam Menz | protected HttpBundle doInBackground(Void... arg0) { |
550 | 3e180b04 | Adam Menz | HttpBundle bundle = null;
|
551 | 3e180b04 | Adam Menz | try {
|
552 | 3e180b04 | Adam Menz | bundle = (new ContainerObjectManager(context)).getObject(containerNames, objects.getCName());
|
553 | 3e180b04 | Adam Menz | } catch (CloudServersException e) {
|
554 | 3e180b04 | Adam Menz | exception = e; |
555 | 3e180b04 | Adam Menz | } |
556 | 3e180b04 | Adam Menz | return bundle;
|
557 | 3e180b04 | Adam Menz | } |
558 | 3e180b04 | Adam Menz | |
559 | 3e180b04 | Adam Menz | @Override
|
560 | 3e180b04 | Adam Menz | protected void onPostExecute(HttpBundle bundle) { |
561 | 3e180b04 | Adam Menz | app.setDownloadingObject(false);
|
562 | 3e180b04 | Adam Menz | hideDialog(); |
563 | 3e180b04 | Adam Menz | HttpResponse response = bundle.getResponse(); |
564 | 3e180b04 | Adam Menz | if (response != null) { |
565 | 3e180b04 | Adam Menz | int statusCode = response.getStatusLine().getStatusCode();
|
566 | 3e180b04 | Adam Menz | if (statusCode == 200) { |
567 | 3e180b04 | Adam Menz | setResult(Activity.RESULT_OK); |
568 | 3e180b04 | Adam Menz | HttpEntity entity = response.getEntity(); |
569 | 3e180b04 | Adam Menz | app.setDownloadedEntity(entity); |
570 | 3e180b04 | Adam Menz | /*
|
571 | 3e180b04 | Adam Menz | try {
|
572 | 3e180b04 | Adam Menz | if(writeFile(EntityUtils.toByteArray(entity))){
|
573 | 3e180b04 | Adam Menz | downloadButton.setText("Open File");
|
574 | 3e180b04 | Adam Menz | isDownloaded = true;
|
575 | 3e180b04 | Adam Menz | }
|
576 | 3e180b04 | Adam Menz | else{
|
577 | 3e180b04 | Adam Menz | showAlert("Error", "There was a problem downloading your file.");
|
578 | 3e180b04 | Adam Menz | }
|
579 | 3e180b04 | Adam Menz | |
580 | 3e180b04 | Adam Menz | } catch (IOException e) {
|
581 | 3e180b04 | Adam Menz | showAlert("Error", "There was a problem downloading your file.");
|
582 | 3e180b04 | Adam Menz | e.printStackTrace();
|
583 | 3e180b04 | Adam Menz | }
|
584 | 3e180b04 | Adam Menz | */
|
585 | 3e180b04 | Adam Menz | |
586 | 3e180b04 | Adam Menz | } else {
|
587 | 3e180b04 | Adam Menz | CloudServersException cse = parseCloudServersException(response); |
588 | 3e180b04 | Adam Menz | if ("".equals(cse.getMessage())) { |
589 | 3e180b04 | Adam Menz | startFileError("There was a problem downloading your File.", bundle);
|
590 | 3e180b04 | Adam Menz | } else {
|
591 | 3e180b04 | Adam Menz | startFileError("There was a problem downloading your file: " + cse.getMessage(), bundle);
|
592 | 3e180b04 | Adam Menz | } |
593 | 3e180b04 | Adam Menz | } |
594 | 3e180b04 | Adam Menz | } else if (exception != null) { |
595 | 3e180b04 | Adam Menz | startFileError("There was a problem downloading your file: " + exception.getMessage(), bundle);
|
596 | 3e180b04 | Adam Menz | } |
597 | 3e180b04 | Adam Menz | } |
598 | 3e180b04 | Adam Menz | } |
599 | 3d6041e8 | Phillip Toohill | |
600 | 3e180b04 | Adam Menz | private class DeleteObjectListenerTask extends |
601 | 3e180b04 | Adam Menz | AsyncTask<Void, Void, Void> { |
602 | 3e180b04 | Adam Menz | |
603 | 3e180b04 | Adam Menz | @Override
|
604 | 3e180b04 | Adam Menz | protected Void doInBackground(Void... arg1) { |
605 | 3e180b04 | Adam Menz | |
606 | 3e180b04 | Adam Menz | while(app.isDeletingObject()){
|
607 | 3e180b04 | Adam Menz | // wait for process to finish
|
608 | 3e180b04 | Adam Menz | // or have it be canceled
|
609 | 3e180b04 | Adam Menz | if(deleteObjTask.isCancelled()){
|
610 | 3e180b04 | Adam Menz | return null; |
611 | 3e180b04 | Adam Menz | } |
612 | 3e180b04 | Adam Menz | } |
613 | 3e180b04 | Adam Menz | return null; |
614 | 3e180b04 | Adam Menz | } |
615 | 3e180b04 | Adam Menz | |
616 | 3e180b04 | Adam Menz | /*
|
617 | 3e180b04 | Adam Menz | * when no longer processing, time to load
|
618 | 3e180b04 | Adam Menz | * the new files
|
619 | 3e180b04 | Adam Menz | */
|
620 | 3e180b04 | Adam Menz | @Override
|
621 | 3e180b04 | Adam Menz | protected void onPostExecute(Void arg1) { |
622 | 3e180b04 | Adam Menz | hideDialog(); |
623 | 3e180b04 | Adam Menz | setResult(99);
|
624 | 3e180b04 | Adam Menz | finish(); |
625 | 3e180b04 | Adam Menz | } |
626 | 3e180b04 | Adam Menz | } |
627 | 3e180b04 | Adam Menz | |
628 | 3e180b04 | Adam Menz | private class DownloadObjectListenerTask extends |
629 | 3e180b04 | Adam Menz | AsyncTask<Void, Void, Void> { |
630 | 3e180b04 | Adam Menz | |
631 | 3e180b04 | Adam Menz | @Override
|
632 | 3e180b04 | Adam Menz | protected Void doInBackground(Void... arg1) { |
633 | 3e180b04 | Adam Menz | |
634 | 3e180b04 | Adam Menz | while(app.isDownloadingObject()){
|
635 | 3e180b04 | Adam Menz | // wait for process to finish
|
636 | 3e180b04 | Adam Menz | // or have it be canceled
|
637 | 3e180b04 | Adam Menz | if(downloadObjTask.isCancelled()){
|
638 | 3e180b04 | Adam Menz | return null; |
639 | 3e180b04 | Adam Menz | } |
640 | 3e180b04 | Adam Menz | } |
641 | 3e180b04 | Adam Menz | return null; |
642 | 3e180b04 | Adam Menz | } |
643 | 3e180b04 | Adam Menz | |
644 | 3e180b04 | Adam Menz | /*
|
645 | 3e180b04 | Adam Menz | * when no longer processing, time to load
|
646 | 3e180b04 | Adam Menz | * the new files
|
647 | 3e180b04 | Adam Menz | */
|
648 | 3e180b04 | Adam Menz | @Override
|
649 | 3e180b04 | Adam Menz | protected void onPostExecute(Void arg1) { |
650 | 3e180b04 | Adam Menz | hideDialog(); |
651 | 3e180b04 | Adam Menz | try {
|
652 | 3e180b04 | Adam Menz | Log.d("info", "captin starting to write"); |
653 | 3e180b04 | Adam Menz | if(writeFile(EntityUtils.toByteArray(app.getDownloadedEntity()))){
|
654 | 3e180b04 | Adam Menz | downloadButton.setText("Open File");
|
655 | 3e180b04 | Adam Menz | isDownloaded = true;
|
656 | 3e180b04 | Adam Menz | Log.d("info", "captin wrote"); |
657 | 3e180b04 | Adam Menz | } |
658 | 3e180b04 | Adam Menz | else{
|
659 | 3e180b04 | Adam Menz | showAlert("Error", "There was a problem downloading your file."); |
660 | 3e180b04 | Adam Menz | } |
661 | 3e180b04 | Adam Menz | |
662 | 3e180b04 | Adam Menz | } catch (IOException e) { |
663 | 3e180b04 | Adam Menz | showAlert("Error", "There was a problem downloading your file."); |
664 | 3e180b04 | Adam Menz | e.printStackTrace(); |
665 | 969195cf | Adam Menz | } catch (Exception e) { |
666 | 969195cf | Adam Menz | showAlert("Error", "There was a problem downloading your file."); |
667 | 969195cf | Adam Menz | e.printStackTrace(); |
668 | 3e180b04 | Adam Menz | } |
669 | 3e180b04 | Adam Menz | } |
670 | 3e180b04 | Adam Menz | } |
671 | 3e180b04 | Adam Menz | |
672 | 3e180b04 | Adam Menz | } |