1 package com.hughes.android.dictionary;
\r
4 import java.io.FileOutputStream;
\r
5 import java.io.IOException;
\r
6 import java.io.InputStream;
\r
8 import java.util.concurrent.Executor;
\r
9 import java.util.concurrent.Executors;
\r
10 import java.util.concurrent.atomic.AtomicBoolean;
\r
12 import android.app.Activity;
\r
13 import android.content.Intent;
\r
14 import android.os.Bundle;
\r
15 import android.os.Handler;
\r
16 import android.util.Log;
\r
17 import android.widget.ProgressBar;
\r
18 import android.widget.TextView;
\r
20 public class DownloadActivity extends Activity {
\r
22 public static final String SOURCE = "source";
\r
23 public static final String DEST = "dest";
\r
28 private final Executor downloadExecutor = Executors.newSingleThreadExecutor();
\r
29 private final Handler uiHandler = new Handler();
\r
31 final AtomicBoolean stop = new AtomicBoolean(false);
\r
33 /** Called when the activity is first created. */
\r
35 public void onCreate(final Bundle savedInstanceState) {
\r
36 super.onCreate(savedInstanceState);
\r
37 final Intent intent = getIntent();
\r
38 source = intent.getStringExtra(SOURCE);
\r
39 dest = intent.getStringExtra(DEST);
\r
40 if (source == null || dest == null) {
\r
41 throw new RuntimeException("null source or dest.");
\r
43 setContentView(R.layout.download);
\r
45 final TextView sourceTextView = (TextView) findViewById(R.id.source);
\r
46 sourceTextView.setText(source);
\r
48 final TextView destTextView = (TextView) findViewById(R.id.dest);
\r
49 destTextView.setText(dest);
\r
51 final ProgressBar progressBar = (ProgressBar) findViewById(R.id.downloadProgressBar);
\r
52 progressBar.setIndeterminate(false);
\r
53 progressBar.setMax(100);
\r
55 final InputStream in;
\r
56 final FileOutputStream out;
\r
58 final File destFile = new File(dest);
\r
59 final File destTmpFile;
\r
61 destTmpFile = File.createTempFile("dictionaryDownload", "tmp", destFile
\r
63 final URL uri = new URL(source);
\r
64 in = uri.openStream();
\r
65 out = new FileOutputStream(destTmpFile);
\r
66 } catch (Exception e) {
\r
67 Log.e("THAD", "Error downloading file", e);
\r
68 setDownloadStatus("Error downloading file: \n" + e.getLocalizedMessage());
\r
72 final Runnable runnable = new Runnable() {
\r
77 final byte[] bytes = new byte[1024 * 8];
\r
79 while ((bytesRead = in.read(bytes)) != -1 && !stop.get()) {
\r
80 out.write(bytes, 0, bytesRead);
\r
81 byteCount += bytesRead;
\r
82 if (count++ % 20 == 0) {
\r
83 setDownloadStatus(String.format("Downloading: %d bytes so far",
\r
89 if (bytesRead == -1 && !stop.get()) {
\r
91 destTmpFile.renameTo(destFile);
\r
93 Log.d("THAD", "Stopped downloading file.");
\r
95 setDownloadStatus(String.format("Downloaded finished: %d bytes",
\r
97 } catch (IOException e) {
\r
98 Log.e("THAD", "Error downloading file", e);
\r
99 setDownloadStatus("Error downloading file: \n"
\r
100 + e.getLocalizedMessage());
\r
105 downloadExecutor.execute(runnable);
\r
109 protected void onStop() {
\r
114 private void setDownloadStatus(final String status) {
\r
115 final TextView downloadStatus = (TextView) findViewById(R.id.downloadStatus);
\r
116 // final ProgressBar progressBar = (ProgressBar) findViewById(R.id.downloadProgressBar);
\r
117 uiHandler.post(new Runnable() {
\r
118 public void run() {
\r
119 downloadStatus.setText(status);
\r