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