|
|
@@ -78,7 +78,22 @@ public class DownloadVoiceData extends Activity { |
|
|
|
mAsyncExtract.cancel(true); |
|
|
|
} |
|
|
|
|
|
|
|
private static class AsyncExtract extends AsyncTask<Void, Void, Integer> { |
|
|
|
private static final int PROGRESS_STARTING = 0; |
|
|
|
private static final int PROGRESS_EXTRACTING = 1; |
|
|
|
private static final int PROGRESS_FINISHED = 2; |
|
|
|
|
|
|
|
private static class ExtractProgress { |
|
|
|
long total; |
|
|
|
long progress = 0; |
|
|
|
int state = PROGRESS_STARTING; |
|
|
|
File file; |
|
|
|
|
|
|
|
public ExtractProgress(long total) { |
|
|
|
this.total = total; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static class AsyncExtract extends AsyncTask<Void, ExtractProgress, Integer> { |
|
|
|
private final Context mContext; |
|
|
|
private final int mRawResId; |
|
|
|
private final File mOutput; |
|
|
@@ -97,27 +112,33 @@ public class DownloadVoiceData extends Activity { |
|
|
|
final ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(stream)); |
|
|
|
|
|
|
|
try { |
|
|
|
ExtractProgress progress = new ExtractProgress(stream.available()); |
|
|
|
publishProgress(progress); |
|
|
|
progress.state = PROGRESS_EXTRACTING; |
|
|
|
|
|
|
|
final byte[] buffer = new byte[10240]; |
|
|
|
|
|
|
|
int bytesRead; |
|
|
|
ZipEntry entry; |
|
|
|
|
|
|
|
while (!isCancelled() && ((entry = zipStream.getNextEntry()) != null)) { |
|
|
|
final File outputFile = new File(mOutput, entry.getName()); |
|
|
|
progress.file = new File(mOutput, entry.getName()); |
|
|
|
publishProgress(progress); |
|
|
|
|
|
|
|
if (entry.isDirectory()) { |
|
|
|
outputFile.mkdirs(); |
|
|
|
FileUtils.chmod(outputFile); |
|
|
|
progress.file.mkdirs(); |
|
|
|
FileUtils.chmod(progress.file); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// Ensure the target path exists. |
|
|
|
outputFile.getParentFile().mkdirs(); |
|
|
|
progress.file.getParentFile().mkdirs(); |
|
|
|
|
|
|
|
final FileOutputStream outputStream = new FileOutputStream(outputFile); |
|
|
|
final FileOutputStream outputStream = new FileOutputStream(progress.file); |
|
|
|
try { |
|
|
|
while (!isCancelled() && ((bytesRead = zipStream.read(buffer)) != -1)) { |
|
|
|
outputStream.write(buffer, 0, bytesRead); |
|
|
|
progress.total += bytesRead; |
|
|
|
} |
|
|
|
} finally { |
|
|
|
outputStream.close(); |
|
|
@@ -125,7 +146,7 @@ public class DownloadVoiceData extends Activity { |
|
|
|
zipStream.closeEntry(); |
|
|
|
|
|
|
|
// Make sure the output file is readable. |
|
|
|
FileUtils.chmod(outputFile); |
|
|
|
FileUtils.chmod(progress.file); |
|
|
|
} |
|
|
|
|
|
|
|
final String version = FileUtils.read(mContext.getResources().openRawResource(R.raw.espeakdata_version)); |
|
|
@@ -133,6 +154,8 @@ public class DownloadVoiceData extends Activity { |
|
|
|
|
|
|
|
FileUtils.write(outputFile, version); |
|
|
|
|
|
|
|
progress.state = PROGRESS_FINISHED; |
|
|
|
publishProgress(progress); |
|
|
|
return RESULT_OK; |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |