diff --git a/app/src/main/java/com/topjohnwu/magisk/model/entity/internal/DownloadDialogData.kt b/app/src/main/java/com/topjohnwu/magisk/model/entity/internal/DownloadDialogData.kt
new file mode 100644
index 0000000000000..075e6eb510ba3
--- /dev/null
+++ b/app/src/main/java/com/topjohnwu/magisk/model/entity/internal/DownloadDialogData.kt
@@ -0,0 +1,12 @@
+package com.topjohnwu.magisk.model.entity.internal
+
+import com.skoumal.teanity.util.KObservableField
+import com.topjohnwu.magisk.Config
+import com.topjohnwu.magisk.model.observer.Observer
+
+class DownloadDialogData(initialValue: String) {
+
+ val text = KObservableField(initialValue)
+ val path = Observer(text) { Config.downloadsFile(text.value)?.absolutePath.orEmpty() }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt
index 5a12d209daa1c..712d334e963f5 100644
--- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt
@@ -8,6 +8,7 @@ import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.core.content.edit
+import androidx.databinding.DataBindingUtil
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
@@ -18,6 +19,8 @@ import com.topjohnwu.magisk.Config
import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.data.database.RepoDatabaseHelper
+import com.topjohnwu.magisk.databinding.CustomDownloadDialogBinding
+import com.topjohnwu.magisk.model.entity.internal.DownloadDialogData
import com.topjohnwu.magisk.ui.base.BasePreferenceFragment
import com.topjohnwu.magisk.utils.*
import com.topjohnwu.magisk.view.dialogs.FingerprintAuthDialog
@@ -88,13 +91,9 @@ class SettingsFragment : BasePreferenceFragment() {
}.setOnPreferenceClickListener { preference ->
activity.withExternalRW {
onSuccess {
- showUrlDialog(Config.downloadPath) {
- Config.downloadsFile(it)?.let { _ ->
- Config.downloadPath = it
- preference.summary = it
- } ?: let {
- Utils.toast(R.string.settings_download_path_error, Toast.LENGTH_SHORT)
- }
+ showDownloadDialog {
+ Config.downloadPath = it
+ preference.summary = it
}
}
}
@@ -297,4 +296,24 @@ class SettingsFragment : BasePreferenceFragment() {
.setOnCancelListener { onCancel() }
.show()
}
+
+ private inline fun showDownloadDialog(
+ initialValue: String = Config.downloadPath,
+ crossinline onSuccess: (String) -> Unit
+ ) {
+ val data = DownloadDialogData(initialValue)
+ val binding: CustomDownloadDialogBinding = DataBindingUtil
+ .inflate(layoutInflater, R.layout.custom_download_dialog, null, false)
+ binding.also { it.data = data }
+
+ AlertDialog.Builder(requireActivity())
+ .setTitle(R.string.settings_download_path_title)
+ .setView(binding.root)
+ .setPositiveButton(R.string.ok) { _, _ ->
+ Config.downloadsFile(data.text.value)?.let { onSuccess(data.text.value) }
+ ?: Utils.toast(R.string.settings_download_path_error, Toast.LENGTH_SHORT)
+ }
+ .setNegativeButton(R.string.close, null)
+ .show()
+ }
}
diff --git a/app/src/main/res/layout/custom_download_dialog.xml b/app/src/main/res/layout/custom_download_dialog.xml
new file mode 100644
index 0000000000000..b41bf5538f88a
--- /dev/null
+++ b/app/src/main/res/layout/custom_download_dialog.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1f188bcfa4ac9..08e22d74d4b88 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -136,6 +136,7 @@
Download Cache
Enables download cache for Magisk and Module zip files.
Download path
+ Files will be saved to %1$s
Clear Repo Cache
Clear the cached information for online repos. This forces the app to refresh online.
Hide Magisk Manager