diff --git a/app/src/main/java/com/topjohnwu/magisk/asyncs/ProcessRepoZip.java b/app/src/main/java/com/topjohnwu/magisk/asyncs/ProcessRepoZip.java index 67f4369c2..9a3e81432 100644 --- a/app/src/main/java/com/topjohnwu/magisk/asyncs/ProcessRepoZip.java +++ b/app/src/main/java/com/topjohnwu/magisk/asyncs/ProcessRepoZip.java @@ -6,6 +6,7 @@ import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Environment; +import android.support.annotation.NonNull; import android.widget.Toast; import com.topjohnwu.magisk.FlashActivity; @@ -21,16 +22,21 @@ import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; -public class ProcessRepoZip extends ParallelTask { +public class ProcessRepoZip extends ParallelTask { private ProgressDialog progressDialog; private boolean mInstall; private String mLink; private File mFile; + private int progress = 0, total; + + private static final int UPDATE_DL_PROG = 0; + private static final int SHOW_PROCESSING = 1; public ProcessRepoZip(Activity context, String link, String filename, boolean install) { super(context); @@ -43,15 +49,23 @@ public class ProcessRepoZip extends ParallelTask { @Override protected void onPreExecute() { Activity activity = getActivity(); - progressDialog = ProgressDialog.show(activity, - activity.getString(R.string.zip_download_title), - activity.getString(R.string.zip_download_msg)); + progressDialog = ProgressDialog.show(activity, activity.getString(R.string.zip_download_title), activity.getString(R.string.zip_download_msg, 0)); } @Override - protected void onProgressUpdate(Void... values) { - progressDialog.setTitle(R.string.zip_process_title); - progressDialog.setMessage(getActivity().getString(R.string.zip_process_msg)); + protected void onProgressUpdate(Object... values) { + int mode = (int) values[0]; + switch (mode) { + case UPDATE_DL_PROG: + int add = (int) values[1]; + progress += add; + progressDialog.setMessage(getActivity().getString(R.string.zip_download_msg, 100 * progress / total)); + break; + case SHOW_PROCESSING: + progressDialog.setTitle(R.string.zip_process_title); + progressDialog.setMessage(getActivity().getString(R.string.zip_process_msg)); + break; + } } @Override @@ -63,7 +77,8 @@ public class ProcessRepoZip extends ParallelTask { // Request zip from Internet HttpURLConnection conn = WebService.request(mLink, null); if (conn == null) return false; - InputStream in = new BufferedInputStream(conn.getInputStream()); + total = conn.getContentLength(); + InputStream in = new ProgressUpdateInputStream(conn.getInputStream()); // Temp files File temp1 = new File(activity.getCacheDir(), "1.zip"); @@ -74,7 +89,7 @@ public class ProcessRepoZip extends ParallelTask { ZipUtils.removeTopFolder(in, temp1); conn.disconnect(); - publishProgress(); + publishProgress(SHOW_PROCESSING); // Then sign the zip for the first time, temp1 -> temp2 ZipUtils.signZip(activity, temp1, temp2, false); @@ -128,8 +143,33 @@ public class ProcessRepoZip extends ParallelTask { } @Override - public ParallelTask exec(Void... voids) { + public ParallelTask exec(Void... voids) { Utils.runWithPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE, () -> super.exec(voids)); return this; } + + private class ProgressUpdateInputStream extends BufferedInputStream { + + ProgressUpdateInputStream(@NonNull InputStream in) { + super(in); + } + + @Override + public synchronized int read() throws IOException { + publishProgress(UPDATE_DL_PROG, 1); + return super.read(); + } + + @Override + public int read(@NonNull byte[] b) throws IOException { + return read(b, 0, b.length); + } + + @Override + public synchronized int read(@NonNull byte[] b, int off, int len) throws IOException { + int read = super.read(b, off, len); + publishProgress(UPDATE_DL_PROG, read); + return read; + } + } } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f5c45383e..d8dd99543 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -99,7 +99,7 @@ Prozessfehler Die zip-Datei ist gespeichert unter:\n[Interner Speicher]%1$s Herunterladen - Lade Zip-Datei herunter… + Lade Zip-Datei herunter (%1$d%%) … Verarbeite Verarbeite Zip-Datei… Bitte Boot-Image auswählen! diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5cdd9cc10..dc64553f0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -99,7 +99,7 @@ Error de proceso El zip es almacenado en:\n[Internal Storage]%1$s Descargando - Descargando el archivo zip … + Descargando el archivo zip (%1$d%%) … Procesando ¡Selecciona manualmente una imagen boot! Nueva actualización de Magisk Manager disponible! diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0e2a11e7e..99d65b660 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -92,7 +92,7 @@ Exécution Veuillez sélectionner l\'image boot manuellement ! Téléchargement - Téléchargement du fichier zip... + Téléchargement du fichier zip (%1$d%%) ... Nouvelle mise à jour Magisk Manager disponible ! Appuyez pour télécharger et installer Mises à jour Magisk diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e62c429d6..f667f4ed7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -98,7 +98,7 @@ Verwerkingsfout De zip is opgeslagen in:\n[Interne opslag]%1$s Downloaden - Zip-bestand downloaden… + Zip-bestand downloaden (%1$d%%) … Verwerken Zip-bestand verwerken… Gelieve handmatig een boot image te selecteren! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index cec5678ab..2ab8744f8 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -101,7 +101,7 @@ Błąd procesu Zip jest przechowywany w:\n[Pamięć Wewnętrzna]%1$s Pobieranie - Pobieranie pliku zip … + Pobieranie pliku zip (%1$d%%) … Przetwarzanie Przetwarzanie pliku zip … Proszę ręcznie wybrać boot image! diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6c7dfbbd7..772bd4db5 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -98,7 +98,7 @@ Ошибка обработки Архив расположен:\n[Внутреннее Хранилище]%1$s Загрузка - Загрузка архива… + Загрузка архива (%1$d%%) … Обработка Обработка архива… Пожалуйста, выберите вручную boot-образ! diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 4209f835b..c90ab4880 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -97,7 +97,7 @@ İşlem hatası Zip şuraya depolandı:\n[Dahili Hafıza]%1$s İndiriliyor - Zip dosyası indiriliyor … + Zip dosyası indiriliyor (%1$d%%) … İşleniyor Zip dosyası işleniyor … Lütfen elle bir boot imajı seçin! diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 900397b22..72110939f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -98,7 +98,7 @@ Кеш репозиторію очищено Ця програма використовує SafetyNet.\nВже опрацьовано MagiskHide за замовчуванням Завантаження - Завантаження zip файлу … + Завантаження zip файлу (%1$d%%) … Помилка опрацювання Архів розташований:\n[Внутрішнє Сховище]%1$s Опрацювання diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 21ddfe9ee..6c4e219b4 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -206,7 +206,7 @@ 更新設定 已補丁 Boot 映像輸出格式 正在下載 - 正在下載 Zip 文件 … + 正在下載 Zip 文件 (%1$d%%) … 選擇已補丁 Boot 映像文件輸出格式\n若要透過 fastboot/download 模式刷入,請選擇 .img 格式;若要透過 ODIN 刷入,則選擇 .img.tar\n 完全解除安裝 還原原廠 boot 映像 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2a4e6c87f..89871cbd2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,7 +101,7 @@ Process error The zip is stored in:\n[Internal Storage]%1$s Downloading - Downloading zip file … + Downloading zip file (%1$d%%) … Processing Processing zip file … Please manually select a boot image!