diff --git a/app/src/main/java/com/topjohnwu/magisk/model/download/DownloadService.kt b/app/src/main/java/com/topjohnwu/magisk/model/download/DownloadService.kt
index 82262c1e8..89e3f096b 100644
--- a/app/src/main/java/com/topjohnwu/magisk/model/download/DownloadService.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/model/download/DownloadService.kt
@@ -21,6 +21,7 @@ import com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Magisk
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Module
import com.topjohnwu.magisk.ui.flash.FlashActivity
import com.topjohnwu.magisk.utils.Utils
+import com.topjohnwu.magisk.utils.chooser
import com.topjohnwu.magisk.utils.provide
import java.io.File
import kotlin.random.Random.Default.nextInt
@@ -34,7 +35,7 @@ open class DownloadService : RemoteFileService() {
private val File.type
get() = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(extension)
- .orEmpty()
+ ?: "resource/folder"
override fun onFinished(file: File, subject: DownloadSubject) = when (subject) {
is Magisk -> onFinishedInternal(file, subject)
@@ -77,7 +78,8 @@ open class DownloadService : RemoteFileService() {
file: File,
subject: Magisk
) = when (val conf = subject.configuration) {
- Download -> setContentIntent(fileIntent(subject.fileName))
+ Download -> addAction(0, R.string.download_open_parent, fileParentIntent(subject.fileName))
+ .addAction(0, R.string.download_open_self, fileIntent(subject.fileName))
Uninstall -> setContentIntent(FlashActivity.uninstallIntent(context, file))
is Flash -> setContentIntent(FlashActivity.flashIntent(context, file, conf is Secondary))
is Patch -> setContentIntent(FlashActivity.patchIntent(context, file, conf.fileUri))
@@ -88,7 +90,8 @@ open class DownloadService : RemoteFileService() {
file: File,
subject: Module
) = when (subject.configuration) {
- Download -> setContentIntent(fileIntent(subject.fileName))
+ Download -> addAction(0, R.string.download_open_parent, fileParentIntent(subject.fileName))
+ .addAction(0, R.string.download_open_self, fileIntent(subject.fileName))
is Flash -> setContentIntent(FlashActivity.installIntent(context, file))
else -> this
}
@@ -98,6 +101,11 @@ open class DownloadService : RemoteFileService() {
PendingIntent.getActivity(context, nextInt(), intent, PendingIntent.FLAG_ONE_SHOT)
.let { setContentIntent(it) }
+ @Suppress("ReplaceSingleLineLet")
+ private fun NotificationCompat.Builder.addAction(icon: Int, title: Int, intent: Intent) =
+ PendingIntent.getActivity(context, nextInt(), intent, PendingIntent.FLAG_ONE_SHOT)
+ .let { addAction(icon, getString(title), it) }
+
// ---
private fun moveToDownloads(file: File) {
@@ -131,9 +139,26 @@ open class DownloadService : RemoteFileService() {
)
return Intent()
}
+ return fileIntent(file)
+ }
+
+ private fun fileParentIntent(fileName: String): Intent {
+ val file = fileName.downloadsFile?.parentFile ?: let {
+ Utils.toast(
+ getString(R.string.download_file_folder_error),
+ Toast.LENGTH_LONG
+ )
+ return Intent()
+ }
+ return fileIntent(file)
+ }
+
+ private fun fileIntent(file: File): Intent {
return Intent(Intent.ACTION_VIEW)
.setDataAndType(file.provide(this), file.type)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ .chooser()
}
class Builder {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9842ad7ac..1f188bcfa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,6 +76,8 @@
Injecting installer…
Error downloading file
Unable to fetch parent folder in order to save the downloaded file, check permissions.
+ Show in parent folder
+ Show file
Magisk Update Available!
Magisk Manager Update Available!