| @@ -101,7 +101,44 @@ public class DownloadVoiceData extends Activity { | |||
| boolean successful = false; | |||
| try { | |||
| extractEntries(zipStream); | |||
| final byte[] buffer = new byte[10240]; | |||
| int bytesRead; | |||
| ZipEntry entry; | |||
| while (!isCancelled() && ((entry = zipStream.getNextEntry()) != null)) { | |||
| final File outputFile = new File(mOutput, entry.getName()); | |||
| mExtractedFiles.add(outputFile); | |||
| if (entry.isDirectory()) { | |||
| outputFile.mkdirs(); | |||
| FileUtils.chmod(outputFile); | |||
| continue; | |||
| } | |||
| // Ensure the target path exists. | |||
| outputFile.getParentFile().mkdirs(); | |||
| final FileOutputStream outputStream = new FileOutputStream(outputFile); | |||
| try { | |||
| while (!isCancelled() && ((bytesRead = zipStream.read(buffer)) != -1)) { | |||
| outputStream.write(buffer, 0, bytesRead); | |||
| } | |||
| } finally { | |||
| outputStream.close(); | |||
| } | |||
| zipStream.closeEntry(); | |||
| // Make sure the output file is readable. | |||
| FileUtils.chmod(outputFile); | |||
| } | |||
| final String version = FileUtils.read(mContext.getResources().openRawResource(R.raw.espeakdata_version)); | |||
| final File outputFile = new File(mOutput, "espeak-data/version"); | |||
| mExtractedFiles.add(outputFile); | |||
| FileUtils.write(outputFile, version); | |||
| successful = true; | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| @@ -121,47 +158,6 @@ public class DownloadVoiceData extends Activity { | |||
| return RESULT_OK; | |||
| } | |||
| private void extractEntries(ZipInputStream zipStream) throws IOException { | |||
| final byte[] buffer = new byte[10240]; | |||
| int bytesRead; | |||
| ZipEntry entry; | |||
| while (!isCancelled() && ((entry = zipStream.getNextEntry()) != null)) { | |||
| final File outputFile = new File(mOutput, entry.getName()); | |||
| mExtractedFiles.add(outputFile); | |||
| if (entry.isDirectory()) { | |||
| outputFile.mkdirs(); | |||
| FileUtils.chmod(outputFile); | |||
| continue; | |||
| } | |||
| // Ensure the target path exists. | |||
| outputFile.getParentFile().mkdirs(); | |||
| final FileOutputStream outputStream = new FileOutputStream(outputFile); | |||
| try { | |||
| while (!isCancelled() && ((bytesRead = zipStream.read(buffer)) != -1)) { | |||
| outputStream.write(buffer, 0, bytesRead); | |||
| } | |||
| } finally { | |||
| outputStream.close(); | |||
| } | |||
| zipStream.closeEntry(); | |||
| // Make sure the output file is readable. | |||
| FileUtils.chmod(outputFile); | |||
| } | |||
| final String version = FileUtils.read(mContext.getResources().openRawResource(R.raw.espeakdata_version)); | |||
| final File outputFile = new File(mOutput, "espeak-data/version"); | |||
| mExtractedFiles.add(outputFile); | |||
| FileUtils.write(outputFile, version); | |||
| } | |||
| private void removeExtractedFiles() { | |||
| for (File extractedFile : mExtractedFiles) { | |||
| if (!extractedFile.isDirectory()) { | |||