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
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
\r
String source;\r
String dest;\r
- \r
+\r
private final Executor downloadExecutor = Executors.newSingleThreadExecutor();\r
private final Handler uiHandler = new Handler();\r
\r
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
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