From d46f002aa234135ad54768d0bdf15eb9d17428c0 Mon Sep 17 00:00:00 2001 From: brosssh Date: Fri, 4 Jul 2025 18:37:26 +0200 Subject: [PATCH] fix: Showing progress if downloading an APK + minor fixes --- README.md | 4 +- .../apkmirror/APKMirrorDownloader.kt | 46 +++-- src/main/AndroidManifest.xml | 16 -- .../apkmirror/APKMirrorDownloader.kt | 17 -- .../res/drawable/ic_launcher_background.xml | 170 ------------------ .../res/drawable/ic_launcher_foreground.xml | 30 ---- src/main/res/mipmap-anydpi/ic_launcher.xml | 6 - .../res/mipmap-anydpi/ic_launcher_round.xml | 6 - src/main/res/values/strings.xml | 3 - 9 files changed, 23 insertions(+), 275 deletions(-) delete mode 100644 src/main/AndroidManifest.xml delete mode 100644 src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt delete mode 100644 src/main/res/drawable/ic_launcher_background.xml delete mode 100644 src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 src/main/res/mipmap-anydpi/ic_launcher.xml delete mode 100644 src/main/res/mipmap-anydpi/ic_launcher_round.xml delete mode 100644 src/main/res/values/strings.xml diff --git a/README.md b/README.md index 6910822..dc387ee 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ The collection of ReVanced downloaders. - The downloader will now be usable. -### APMMirror Downloader +### APKMirror Downloader This downloader will open an [APKMirror](https://www.apkmirror.com/) page where you can download the apk as you would normally do. If the chosen file is a bundle (.apkm file), the downloader will automatically merge it into a .apk file. @@ -80,7 +80,7 @@ If the chosen file is a bundle (.apkm file), the downloader will automatically m When you get prompted, log in to Google with your account. After that, you will be able to download apps from the Play Store. > [!WARNING] -> Due to technical limitations, it is only possible to download the latest version of the app. If the ReVanced suggested version differs from the latest, the installation will fail. +> Due to technical limitations, it is only possible to download the latest version of the app. If the suggested version differs from the latest, the installation will fail. ## 📚 Everything else diff --git a/downloaders/apkmirror-downloader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt b/downloaders/apkmirror-downloader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt index 270c580..e3cf5d0 100644 --- a/downloaders/apkmirror-downloader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt +++ b/downloaders/apkmirror-downloader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt @@ -15,6 +15,7 @@ import kotlinx.parcelize.Parcelize import java.io.File import java.net.URI import java.nio.file.Files +import java.util.UUID import java.util.zip.ZipFile import kotlin.io.path.ExperimentalPathApi import kotlin.io.path.deleteRecursively @@ -22,8 +23,7 @@ import kotlin.io.path.outputStream @Parcelize class ApkMirrorApp( - val downloadUrl: DownloadUrl, - val packageName: String + val downloadUrl: DownloadUrl ) : Parcelable private object ArscLogger : APKLogger { @@ -56,37 +56,33 @@ val ApkMirrorDownloader = Downloader { ) } - with(Uri.Builder()) { - scheme("https") - authority("www.apkmirror.com") - mapOf( - "post_type" to "app_release", - "searchtype" to "apk", - "s" to (version?.let { "$packageName $it" } ?: packageName), - "bundles%5B%5D" to "apk_files" // bundles[] - ).forEach { (key, value) -> - appendQueryParameter(key, value) - } - - build().toString() - } - }, - packageName = packageName + Uri.Builder() + .scheme("https") + .authority("www.apkmirror.com") + .appendQueryParameter("post_type", "app_release") + .appendQueryParameter("searchtype", "apk") + .appendQueryParameter("s", version?.let { "$packageName $it" } ?: packageName) + .appendQueryParameter("bundles%5B%5D" /* bundles[] */, "apk_files") + .toString() + } ) to version } download { app, outputStream -> val workingDir = Files.createTempDirectory("apkmirror_dl") - val downloadedFile = workingDir.resolve("${app.packageName}.apk").also { - it.outputStream().use { output -> - app.downloadUrl.toDownloadResult().first.copyTo(output) - } - } - try { if (URI(app.downloadUrl.url).path.substringAfterLast('/').endsWith(".apk")) { - Files.copy(downloadedFile, outputStream) + val (inputStream, size) = app.downloadUrl.toDownloadResult() + inputStream.use { + if (size != null) reportSize(size) + it.copyTo(outputStream) + } } else { + val downloadedFile = workingDir.resolve(UUID.randomUUID().toString()).also { + it.outputStream().use { output -> + app.downloadUrl.toDownloadResult().first.copyTo(output) + } + } val xapkWorkingDir = workingDir.resolve("xapk").also { it.toFile().mkdirs() } ZipFile(downloadedFile.toString()).use { zip -> diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml deleted file mode 100644 index 149dc26..0000000 --- a/src/main/AndroidManifest.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt b/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt deleted file mode 100644 index ee82c56..0000000 --- a/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt +++ /dev/null @@ -1,17 +0,0 @@ -@file:Suppress("Unused") - -package app.revanced.manager.plugin.downloader.apkmirror - -import android.net.Uri -import app.revanced.manager.plugin.downloader.webview.WebViewDownloader - -val apkMirrorDownloader = WebViewDownloader { packageName, version -> - Uri.Builder() - .scheme("https") - .authority("www.apkmirror.com") - .appendQueryParameter("post_type", "app_release") - .appendQueryParameter("searchtype", "apk") - .appendQueryParameter("s", version?.let { "$packageName $it" } ?: packageName) - .appendQueryParameter("bundles%5B%5D" /* bundles[] */, "apk_files") - .toString() -} diff --git a/src/main/res/drawable/ic_launcher_background.xml b/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/res/drawable/ic_launcher_foreground.xml b/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d1..0000000 --- a/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/res/mipmap-anydpi/ic_launcher.xml b/src/main/res/mipmap-anydpi/ic_launcher.xml deleted file mode 100644 index 6f3b755..0000000 --- a/src/main/res/mipmap-anydpi/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 6f3b755..0000000 --- a/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml deleted file mode 100644 index 6dae166..0000000 --- a/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - ReVanced Manager: APKMirror downloader - \ No newline at end of file