]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DownloadActivity.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / DownloadActivity.java
index 385933b89f7253c56256ed807f9117df121694eb..b580c4d6b5827eb12a9605ecdcdc91aa51f34085 100755 (executable)
@@ -1,5 +1,10 @@
 package com.hughes.android.dictionary;\r
 \r
+import java.io.File;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.net.URL;\r
 import java.util.concurrent.Executor;\r
 import java.util.concurrent.Executors;\r
 \r
@@ -8,7 +13,6 @@ import android.content.Intent;
 import android.os.Bundle;\r
 import android.os.Handler;\r
 import android.util.Log;\r
-import android.view.View;\r
 import android.widget.ProgressBar;\r
 import android.widget.TextView;\r
 \r
@@ -19,7 +23,7 @@ public class DownloadActivity extends Activity {
 \r
   String source;\r
   String dest;\r
-  \r
+\r
   private final Executor downloadExecutor = Executors.newSingleThreadExecutor();\r
   private final Handler uiHandler = new Handler();\r
 \r
@@ -34,10 +38,10 @@ public class DownloadActivity extends Activity {
       throw new RuntimeException("null source or dest.");\r
     }\r
     setContentView(R.layout.download);\r
-    \r
+\r
     final TextView sourceTextView = (TextView) findViewById(R.id.source);\r
     sourceTextView.setText(source);\r
-    \r
+\r
     final TextView destTextView = (TextView) findViewById(R.id.dest);\r
     destTextView.setText(dest);\r
 \r
@@ -45,37 +49,55 @@ public class DownloadActivity extends Activity {
     progressBar.setIndeterminate(false);\r
     progressBar.setMax(100);\r
 \r
+    final InputStream in;\r
+    final FileOutputStream out;\r
+    \r
+    final File destFile = new File(dest);\r
+    final File destTmpFile;\r
+    try {\r
+      destTmpFile = File.createTempFile("dictionaryDownload", "tmp", destFile.getParentFile());\r
+      final URL uri = new URL(source);\r
+      in = uri.openStream();\r
+      out = new FileOutputStream(destTmpFile);\r
+    } catch (Exception e) {\r
+      Log.e("THAD", "Error downloading file", e);\r
+      setDownloadStatus("Error downloading file: \n" + e.getLocalizedMessage());\r
+      return;\r
+    }\r
+\r
     final Runnable runnable = new Runnable() {\r
       public void run() {\r
-        \r
-        for (int i = 0; i < 100; ++i) {\r
-          \r
-          final int progress = i;\r
-          uiHandler.post(new Runnable() {\r
-            public void run() {\r
-              Log.d("THAD", "Setting progress: " + progress);\r
-              progressBar.setProgress(progress);\r
-            }\r
-          });\r
-          \r
-          try {\r
-            Thread.sleep(100);\r
-          } catch (InterruptedException e) {\r
-            e.printStackTrace();\r
+        try {\r
+          long byteCount = 0;\r
+          int bytesRead;\r
+          final byte[] bytes = new byte[4096];\r
+          while ((bytesRead = in.read(bytes)) != -1) {\r
+            out.write(bytes, 0, bytesRead);\r
+            byteCount += bytesRead;\r
+            setDownloadStatus(String.format("Downloading: %d bytes so far", byteCount));\r
           }\r
+          in.close();\r
+          out.close();\r
+          destFile.delete();\r
+          destTmpFile.renameTo(destFile);\r
+          setDownloadStatus(String.format("Downloaded finished: %d bytes", byteCount));\r
+        } catch (IOException e) {\r
+          Log.e("THAD", "Error downloading file", e);\r
+          setDownloadStatus("Error downloading file: \n" + e.getLocalizedMessage());\r
         }\r
-        \r
-        final TextView downloadComplete = (TextView) findViewById(R.id.downloadComplete);\r
-        uiHandler.post(new Runnable() {\r
-          public void run() {\r
-            progressBar.setProgress(100);\r
-            downloadComplete.setVisibility(View.VISIBLE);\r
-          }\r
-        });\r
-        \r
-      }};\r
+      }\r
+    };\r
+\r
     downloadExecutor.execute(runnable);\r
-    \r
   }\r
-  \r
+\r
+  private void setDownloadStatus(final String status) {\r
+    final TextView downloadStatus = (TextView) findViewById(R.id.downloadStatus);\r
+    uiHandler.post(new Runnable() {\r
+      public void run() {\r
+        downloadStatus.setText(status);\r
+      }\r
+    });\r
+  }\r
+\r
 }\r