Replace material-dialogs with Material Components' SY
This commit is contained in:
parent
d4993d1b71
commit
cf54851342
@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.browse.migration
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListController
|
||||
@ -32,15 +32,16 @@ class MigrationMangaDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
|
||||
else ""
|
||||
)
|
||||
).orEmpty()
|
||||
return MaterialDialog(activity!!)
|
||||
.message(text = confirmString)
|
||||
.positiveButton(if (copy) R.string.copy else R.string.migrate) {
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setMessage(confirmString)
|
||||
.setPositiveButton(if (copy) R.string.copy else R.string.migrate) { _, _ ->
|
||||
if (copy) {
|
||||
(targetController as? MigrationListController)?.copyMangas()
|
||||
} else {
|
||||
(targetController as? MigrationListController)?.migrateMangas()
|
||||
}
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
|
@ -13,8 +13,8 @@ import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.bluelinelabs.conductor.changehandler.FadeChangeHandler
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
@ -430,14 +430,14 @@ class MigrationListController(bundle: Bundle? = null) :
|
||||
|
||||
override fun handleBack(): Boolean {
|
||||
activity?.let {
|
||||
MaterialDialog(it).show {
|
||||
title(R.string.stop_migrating)
|
||||
positiveButton(R.string.action_stop) {
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.stop_migrating)
|
||||
.setPositiveButton(R.string.action_stop) { _, _ ->
|
||||
router.popCurrentController()
|
||||
migrationsJob?.cancel()
|
||||
}
|
||||
negativeButton(android.R.string.cancel)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
@ -234,7 +234,8 @@ class SourceController(bundle: Bundle? = null) :
|
||||
}
|
||||
|
||||
private fun addToCategories(source: Source) {
|
||||
val categories = preferences.sourcesTabCategories().get().toList().sortedBy { it.lowercase() }
|
||||
val categories = preferences.sourcesTabCategories().get().sortedBy { it.lowercase() }
|
||||
.toTypedArray()
|
||||
|
||||
if (categories.isEmpty()) {
|
||||
applicationContext?.toast(R.string.no_source_categories)
|
||||
@ -245,16 +246,18 @@ class SourceController(bundle: Bundle? = null) :
|
||||
val sources = preferenceSources.map { it.split("|")[0] }
|
||||
|
||||
if (source.id.toString() in sources) {
|
||||
val preferenceSourcePairs = preferenceSources.map { it.split("|") }.filter { it[0] == source.id.toString() }.map { it[0] to it[1] }.toMutableList()
|
||||
val sourceCategories = preferenceSources
|
||||
.map { item -> item.split("|").let { it.component1() to it.component2() } }
|
||||
.filter { it.first == source.id.toString() }
|
||||
.map { it.second }
|
||||
|
||||
val preselected = preferenceSourcePairs.map { category ->
|
||||
categories.indexOf(category.second)
|
||||
}.toTypedArray()
|
||||
val selection = categories.map { it in sourceCategories }
|
||||
.toBooleanArray()
|
||||
|
||||
ChangeSourceCategoriesDialog(this, source, categories, preselected)
|
||||
ChangeSourceCategoriesDialog(this, source, categories, selection)
|
||||
.showDialog(router)
|
||||
} else {
|
||||
ChangeSourceCategoriesDialog(this, source, categories, emptyArray())
|
||||
ChangeSourceCategoriesDialog(this, source, categories, categories.map { false }.toBooleanArray())
|
||||
.showDialog(router)
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
||||
import eu.kanade.tachiyomi.util.view.snack
|
||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||
import eu.kanade.tachiyomi.widget.EmptyView
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
import exh.log.xLogW
|
||||
import exh.savedsearches.EXHSavedSearch
|
||||
import exh.source.getMainSource
|
||||
@ -205,15 +206,19 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
// EXH -->
|
||||
onSaveClicked = {
|
||||
filterSheet?.context?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.save_search)
|
||||
.input(hintRes = R.string.save_search_hint) { _, searchName ->
|
||||
var searchName = ""
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.save_search)
|
||||
.setTextInput(hint = it.getString(R.string.save_search_hint)) { input ->
|
||||
searchName = input
|
||||
}
|
||||
.setPositiveButton(R.string.action_save) { _, _ ->
|
||||
val oldSavedSearches = presenter.loadSearches()
|
||||
if (searchName.isNotBlank() &&
|
||||
oldSavedSearches.size < MAX_SAVED_SEARCHES
|
||||
) {
|
||||
val newSearches = oldSavedSearches + EXHSavedSearch(
|
||||
searchName.toString().trim(),
|
||||
searchName.trim(),
|
||||
presenter.query,
|
||||
presenter.sourceFilters
|
||||
)
|
||||
@ -221,10 +226,7 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
filterSheet?.setSavedSearches(newSearches)
|
||||
}
|
||||
}
|
||||
.positiveButton(R.string.action_save)
|
||||
.negativeButton(R.string.action_cancel)
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
.setNegativeButton(R.string.action_cancel, null)
|
||||
.show()
|
||||
}
|
||||
},
|
||||
@ -235,11 +237,9 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
|
||||
if (search == null) {
|
||||
filterSheet?.context?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.save_search_failed_to_load)
|
||||
.message(R.string.save_search_failed_to_load_message)
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.save_search_failed_to_load)
|
||||
.setMessage(R.string.save_search_failed_to_load_message)
|
||||
.show()
|
||||
}
|
||||
return@cb
|
||||
@ -267,30 +267,26 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
|
||||
if (search == null || search.name != name) {
|
||||
filterSheet?.context?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.save_search_failed_to_delete)
|
||||
.message(R.string.save_search_failed_to_delete_message)
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.save_search_failed_to_delete)
|
||||
.setMessage(R.string.save_search_failed_to_delete_message)
|
||||
.show()
|
||||
}
|
||||
return@cb
|
||||
}
|
||||
|
||||
filterSheet?.context?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.save_search_delete)
|
||||
.message(text = it.getString(R.string.save_search_delete_message, search.name))
|
||||
.positiveButton(R.string.action_cancel)
|
||||
.negativeButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.save_search_delete)
|
||||
.setMessage(it.getString(R.string.save_search_delete_message, search.name))
|
||||
.setPositiveButton(R.string.action_cancel, null)
|
||||
.setNegativeButton(android.R.string.ok) { _, _ ->
|
||||
val newSearches = savedSearches.filterIndexed { index, _ ->
|
||||
index != indexToDelete
|
||||
}
|
||||
presenter.saveSearches(newSearches)
|
||||
filterSheet?.setSavedSearches(newSearches)
|
||||
}
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import android.view.View
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@ -216,11 +216,9 @@ open class IndexController :
|
||||
|
||||
if (search == null) {
|
||||
filterSheet?.context?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.save_search_failed_to_load)
|
||||
.message(R.string.save_search_failed_to_load_message)
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.save_search_failed_to_load)
|
||||
.setMessage(R.string.save_search_failed_to_load_message)
|
||||
.show()
|
||||
}
|
||||
return@cb
|
||||
|
@ -10,6 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.timepicker.MaterialTimePicker
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.SelectableAdapter
|
||||
@ -21,6 +22,8 @@ import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
||||
import exh.util.hours
|
||||
import exh.util.minutes
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.ExperimentalTime
|
||||
|
||||
@ -34,7 +37,6 @@ class BiometricTimesController :
|
||||
ActionMode.Callback,
|
||||
FlexibleAdapter.OnItemClickListener,
|
||||
FlexibleAdapter.OnItemLongClickListener,
|
||||
BiometricTimesCreateDialog.Listener,
|
||||
UndoHelper.OnActionListener {
|
||||
|
||||
/**
|
||||
@ -97,7 +99,7 @@ class BiometricTimesController :
|
||||
fab.setText(R.string.action_add)
|
||||
fab.setIconResource(R.drawable.ic_add_24dp)
|
||||
fab.setOnClickListener {
|
||||
BiometricTimesCreateDialog(this@BiometricTimesController).showDialog(router, null)
|
||||
showTimePicker()
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,15 +300,19 @@ class BiometricTimesController :
|
||||
activity?.toast(R.string.biometric_lock_time_conflicts)
|
||||
}
|
||||
|
||||
override fun startNextDialog(startTime: Duration?) {
|
||||
if (startTime != null) {
|
||||
BiometricTimesCreateDialog(this@BiometricTimesController, startTime).showDialog(router, null)
|
||||
} else activity?.toast(R.string.biometric_lock_invalid_time_selected)
|
||||
}
|
||||
|
||||
override fun createTimeRange(startTime: Duration?, endTime: Duration?) {
|
||||
if (startTime != null && endTime != null) {
|
||||
presenter.createTimeRange(TimeRange(startTime, endTime))
|
||||
} else activity?.toast(R.string.biometric_lock_invalid_time_selected)
|
||||
fun showTimePicker(startTime: Duration? = null) {
|
||||
val picker = MaterialTimePicker.Builder()
|
||||
.setTitleText(if (startTime == null) R.string.biometric_lock_start_time else R.string.biometric_lock_end_time)
|
||||
.setInputMode(MaterialTimePicker.INPUT_MODE_CLOCK)
|
||||
.build()
|
||||
picker.addOnPositiveButtonClickListener {
|
||||
val timeRange = picker.hour.hours + picker.minute.minutes
|
||||
if (startTime != null) {
|
||||
presenter.createTimeRange(TimeRange(startTime, timeRange))
|
||||
} else {
|
||||
showTimePicker(timeRange)
|
||||
}
|
||||
}
|
||||
picker.show((activity as MainActivity).supportFragmentManager, null)
|
||||
}
|
||||
}
|
||||
|
@ -1,73 +0,0 @@
|
||||
package eu.kanade.tachiyomi.ui.category.biometric
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.datetime.timePicker
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import exh.log.xLogD
|
||||
import exh.util.hours
|
||||
import exh.util.minutes
|
||||
import java.util.Calendar
|
||||
import kotlin.time.Duration
|
||||
|
||||
/**
|
||||
* Dialog to create a new category for the library.
|
||||
*/
|
||||
class BiometricTimesCreateDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
|
||||
where T : Controller, T : BiometricTimesCreateDialog.Listener {
|
||||
|
||||
/**
|
||||
* Name of the new category. Value updated with each input from the user.
|
||||
*/
|
||||
private var startTime: Duration? = null
|
||||
|
||||
private var endTime: Duration? = null
|
||||
|
||||
constructor(target: T) : this() {
|
||||
targetController = target
|
||||
}
|
||||
|
||||
constructor(target: T, startTime: Duration) : this() {
|
||||
targetController = target
|
||||
this.startTime = startTime
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when creating the dialog for this controller.
|
||||
*
|
||||
* @param savedViewState The saved state of this dialog.
|
||||
* @return a new dialog instance.
|
||||
*/
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(if (startTime == null) R.string.biometric_lock_start_time else R.string.biometric_lock_end_time)
|
||||
.timePicker(show24HoursView = false) { _, datetime ->
|
||||
val hour = datetime.get(Calendar.HOUR_OF_DAY)
|
||||
xLogD(hour)
|
||||
val minute = datetime.get(Calendar.MINUTE)
|
||||
xLogD(minute)
|
||||
if (hour !in 0..24 || minute !in 0..60) return@timePicker
|
||||
if (startTime != null) {
|
||||
endTime = hour.hours + minute.minutes
|
||||
} else {
|
||||
startTime = hour.hours + minute.minutes
|
||||
}
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
if (endTime != null) {
|
||||
(targetController as? Listener)?.createTimeRange(startTime, endTime)
|
||||
} else {
|
||||
(targetController as? Listener)?.startNextDialog(startTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
fun startNextDialog(startTime: Duration?)
|
||||
fun createTimeRange(startTime: Duration?, endTime: Duration?)
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
@ -230,10 +230,10 @@ class SortTagController :
|
||||
}
|
||||
|
||||
private fun helpDialog(hasPositive: Boolean = false) {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.add_tag)
|
||||
.message(R.string.action_add_tags_message)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.add_tag)
|
||||
.setMessage(R.string.action_add_tags_message)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
if (hasPositive) {
|
||||
SortTagCreateDialog(this@SortTagController).showDialog(router, null)
|
||||
}
|
||||
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.category.genre
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
|
||||
/**
|
||||
* Dialog to create a new category for the library.
|
||||
@ -30,18 +30,19 @@ class SortTagCreateDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
|
||||
* @return a new dialog instance.
|
||||
*/
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_add_category)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.input(
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_add_category)
|
||||
.setTextInput(
|
||||
hint = resources?.getString(R.string.name),
|
||||
prefill = currentName
|
||||
) { _, input ->
|
||||
currentName = input.toString()
|
||||
) { input ->
|
||||
currentName = input
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
(targetController as? Listener)?.createCategory(currentName)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.category.repos
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
|
||||
/**
|
||||
* Dialog to create a new repo for the library.
|
||||
@ -30,19 +30,20 @@ class RepoCreateDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
|
||||
* @return a new dialog instance.
|
||||
*/
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_add_repo)
|
||||
.message(R.string.action_add_repo_message)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.input(
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_add_repo)
|
||||
.setMessage(R.string.action_add_repo_message)
|
||||
.setTextInput(
|
||||
hint = resources?.getString(R.string.name),
|
||||
prefill = currentName
|
||||
) { _, input ->
|
||||
currentName = input.toString()
|
||||
) { input ->
|
||||
currentName = input
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
(targetController as? Listener)?.createRepo(currentName)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
@ -2,9 +2,8 @@ package eu.kanade.tachiyomi.ui.category.sources
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
@ -14,35 +13,39 @@ class ChangeSourceCategoriesDialog<T>(bundle: Bundle? = null) :
|
||||
|
||||
private var source: Source? = null
|
||||
|
||||
private var categories = emptyList<String>()
|
||||
private var categories = emptyArray<String>()
|
||||
|
||||
private var preselected = emptyArray<Int>()
|
||||
private var selection = booleanArrayOf()
|
||||
|
||||
constructor(
|
||||
target: T,
|
||||
source: Source,
|
||||
categories: List<String>,
|
||||
preselected: Array<Int>
|
||||
categories: Array<String>,
|
||||
selection: BooleanArray
|
||||
) : this() {
|
||||
this.source = source
|
||||
this.categories = categories
|
||||
this.preselected = preselected
|
||||
this.selection = selection
|
||||
targetController = target
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_move_category)
|
||||
.listItemsMultiChoice(
|
||||
items = categories,
|
||||
initialSelection = preselected.toIntArray(),
|
||||
allowEmptySelection = true
|
||||
) { _, selections, _ ->
|
||||
val newCategories = selections.map { categories[it] }
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_move_category)
|
||||
.setMultiChoiceItems(
|
||||
categories,
|
||||
selection
|
||||
) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
val newCategories = categories.filterIndexed { index, s ->
|
||||
selection[index]
|
||||
}
|
||||
(targetController as? Listener)?.updateCategoriesForSource(source!!, newCategories)
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.category.sources
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
|
||||
/**
|
||||
* Dialog to create a new category for the library.
|
||||
@ -30,18 +30,19 @@ class SourceCategoryCreateDialog<T>(bundle: Bundle? = null) : DialogController(b
|
||||
* @return a new dialog instance.
|
||||
*/
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_add_category)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.input(
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_add_category)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setTextInput(
|
||||
hint = resources?.getString(R.string.name),
|
||||
prefill = currentName
|
||||
) { _, input ->
|
||||
currentName = input.toString()
|
||||
) { input ->
|
||||
currentName = input
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
(targetController as? Listener)?.createCategory(currentName)
|
||||
}
|
||||
.create()
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.category.sources
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
|
||||
/**
|
||||
* Dialog to rename an existing category of the library.
|
||||
@ -34,16 +34,17 @@ class SourceCategoryRenameDialog<T>(bundle: Bundle? = null) : DialogController(b
|
||||
* @return a new dialog instance.
|
||||
*/
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_rename_category)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.input(
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_rename_category)
|
||||
.setTextInput(
|
||||
hint = resources?.getString(R.string.name),
|
||||
prefill = currentName
|
||||
) { _, input ->
|
||||
currentName = input.toString()
|
||||
) { input ->
|
||||
currentName = input
|
||||
}
|
||||
.positiveButton(android.R.string.ok) { onPositive() }
|
||||
.setPositiveButton(android.R.string.ok) { _, _ -> onPositive() }
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,13 +8,14 @@ import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import androidx.core.graphics.drawable.DrawableCompat
|
||||
import androidx.core.view.isVisible
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.jakewharton.rxrelay.BehaviorRelay
|
||||
import com.jakewharton.rxrelay.PublishRelay
|
||||
@ -140,7 +141,7 @@ class LibraryController(
|
||||
|
||||
// --> EH
|
||||
// Sync dialog
|
||||
private var favSyncDialog: MaterialDialog? = null
|
||||
private var favSyncDialog: AlertDialog? = null
|
||||
|
||||
// Old sync status
|
||||
private var oldSyncStatus: FavoritesSyncStatus? = null
|
||||
@ -750,14 +751,16 @@ class LibraryController(
|
||||
}
|
||||
|
||||
private fun buildDialog() = activity?.let {
|
||||
MaterialDialog(it)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
}
|
||||
|
||||
private fun showSyncProgressDialog() {
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = buildDialog()
|
||||
?.title(R.string.favorites_syncing)
|
||||
?.cancelable(false)
|
||||
?.setTitle(R.string.favorites_syncing)
|
||||
?.setMessage("")
|
||||
?.setCancelable(false)
|
||||
?.create()
|
||||
favSyncDialog?.show()
|
||||
}
|
||||
|
||||
@ -782,16 +785,17 @@ class LibraryController(
|
||||
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = buildDialog()
|
||||
?.title(R.string.favorites_sync_error)
|
||||
?.message(text = activity!!.getString(R.string.favorites_sync_bad_library_state, status.message))
|
||||
?.cancelable(false)
|
||||
?.positiveButton(R.string.show_gallery) {
|
||||
?.setTitle(R.string.favorites_sync_error)
|
||||
?.setMessage(activity!!.getString(R.string.favorites_sync_bad_library_state, status.message))
|
||||
?.setCancelable(false)
|
||||
?.setPositiveButton(R.string.show_gallery) { _, _ ->
|
||||
openManga(status.manga)
|
||||
presenter.favoritesSync.status.value = FavoritesSyncStatus.Idle(activity!!)
|
||||
}
|
||||
?.negativeButton(android.R.string.ok) {
|
||||
?.setNegativeButton(android.R.string.ok) { _, _ ->
|
||||
presenter.favoritesSync.status.value = FavoritesSyncStatus.Idle(activity!!)
|
||||
}
|
||||
?.create()
|
||||
favSyncDialog?.show()
|
||||
}
|
||||
is FavoritesSyncStatus.Error -> {
|
||||
@ -799,12 +803,13 @@ class LibraryController(
|
||||
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = buildDialog()
|
||||
?.title(R.string.favorites_sync_error)
|
||||
?.message(text = activity!!.getString(R.string.favorites_sync_error_string, status.message))
|
||||
?.cancelable(false)
|
||||
?.positiveButton(android.R.string.ok) {
|
||||
?.setTitle(R.string.favorites_sync_error)
|
||||
?.setMessage(activity!!.getString(R.string.favorites_sync_error_string, status.message))
|
||||
?.setCancelable(false)
|
||||
?.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
presenter.favoritesSync.status.value = FavoritesSyncStatus.Idle(activity!!)
|
||||
}
|
||||
?.create()
|
||||
favSyncDialog?.show()
|
||||
}
|
||||
is FavoritesSyncStatus.CompleteWithErrors -> {
|
||||
@ -812,12 +817,13 @@ class LibraryController(
|
||||
|
||||
favSyncDialog?.dismiss()
|
||||
favSyncDialog = buildDialog()
|
||||
?.title(R.string.favorites_sync_done_errors)
|
||||
?.message(text = activity!!.getString(R.string.favorites_sync_done_errors_message, status.message))
|
||||
?.cancelable(false)
|
||||
?.positiveButton(android.R.string.ok) {
|
||||
?.setTitle(R.string.favorites_sync_done_errors)
|
||||
?.setMessage(activity!!.getString(R.string.favorites_sync_done_errors_message, status.message))
|
||||
?.setCancelable(false)
|
||||
?.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
presenter.favoritesSync.status.value = FavoritesSyncStatus.Idle(activity!!)
|
||||
}
|
||||
?.create()
|
||||
favSyncDialog?.show()
|
||||
}
|
||||
is FavoritesSyncStatus.Processing,
|
||||
@ -833,13 +839,13 @@ class LibraryController(
|
||||
showSyncProgressDialog()
|
||||
}
|
||||
|
||||
favSyncDialog?.message(text = status.message)
|
||||
favSyncDialog?.setMessage(status.message)
|
||||
}
|
||||
}
|
||||
oldSyncStatus = status
|
||||
if (status is FavoritesSyncStatus.Processing && status.delayedMessage != null) {
|
||||
delay(5.seconds)
|
||||
favSyncDialog?.message(text = status.delayedMessage)
|
||||
favSyncDialog?.setMessage(status.delayedMessage)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,9 +18,10 @@ class WhatsNewDialogController : DialogController() {
|
||||
val activity = activity!!
|
||||
val view = WhatsNewRecyclerView(activity)
|
||||
return MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(res = if (BuildConfig.DEBUG /* SY --> */ || syDebugVersion != "0" /* SY <-- */) R.string.notices else R.string.whats_new)
|
||||
.setCustomView(view = view)
|
||||
.setTitle(if (BuildConfig.DEBUG /* SY --> */ || syDebugVersion != "0" /* SY <-- */) R.string.notices else R.string.whats_new)
|
||||
.setView(view)
|
||||
.setPositiveButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
class WhatsNewRecyclerView(context: Context) : ChangeLogRecyclerView(context) {
|
||||
|
@ -4,19 +4,16 @@ import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.ScrollView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.children
|
||||
import coil.loadAny
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.afollestad.materialdialogs.input.getInputField
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.google.android.material.chip.Chip
|
||||
import com.google.android.material.chip.ChipGroup
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@ -26,6 +23,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.util.lang.chop
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
import exh.util.dropBlank
|
||||
import exh.util.trimOrNull
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@ -64,13 +62,15 @@ class EditMangaDialog : DialogController {
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
binding = EditMangaDialogBinding.inflate(activity!!.layoutInflater)
|
||||
val dialog = MaterialDialog(activity!!).apply {
|
||||
customView(view = binding.root, scrollable = true)
|
||||
negativeButton(android.R.string.cancel)
|
||||
positiveButton(R.string.action_save) { onPositiveButtonClick() }
|
||||
val view = ScrollView(activity!!).apply {
|
||||
addView(binding.root)
|
||||
}
|
||||
onViewCreated()
|
||||
return dialog
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setView(view)
|
||||
.setPositiveButton(R.string.action_save) { _, _ -> onPositiveButtonClick() }
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
fun onViewCreated() {
|
||||
@ -230,15 +230,16 @@ class EditMangaDialog : DialogController {
|
||||
textStartPadding = 0F
|
||||
|
||||
clicks().onEach {
|
||||
MaterialDialog(context)
|
||||
.title(R.string.add_tag)
|
||||
.input(inputType = InputType.TYPE_CLASS_TEXT)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
val newTag = it.getInputField().text.toString().trimOrNull()
|
||||
|
||||
var newTag: String? = null
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.add_tag)
|
||||
.setTextInput {
|
||||
text = it.trimOrNull()
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
if (newTag != null) setChips(items + listOf(newTag))
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}.launchIn(infoController.viewScope)
|
||||
}
|
||||
|
@ -28,10 +28,9 @@ import androidx.recyclerview.widget.ConcatAdapter
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.loadAny
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsSingleChoice
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
@ -613,14 +612,17 @@ class MangaController :
|
||||
val sourceManager: SourceManager = Injekt.get()
|
||||
val mergedManga = presenter.mergedManga.values.filterNot { it.source == MERGED_SOURCE_ID }
|
||||
val sources = mergedManga.map { sourceManager.getOrStub(it.source) }
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.action_open_in_web_view)
|
||||
.listItemsSingleChoice(
|
||||
items = mergedManga.mapIndexed { index, _ -> sources[index].toString() }
|
||||
) { _, index, _ ->
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.action_open_in_web_view)
|
||||
.setSingleChoiceItems(
|
||||
mergedManga.mapIndexed { index, _ -> sources[index].toString() }
|
||||
.toTypedArray(),
|
||||
-1
|
||||
) { dialog, index ->
|
||||
dialog.dismiss()
|
||||
openMangaInWebView(mergedManga[index], sources[index] as? HttpSource)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
// SY <--
|
||||
@ -773,14 +775,16 @@ class MangaController :
|
||||
fun openRecommends() {
|
||||
val source = presenter.source.getMainSource()
|
||||
if (source.isMdBasedSource()) {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.az_recommends)
|
||||
.listItemsSingleChoice(
|
||||
items = listOf(
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.az_recommends)
|
||||
.setSingleChoiceItems(
|
||||
arrayOf(
|
||||
"MangaDex similar",
|
||||
"Community recommendations"
|
||||
)
|
||||
) { _, index, _ ->
|
||||
),
|
||||
-1
|
||||
) { dialog, index ->
|
||||
dialog.dismiss()
|
||||
when (index) {
|
||||
0 -> router.pushController(MangaDexSimilarController(presenter.manga, source as CatalogueSource).withFadeTransaction())
|
||||
1 -> router.pushController(RecommendsController(presenter.manga, source as CatalogueSource).withFadeTransaction())
|
||||
|
@ -5,9 +5,8 @@ import android.os.Bundle
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||
import com.bluelinelabs.conductor.Router
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.ui.manga.MangaPresenter
|
||||
@ -110,26 +109,27 @@ class ChaptersSettingsSheet(
|
||||
|
||||
override fun onItemClicked(item: Item) {
|
||||
if (item is Item.DrawableSelection) {
|
||||
val scanlators = presenter.allChapterScanlators.toList()
|
||||
val filteredScanlators = presenter.manga.filtered_scanlators?.let { MdUtil.getScanlators(it) }
|
||||
val preselected = if (filteredScanlators.isNullOrEmpty()) {
|
||||
scanlators.mapIndexed { index, _ -> index }
|
||||
} else {
|
||||
filteredScanlators.map { scanlators.indexOf(it) }
|
||||
}.toIntArray()
|
||||
val scanlators = presenter.allChapterScanlators.toTypedArray()
|
||||
val filteredScanlators = presenter.manga.filtered_scanlators?.let { MdUtil.getScanlators(it) } ?: scanlators.toSet()
|
||||
val selection = scanlators.map {
|
||||
it in filteredScanlators
|
||||
}.toBooleanArray()
|
||||
|
||||
MaterialDialog(context)
|
||||
.title(R.string.select_scanlators)
|
||||
.listItemsMultiChoice(items = presenter.allChapterScanlators.toList(), initialSelection = preselected) { _, selections, _ ->
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.select_scanlators)
|
||||
.setMultiChoiceItems(scanlators, selection) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
launchIO {
|
||||
supervisorScope {
|
||||
val selected = selections.map { scanlators[it] }.toSet()
|
||||
val selected = scanlators.filterIndexed { index, s -> selection[index] }.toSet()
|
||||
presenter.setScanlatorFilter(selected)
|
||||
withUIContext { onGroupClicked(this@FilterGroup) }
|
||||
}
|
||||
}
|
||||
}
|
||||
.negativeButton(R.string.action_reset) {
|
||||
.setNegativeButton(R.string.action_reset) { _, _ ->
|
||||
launchIO {
|
||||
supervisorScope {
|
||||
presenter.setScanlatorFilter(presenter.allChapterScanlators)
|
||||
@ -137,7 +137,6 @@ class ChaptersSettingsSheet(
|
||||
}
|
||||
}
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.show()
|
||||
return
|
||||
}
|
||||
|
@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.ui.manga.merged
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.widget.ScrollView
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.recyclerview.widget.ConcatAdapter
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@ -50,13 +50,15 @@ class EditMergedSettingsDialog : DialogController, EditMergedMangaAdapter.EditMe
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
binding = EditMergedSettingsDialogBinding.inflate(activity!!.layoutInflater)
|
||||
val dialog = MaterialDialog(activity!!)
|
||||
.customView(view = binding.root, scrollable = true)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.positiveButton(R.string.action_save) { onPositiveButtonClick() }
|
||||
|
||||
val view = ScrollView(activity!!).apply {
|
||||
addView(binding.root)
|
||||
}
|
||||
onViewCreated()
|
||||
return dialog
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setView(view)
|
||||
.setPositiveButton(R.string.action_save) { _, _ -> onPositiveButtonClick() }
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
fun onViewCreated() {
|
||||
@ -99,26 +101,26 @@ class EditMergedSettingsDialog : DialogController, EditMergedMangaAdapter.EditMe
|
||||
val mergedMangaAdapter = mergedMangaAdapter ?: return
|
||||
val mergeMangaReference = mergedMangaAdapter.currentItems.getOrNull(position)?.mergedMangaReference ?: return
|
||||
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.delete_merged_manga)
|
||||
.message(R.string.delete_merged_manga_desc)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.delete_merged_manga)
|
||||
.setMessage(R.string.delete_merged_manga_desc)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
db.deleteMergedManga(mergeMangaReference).executeAsBlocking()
|
||||
dialog?.dismiss()
|
||||
mangaController.router.popController(mangaController)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
override fun onToggleChapterUpdatesClicked(position: Int) {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.chapter_updates_merged_manga)
|
||||
.message(R.string.chapter_updates_merged_manga_desc)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.chapter_updates_merged_manga)
|
||||
.setMessage(R.string.chapter_updates_merged_manga_desc)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
toggleChapterUpdates(position)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
@ -136,13 +138,13 @@ class EditMergedSettingsDialog : DialogController, EditMergedMangaAdapter.EditMe
|
||||
}
|
||||
|
||||
override fun onToggleChapterDownloadsClicked(position: Int) {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.download_merged_manga)
|
||||
.message(R.string.download_merged_manga_desc)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.download_merged_manga)
|
||||
.setMessage(R.string.download_merged_manga_desc)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
toggleChapterDownloads(position)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ import androidx.core.view.WindowInsetsControllerCompat
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.shape.MaterialShapeDrawable
|
||||
import com.mikepenz.aboutlibraries.util.getThemeColor
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
@ -693,10 +693,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
|
||||
binding.ehAutoscrollHelp.clicks()
|
||||
.onEach {
|
||||
MaterialDialog(this)
|
||||
.title(R.string.eh_autoscroll_help)
|
||||
.message(R.string.eh_autoscroll_help_message)
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.eh_autoscroll_help)
|
||||
.setMessage(R.string.eh_autoscroll_help_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
@ -747,10 +747,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
|
||||
binding.ehRetryAllHelp.clicks()
|
||||
.onEach {
|
||||
MaterialDialog(this)
|
||||
.title(R.string.eh_retry_all_help)
|
||||
.message(R.string.eh_retry_all_help_message)
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.eh_retry_all_help)
|
||||
.setMessage(R.string.eh_retry_all_help_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
@ -784,10 +784,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
|
||||
binding.ehBoostPageHelp.clicks()
|
||||
.onEach {
|
||||
MaterialDialog(this)
|
||||
.title(R.string.eh_boost_page_help)
|
||||
.message(R.string.eh_boost_page_help_message)
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.eh_boost_page_help)
|
||||
.setMessage(R.string.eh_boost_page_help_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
@ -1,9 +1,9 @@
|
||||
package eu.kanade.tachiyomi.ui.reader.chapter
|
||||
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.callbacks.onDismiss
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
@ -12,36 +12,41 @@ import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderPresenter
|
||||
import eu.kanade.tachiyomi.util.chapter.getChapterSort
|
||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterAdapter.OnBookmarkClickListener {
|
||||
private val binding = ReaderChaptersDialogBinding.inflate(activity.layoutInflater, null, false)
|
||||
|
||||
var presenter: ReaderPresenter = activity.presenter
|
||||
var adapter: FlexibleAdapter<ReaderChapterItem>? = null
|
||||
var dialog: MaterialDialog
|
||||
var dialog: AlertDialog
|
||||
|
||||
init {
|
||||
dialog = MaterialDialog(activity)
|
||||
.title(R.string.chapters)
|
||||
.customView(view = binding.root)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.onDismiss { destroy() }
|
||||
.show {
|
||||
adapter = ReaderChapterAdapter(this@ReaderChapterDialog)
|
||||
binding.chapterRecycler.adapter = adapter
|
||||
dialog = MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.chapters)
|
||||
.setView(binding.root)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setOnDismissListener { destroy() }
|
||||
.create()
|
||||
|
||||
adapter?.mItemClickListener = FlexibleAdapter.OnItemClickListener { _, position ->
|
||||
val item = adapter?.getItem(position)
|
||||
if (item != null && item.id != presenter.getCurrentChapter()?.chapter?.id) {
|
||||
dismiss()
|
||||
presenter.loadNewChapterFromDialog(item)
|
||||
}
|
||||
true
|
||||
}
|
||||
adapter = ReaderChapterAdapter(this@ReaderChapterDialog)
|
||||
binding.chapterRecycler.adapter = adapter
|
||||
|
||||
binding.chapterRecycler.layoutManager = LinearLayoutManager(context)
|
||||
refreshList()
|
||||
adapter?.mItemClickListener = FlexibleAdapter.OnItemClickListener { _, position ->
|
||||
val item = adapter?.getItem(position)
|
||||
if (item != null && item.id != presenter.getCurrentChapter()?.chapter?.id) {
|
||||
dialog.dismiss()
|
||||
presenter.loadNewChapterFromDialog(item)
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
binding.chapterRecycler.layoutManager = LinearLayoutManager(activity)
|
||||
activity.lifecycleScope.launch {
|
||||
refreshList()
|
||||
}
|
||||
|
||||
dialog.show()
|
||||
}
|
||||
|
||||
private fun refreshList() {
|
||||
|
@ -7,6 +7,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.preference.PreferenceScreen
|
||||
@ -323,16 +324,25 @@ class SettingsAdvancedController : SettingsController() {
|
||||
// SY -->
|
||||
class CleanupDownloadsDialogController : DialogController() {
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!).show {
|
||||
title(R.string.clean_up_downloaded_chapters)
|
||||
.listItemsMultiChoice(R.array.clean_up_downloads, disabledIndices = intArrayOf(0), initialSelection = intArrayOf(0, 1, 2)) { _, selections, _ ->
|
||||
val deleteRead = selections.contains(1)
|
||||
val deleteNonFavorite = selections.contains(2)
|
||||
(targetController as? SettingsAdvancedController)?.cleanupDownloads(deleteRead, deleteNonFavorite)
|
||||
val options = activity!!.resources.getStringArray(R.array.clean_up_downloads)
|
||||
val selected = options.map { true }.toBooleanArray()
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.clean_up_downloaded_chapters)
|
||||
.setMultiChoiceItems(options, selected) { dialog, which, checked ->
|
||||
if (which == 0) {
|
||||
(dialog as AlertDialog).listView.setItemChecked(which, true)
|
||||
} else {
|
||||
selected[which] = checked
|
||||
}
|
||||
positiveButton(android.R.string.ok)
|
||||
negativeButton(android.R.string.cancel)
|
||||
}
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
(targetController as? SettingsAdvancedController)?.cleanupDownloads(
|
||||
selected[1],
|
||||
selected[2]
|
||||
)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
|
||||
@ -400,14 +410,18 @@ class SettingsAdvancedController : SettingsController() {
|
||||
// SY <--
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
val item = arrayOf(
|
||||
activity!!.getString(R.string.clear_db_exclude_read)
|
||||
)
|
||||
val selected = booleanArrayOf(true)
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setMessage(R.string.clear_database_confirmation)
|
||||
.checkBoxPrompt(R.string.clear_db_exclude_read) {
|
||||
keepReadManga = it
|
||||
.setMultiChoiceItems(item, selected) { _, _, isChecked ->
|
||||
selected[0] = isChecked
|
||||
}
|
||||
// SY <--
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
(targetController as? SettingsAdvancedController)?.clearDatabase()
|
||||
(targetController as? SettingsAdvancedController)?.clearDatabase(selected.first())
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
|
@ -331,29 +331,35 @@ class SettingsDownloadController : SettingsController() {
|
||||
val dbCategories = db.getCategories().executeAsBlocking()
|
||||
val categories = listOf(Category.createDefault()) + dbCategories
|
||||
|
||||
val items = categories.map { it.name }
|
||||
val preselected = categories
|
||||
.mapIndexedNotNull { index, category ->
|
||||
if (category.id in preferences.dontDeleteFromCategories().get().map { it.toInt() }) {
|
||||
index
|
||||
} else null
|
||||
val items = categories.map { it.name }.toTypedArray()
|
||||
val selection = categories
|
||||
.mapNotNull { category ->
|
||||
category.id in preferences.dontDeleteFromCategories().get().map { it.toInt() }
|
||||
}
|
||||
.toIntArray()
|
||||
.toBooleanArray()
|
||||
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.categories)
|
||||
.listItemsMultiChoice(
|
||||
items = items,
|
||||
initialSelection = preselected
|
||||
) { _: MaterialDialog, selections: IntArray, _: List<CharSequence> ->
|
||||
val included = selections
|
||||
.map { categories[it].id.toString() }
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.categories)
|
||||
.setMultiChoiceItems(
|
||||
items,
|
||||
selection
|
||||
) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
val included = selection
|
||||
.mapIndexed { index, selected ->
|
||||
if (selected) {
|
||||
categories[index].id.toString()
|
||||
} else null
|
||||
}
|
||||
.filterNotNull()
|
||||
.toSet()
|
||||
|
||||
preferences.dontDeleteFromCategories().set(included)
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,15 +4,15 @@ import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.text.InputType
|
||||
import android.view.LayoutInflater
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.WhichButton
|
||||
import com.afollestad.materialdialogs.actions.setActionButtonEnabled
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.afollestad.materialdialogs.input.getInputField
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.tfcporciuncula.flow.Preference
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
@ -21,8 +21,9 @@ import eu.kanade.tachiyomi.data.preference.CHARGING
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
import eu.kanade.tachiyomi.data.preference.UNMETERED_NETWORK
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||
import eu.kanade.tachiyomi.databinding.EhDialogCategoriesBinding
|
||||
import eu.kanade.tachiyomi.databinding.EhDialogLanguagesBinding
|
||||
import eu.kanade.tachiyomi.databinding.DialogStubTextinputBinding
|
||||
import eu.kanade.tachiyomi.ui.setting.eh.FrontPageCategoriesDialog
|
||||
import eu.kanade.tachiyomi.ui.setting.eh.LanguagesDialog
|
||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||
import eu.kanade.tachiyomi.util.preference.entriesRes
|
||||
@ -42,6 +43,7 @@ import exh.eh.EHentaiUpdateWorkerConstants
|
||||
import exh.eh.EHentaiUpdaterStats
|
||||
import exh.favorites.FavoritesIntroDialog
|
||||
import exh.favorites.LocalFavoritesStorage
|
||||
import exh.log.xLogD
|
||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||
import exh.metadata.metadata.base.getFlatMetadataForManga
|
||||
import exh.source.isEhBasedManga
|
||||
@ -73,7 +75,7 @@ import kotlin.time.Duration
|
||||
class SettingsEhController : SettingsController() {
|
||||
private val db: DatabaseHelper by injectLazy()
|
||||
|
||||
private fun Preference<*>.reconfigure(): Boolean {
|
||||
fun Preference<*>.reconfigure(): Boolean {
|
||||
// Listen for change commit
|
||||
asFlow()
|
||||
.take(1) // Only listen for first commit
|
||||
@ -186,30 +188,36 @@ class SettingsEhController : SettingsController() {
|
||||
summary = context.getString(R.string.tag_filtering_threshhold_summary, preferences.ehTagFilterValue().get())
|
||||
|
||||
onClick {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.tag_filtering_threshold)
|
||||
.input(
|
||||
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED,
|
||||
waitForPositiveButton = false,
|
||||
allowEmpty = false
|
||||
) { dialog, number ->
|
||||
val inputField = dialog.getInputField()
|
||||
val value = number.toString().toIntOrNull()
|
||||
|
||||
if ((value != null && value in -9999..0) || number.toString() == "-") {
|
||||
inputField.error = null
|
||||
} else {
|
||||
inputField.error = context.getString(R.string.tag_filtering_threshhold_error)
|
||||
var value: Int? = preferences.ehTagFilterValue().get()
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.tag_filtering_threshold)
|
||||
.let { builder ->
|
||||
val binding = DialogStubTextinputBinding.inflate(LayoutInflater.from(builder.context))
|
||||
binding.textField.editText?.apply {
|
||||
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
setText(value.toString(), TextView.BufferType.EDITABLE)
|
||||
doAfterTextChanged {
|
||||
value = it?.toString()?.toIntOrNull()
|
||||
this@SettingsEhController.xLogD(value)
|
||||
error = if (value in -9999..0 || it.toString() == "-") {
|
||||
null
|
||||
} else {
|
||||
context.getString(R.string.tag_filtering_threshhold_error)
|
||||
}
|
||||
}
|
||||
post {
|
||||
requestFocusFromTouch()
|
||||
context.getSystemService<InputMethodManager>()?.showSoftInput(this, 0)
|
||||
}
|
||||
}
|
||||
dialog.setActionButtonEnabled(WhichButton.POSITIVE, value != null && value in -9999..0)
|
||||
builder.setView(binding.root)
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
val value = it.getInputField().text.toString().toInt()
|
||||
preferences.ehTagFilterValue().set(value)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
preferences.ehTagFilterValue().set(value ?: return@setPositiveButton)
|
||||
summary = context.getString(R.string.tag_filtering_threshhold_summary, preferences.ehTagFilterValue().get())
|
||||
preferences.ehTagFilterValue().reconfigure()
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
@ -225,31 +233,37 @@ class SettingsEhController : SettingsController() {
|
||||
summary = context.getString(R.string.tag_watching_threshhold_summary, preferences.ehTagWatchingValue().get())
|
||||
|
||||
onClick {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.tag_watching_threshhold)
|
||||
.input(
|
||||
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED,
|
||||
maxLength = 4,
|
||||
waitForPositiveButton = false,
|
||||
allowEmpty = false
|
||||
) { dialog, number ->
|
||||
val inputField = dialog.getInputField()
|
||||
val value = number.toString().toIntOrNull()
|
||||
var value: Int? = preferences.ehTagWatchingValue().get()
|
||||
MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.tag_watching_threshhold)
|
||||
.let { builder ->
|
||||
val binding = DialogStubTextinputBinding.inflate(LayoutInflater.from(builder.context))
|
||||
binding.textField.editText?.apply {
|
||||
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
|
||||
|
||||
if (value != null && value in 0..9999) {
|
||||
inputField.error = null
|
||||
} else {
|
||||
inputField.error = context.getString(R.string.tag_watching_threshhold_error)
|
||||
setText(value.toString(), TextView.BufferType.EDITABLE)
|
||||
doAfterTextChanged {
|
||||
value = it?.toString()?.toIntOrNull()
|
||||
|
||||
error = if (value in 0..9999) {
|
||||
null
|
||||
} else {
|
||||
context.getString(R.string.tag_watching_threshhold_error)
|
||||
}
|
||||
}
|
||||
post {
|
||||
requestFocusFromTouch()
|
||||
context.getSystemService<InputMethodManager>()?.showSoftInput(this, 0)
|
||||
}
|
||||
}
|
||||
dialog.setActionButtonEnabled(WhichButton.POSITIVE, value != null && value in 0..9999)
|
||||
builder.setView(binding.root)
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
val value = it.getInputField().text.toString().toInt()
|
||||
preferences.ehTagWatchingValue().set(value)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
preferences.ehTagWatchingValue().set(value ?: return@setPositiveButton)
|
||||
summary = context.getString(R.string.tag_watching_threshhold_summary, preferences.ehTagWatchingValue().get())
|
||||
preferences.ehTagWatchingValue().reconfigure()
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
@ -258,143 +272,14 @@ class SettingsEhController : SettingsController() {
|
||||
}
|
||||
|
||||
preference {
|
||||
key = "pref_language_filtering"
|
||||
key = PreferenceKeys.eh_settings_languages
|
||||
titleRes = R.string.language_filtering
|
||||
summaryRes = R.string.language_filtering_summary
|
||||
|
||||
onClick {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.language_filtering)
|
||||
.message(R.string.language_filtering_summary)
|
||||
.customView(R.layout.eh_dialog_languages, scrollable = true)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
val customView = it.view.contentLayout.customView!!
|
||||
val binding = EhDialogLanguagesBinding.bind(customView)
|
||||
|
||||
val languages = with(binding) {
|
||||
listOf(
|
||||
"${japaneseOriginal.isChecked}*${japaneseTranslated.isChecked}*${japaneseRewrite.isChecked}",
|
||||
"${englishOriginal.isChecked}*${englishTranslated.isChecked}*${englishRewrite.isChecked}",
|
||||
"${chineseOriginal.isChecked}*${chineseTranslated.isChecked}*${chineseRewrite.isChecked}",
|
||||
"${dutchOriginal.isChecked}*${dutchTranslated.isChecked}*${dutchRewrite.isChecked}",
|
||||
"${frenchOriginal.isChecked}*${frenchTranslated.isChecked}*${frenchRewrite.isChecked}",
|
||||
"${germanOriginal.isChecked}*${germanTranslated.isChecked}*${germanRewrite.isChecked}",
|
||||
"${hungarianOriginal.isChecked}*${hungarianTranslated.isChecked}*${hungarianRewrite.isChecked}",
|
||||
"${italianOriginal.isChecked}*${italianTranslated.isChecked}*${italianRewrite.isChecked}",
|
||||
"${koreanOriginal.isChecked}*${koreanTranslated.isChecked}*${koreanRewrite.isChecked}",
|
||||
"${polishOriginal.isChecked}*${polishTranslated.isChecked}*${polishRewrite.isChecked}",
|
||||
"${portugueseOriginal.isChecked}*${portugueseTranslated.isChecked}*${portugueseRewrite.isChecked}",
|
||||
"${russianOriginal.isChecked}*${russianTranslated.isChecked}*${russianRewrite.isChecked}",
|
||||
"${spanishOriginal.isChecked}*${spanishTranslated.isChecked}*${spanishRewrite.isChecked}",
|
||||
"${thaiOriginal.isChecked}*${thaiTranslated.isChecked}*${thaiRewrite.isChecked}",
|
||||
"${vietnameseOriginal.isChecked}*${vietnameseTranslated.isChecked}*${vietnameseRewrite.isChecked}",
|
||||
"${notAvailableOriginal.isChecked}*${notAvailableTranslated.isChecked}*${notAvailableRewrite.isChecked}",
|
||||
"${otherOriginal.isChecked}*${otherTranslated.isChecked}*${otherRewrite.isChecked}"
|
||||
).joinToString("\n")
|
||||
}
|
||||
|
||||
preferences.exhSettingsLanguages().set(languages)
|
||||
|
||||
preferences.exhSettingsLanguages().reconfigure()
|
||||
}
|
||||
.show {
|
||||
val customView = this.view.contentLayout.customView!!
|
||||
val binding = EhDialogLanguagesBinding.bind(customView)
|
||||
val settingsLanguages = preferences.exhSettingsLanguages().get().split("\n")
|
||||
|
||||
val japanese = settingsLanguages[0].split("*").map { it.toBoolean() }
|
||||
val english = settingsLanguages[1].split("*").map { it.toBoolean() }
|
||||
val chinese = settingsLanguages[2].split("*").map { it.toBoolean() }
|
||||
val dutch = settingsLanguages[3].split("*").map { it.toBoolean() }
|
||||
val french = settingsLanguages[4].split("*").map { it.toBoolean() }
|
||||
val german = settingsLanguages[5].split("*").map { it.toBoolean() }
|
||||
val hungarian = settingsLanguages[6].split("*").map { it.toBoolean() }
|
||||
val italian = settingsLanguages[7].split("*").map { it.toBoolean() }
|
||||
val korean = settingsLanguages[8].split("*").map { it.toBoolean() }
|
||||
val polish = settingsLanguages[9].split("*").map { it.toBoolean() }
|
||||
val portuguese = settingsLanguages[10].split("*").map { it.toBoolean() }
|
||||
val russian = settingsLanguages[11].split("*").map { it.toBoolean() }
|
||||
val spanish = settingsLanguages[12].split("*").map { it.toBoolean() }
|
||||
val thai = settingsLanguages[13].split("*").map { it.toBoolean() }
|
||||
val vietnamese = settingsLanguages[14].split("*").map { it.toBoolean() }
|
||||
val notAvailable =
|
||||
settingsLanguages[15].split("*").map { it.toBoolean() }
|
||||
val other = settingsLanguages[16].split("*").map { it.toBoolean() }
|
||||
|
||||
with(binding) {
|
||||
japaneseOriginal.isChecked = japanese[0]
|
||||
japaneseTranslated.isChecked = japanese[1]
|
||||
japaneseRewrite.isChecked = japanese[2]
|
||||
|
||||
japaneseOriginal.isChecked = japanese[0]
|
||||
japaneseTranslated.isChecked = japanese[1]
|
||||
japaneseRewrite.isChecked = japanese[2]
|
||||
|
||||
englishOriginal.isChecked = english[0]
|
||||
englishTranslated.isChecked = english[1]
|
||||
englishRewrite.isChecked = english[2]
|
||||
|
||||
chineseOriginal.isChecked = chinese[0]
|
||||
chineseTranslated.isChecked = chinese[1]
|
||||
chineseRewrite.isChecked = chinese[2]
|
||||
|
||||
dutchOriginal.isChecked = dutch[0]
|
||||
dutchTranslated.isChecked = dutch[1]
|
||||
dutchRewrite.isChecked = dutch[2]
|
||||
|
||||
frenchOriginal.isChecked = french[0]
|
||||
frenchTranslated.isChecked = french[1]
|
||||
frenchRewrite.isChecked = french[2]
|
||||
|
||||
germanOriginal.isChecked = german[0]
|
||||
germanTranslated.isChecked = german[1]
|
||||
germanRewrite.isChecked = german[2]
|
||||
|
||||
hungarianOriginal.isChecked = hungarian[0]
|
||||
hungarianTranslated.isChecked = hungarian[1]
|
||||
hungarianRewrite.isChecked = hungarian[2]
|
||||
|
||||
italianOriginal.isChecked = italian[0]
|
||||
italianTranslated.isChecked = italian[1]
|
||||
italianRewrite.isChecked = italian[2]
|
||||
|
||||
koreanOriginal.isChecked = korean[0]
|
||||
koreanTranslated.isChecked = korean[1]
|
||||
koreanRewrite.isChecked = korean[2]
|
||||
|
||||
polishOriginal.isChecked = polish[0]
|
||||
polishTranslated.isChecked = polish[1]
|
||||
polishRewrite.isChecked = polish[2]
|
||||
|
||||
portugueseOriginal.isChecked = portuguese[0]
|
||||
portugueseTranslated.isChecked = portuguese[1]
|
||||
portugueseRewrite.isChecked = portuguese[2]
|
||||
|
||||
russianOriginal.isChecked = russian[0]
|
||||
russianTranslated.isChecked = russian[1]
|
||||
russianRewrite.isChecked = russian[2]
|
||||
|
||||
spanishOriginal.isChecked = spanish[0]
|
||||
spanishTranslated.isChecked = spanish[1]
|
||||
spanishRewrite.isChecked = spanish[2]
|
||||
|
||||
thaiOriginal.isChecked = thai[0]
|
||||
thaiTranslated.isChecked = thai[1]
|
||||
thaiRewrite.isChecked = thai[2]
|
||||
|
||||
vietnameseOriginal.isChecked = vietnamese[0]
|
||||
vietnameseTranslated.isChecked = vietnamese[1]
|
||||
vietnameseRewrite.isChecked = vietnamese[2]
|
||||
|
||||
notAvailableOriginal.isChecked = notAvailable[0]
|
||||
notAvailableTranslated.isChecked = notAvailable[1]
|
||||
notAvailableRewrite.isChecked = notAvailable[2]
|
||||
|
||||
otherOriginal.isChecked = other[0]
|
||||
otherTranslated.isChecked = other[1]
|
||||
otherRewrite.isChecked = other[2]
|
||||
}
|
||||
}
|
||||
val dialog = LanguagesDialog()
|
||||
dialog.targetController = this@SettingsEhController
|
||||
dialog.showDialog(router)
|
||||
}
|
||||
|
||||
preferences.enableExhentai().asImmediateFlow { isVisible = it }
|
||||
@ -402,56 +287,14 @@ class SettingsEhController : SettingsController() {
|
||||
}
|
||||
|
||||
preference {
|
||||
key = "pref_front_page_categories"
|
||||
key = PreferenceKeys.eh_enabled_categories
|
||||
titleRes = R.string.frong_page_categories
|
||||
summaryRes = R.string.fromt_page_categories_summary
|
||||
|
||||
onClick {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.frong_page_categories)
|
||||
.message(R.string.fromt_page_categories_summary)
|
||||
.customView(R.layout.eh_dialog_categories, scrollable = true)
|
||||
.positiveButton { dialog ->
|
||||
val customView = dialog.view.contentLayout.customView!!
|
||||
val binding = EhDialogCategoriesBinding.bind(customView)
|
||||
|
||||
with(binding) {
|
||||
preferences.exhEnabledCategories().set(
|
||||
listOf(
|
||||
(!doujinshiCheckbox.isChecked),
|
||||
(!mangaCheckbox.isChecked),
|
||||
(!artistCgCheckbox.isChecked),
|
||||
(!gameCgCheckbox.isChecked),
|
||||
(!westernCheckbox.isChecked),
|
||||
(!nonHCheckbox.isChecked),
|
||||
(!imageSetCheckbox.isChecked),
|
||||
(!cosplayCheckbox.isChecked),
|
||||
(!asianPornCheckbox.isChecked),
|
||||
(!miscCheckbox.isChecked)
|
||||
).joinToString(separator = ",") { it.toString() }
|
||||
)
|
||||
}
|
||||
|
||||
preferences.exhEnabledCategories().reconfigure()
|
||||
}
|
||||
.show {
|
||||
val customView = this.view.contentLayout.customView!!
|
||||
val binding = EhDialogCategoriesBinding.bind(customView)
|
||||
|
||||
with(binding) {
|
||||
val list = preferences.exhEnabledCategories().get().split(",").map { !it.toBoolean() }
|
||||
doujinshiCheckbox.isChecked = list[0]
|
||||
mangaCheckbox.isChecked = list[1]
|
||||
artistCgCheckbox.isChecked = list[2]
|
||||
gameCgCheckbox.isChecked = list[3]
|
||||
westernCheckbox.isChecked = list[4]
|
||||
nonHCheckbox.isChecked = list[5]
|
||||
imageSetCheckbox.isChecked = list[6]
|
||||
cosplayCheckbox.isChecked = list[7]
|
||||
asianPornCheckbox.isChecked = list[8]
|
||||
miscCheckbox.isChecked = list[9]
|
||||
}
|
||||
}
|
||||
val dialog = FrontPageCategoriesDialog()
|
||||
dialog.targetController = this@SettingsEhController
|
||||
dialog.showDialog(router)
|
||||
}
|
||||
|
||||
preferences.enableExhentai().asImmediateFlow { isVisible = it }
|
||||
@ -540,10 +383,10 @@ class SettingsEhController : SettingsController() {
|
||||
|
||||
onClick {
|
||||
activity?.let { activity ->
|
||||
MaterialDialog(activity)
|
||||
.title(R.string.favorites_sync_reset)
|
||||
.message(R.string.favorites_sync_reset_message)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.favorites_sync_reset)
|
||||
.setMessage(R.string.favorites_sync_reset_message)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
LocalFavoritesStorage().apply {
|
||||
getRealm().use {
|
||||
it.trans {
|
||||
@ -553,8 +396,8 @@ class SettingsEhController : SettingsController() {
|
||||
}
|
||||
activity.toast(context.getString(R.string.sync_state_reset), Toast.LENGTH_LONG)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.cancelable(false)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setCancelable(false)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
@ -642,9 +485,10 @@ class SettingsEhController : SettingsController() {
|
||||
titleRes = R.string.show_updater_statistics
|
||||
|
||||
onClick {
|
||||
val progress = MaterialDialog(context)
|
||||
.message(R.string.gallery_updater_statistics_collection)
|
||||
.cancelable(false)
|
||||
val progress = MaterialAlertDialogBuilder(context)
|
||||
.setMessage(R.string.gallery_updater_statistics_collection)
|
||||
.setCancelable(false)
|
||||
.create()
|
||||
progress.show()
|
||||
|
||||
viewScope.launch(Dispatchers.IO) {
|
||||
@ -688,10 +532,10 @@ class SettingsEhController : SettingsController() {
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
MaterialDialog(context)
|
||||
.title(R.string.gallery_updater_statistics)
|
||||
.message(text = updateInfo)
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.gallery_updater_statistics)
|
||||
.setMessage(updateInfo)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
package eu.kanade.tachiyomi.ui.setting
|
||||
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
@ -67,21 +66,33 @@ class SettingsMangaDexController :
|
||||
summaryRes = R.string.mangadex_sync_follows_to_library_summary
|
||||
|
||||
onClick {
|
||||
MaterialDialog(context)
|
||||
.title(R.string.mangadex_sync_follows_to_library)
|
||||
.message(R.string.mangadex_sync_follows_to_library_message)
|
||||
.listItemsMultiChoice(
|
||||
items = context.resources.getStringArray(R.array.md_follows_options).toList().let { it.subList(1, it.size) },
|
||||
initialSelection = intArrayOf(0, 5)
|
||||
) { _, indices, _ ->
|
||||
preferences.mangadexSyncToLibraryIndexes().set(indices.map { (it + 1).toString() }.toSet())
|
||||
val items = context.resources.getStringArray(R.array.md_follows_options)
|
||||
.drop(1)
|
||||
.toTypedArray()
|
||||
val selection = items.mapIndexed { index, _ ->
|
||||
index == 0 || index == 5
|
||||
}.toBooleanArray()
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.mangadex_sync_follows_to_library)
|
||||
// .setMessage(R.string.mangadex_sync_follows_to_library_message)
|
||||
.setMultiChoiceItems(
|
||||
items,
|
||||
selection
|
||||
) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
preferences.mangadexSyncToLibraryIndexes().set(
|
||||
items.filterIndexed { index, _ -> selection[index] }
|
||||
.mapIndexed { index, _ -> (index + 1).toString() }
|
||||
.toSet()
|
||||
)
|
||||
LibraryUpdateService.start(
|
||||
context,
|
||||
target = LibraryUpdateService.Target.SYNC_FOLLOWS
|
||||
)
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
@ -4,8 +4,7 @@ import android.app.Dialog
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
@ -543,27 +542,32 @@ class SettingsReaderController : SettingsController() {
|
||||
private val preferences: PreferencesHelper = Injekt.get()
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
val selected = preferences.readerBottomButtons().get()
|
||||
val oldSelection = preferences.readerBottomButtons().get()
|
||||
val values = ReaderBottomButton.values()
|
||||
val items = values.map { it.value }
|
||||
|
||||
val preselected = selected.mapNotNull { selection -> items.indexOf(selection).takeUnless { it == -1 } }
|
||||
.toIntArray()
|
||||
val selection = values.map { it.value in oldSelection }
|
||||
.toBooleanArray()
|
||||
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.reader_bottom_buttons)
|
||||
.listItemsMultiChoice(
|
||||
items = values.map { activity!!.getString(it.stringRes) },
|
||||
initialSelection = preselected
|
||||
) { _, selections: IntArray, _ ->
|
||||
val included = selections
|
||||
.map { values[it].value }
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.reader_bottom_buttons)
|
||||
.setMultiChoiceItems(
|
||||
values.map { activity!!.getString(it.stringRes) }.toTypedArray(),
|
||||
selection
|
||||
) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
val included = values
|
||||
.filterIndexed { index, _ ->
|
||||
selection[index]
|
||||
}
|
||||
.map { it.value }
|
||||
.toSet()
|
||||
|
||||
preferences.readerBottomButtons().set(included)
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,7 @@ package eu.kanade.tachiyomi.ui.setting
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||
@ -99,7 +98,7 @@ class SettingsSecurityController : SettingsController() {
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
val activity = activity!!
|
||||
val options = arrayOf(
|
||||
val options = listOf(
|
||||
R.string.sunday,
|
||||
R.string.monday,
|
||||
R.string.tuesday,
|
||||
@ -109,10 +108,11 @@ class SettingsSecurityController : SettingsController() {
|
||||
R.string.saturday
|
||||
)
|
||||
.map { activity.getString(it) }
|
||||
.toTypedArray()
|
||||
|
||||
val lockDays = preferences.authenticatorDays().get()
|
||||
val initialSelection = List(7) {
|
||||
val locked = when (it) {
|
||||
val selection = BooleanArray(7) {
|
||||
when (it) {
|
||||
0 -> (lockDays and SecureActivityDelegate.LOCK_SUNDAY) == SecureActivityDelegate.LOCK_SUNDAY
|
||||
1 -> (lockDays and SecureActivityDelegate.LOCK_MONDAY) == SecureActivityDelegate.LOCK_MONDAY
|
||||
2 -> (lockDays and SecureActivityDelegate.LOCK_TUESDAY) == SecureActivityDelegate.LOCK_TUESDAY
|
||||
@ -122,35 +122,36 @@ class SettingsSecurityController : SettingsController() {
|
||||
6 -> (lockDays and SecureActivityDelegate.LOCK_SATURDAY) == SecureActivityDelegate.LOCK_SATURDAY
|
||||
else -> false
|
||||
}
|
||||
if (locked) {
|
||||
it
|
||||
} else null
|
||||
}.filterNotNull().toIntArray()
|
||||
}
|
||||
|
||||
return MaterialDialog(activity)
|
||||
.title(R.string.biometric_lock_days)
|
||||
.message(R.string.biometric_lock_days_summary)
|
||||
.listItemsMultiChoice(
|
||||
items = options,
|
||||
initialSelection = initialSelection
|
||||
) { _, positions, _ ->
|
||||
return MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.biometric_lock_days)
|
||||
.setMultiChoiceItems(
|
||||
options,
|
||||
selection
|
||||
) { _, which, selected ->
|
||||
selection[which] = selected
|
||||
}
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
var flags = 0
|
||||
positions.forEach {
|
||||
when (it) {
|
||||
0 -> flags = flags or SecureActivityDelegate.LOCK_SUNDAY
|
||||
1 -> flags = flags or SecureActivityDelegate.LOCK_MONDAY
|
||||
2 -> flags = flags or SecureActivityDelegate.LOCK_TUESDAY
|
||||
3 -> flags = flags or SecureActivityDelegate.LOCK_WEDNESDAY
|
||||
4 -> flags = flags or SecureActivityDelegate.LOCK_THURSDAY
|
||||
5 -> flags = flags or SecureActivityDelegate.LOCK_FRIDAY
|
||||
6 -> flags = flags or SecureActivityDelegate.LOCK_SATURDAY
|
||||
selection.forEachIndexed { index, checked ->
|
||||
if (checked) {
|
||||
when (index) {
|
||||
0 -> flags = flags or SecureActivityDelegate.LOCK_SUNDAY
|
||||
1 -> flags = flags or SecureActivityDelegate.LOCK_MONDAY
|
||||
2 -> flags = flags or SecureActivityDelegate.LOCK_TUESDAY
|
||||
3 -> flags = flags or SecureActivityDelegate.LOCK_WEDNESDAY
|
||||
4 -> flags = flags or SecureActivityDelegate.LOCK_THURSDAY
|
||||
5 -> flags = flags or SecureActivityDelegate.LOCK_FRIDAY
|
||||
6 -> flags = flags or SecureActivityDelegate.LOCK_SATURDAY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preferences.authenticatorDays().set(flags)
|
||||
}
|
||||
.positiveButton(android.R.string.ok)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,2 +1,93 @@
|
||||
package eu.kanade.tachiyomi.ui.setting.eh
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.ScrollView
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.databinding.EhDialogCategoriesBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsEhController
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class FrontPageCategoriesDialog(
|
||||
bundle: Bundle? = null
|
||||
) : DialogController(bundle) {
|
||||
|
||||
var binding: EhDialogCategoriesBinding? = null
|
||||
private set
|
||||
|
||||
val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
binding = EhDialogCategoriesBinding.inflate(LayoutInflater.from(activity!!))
|
||||
val view = ScrollView(binding!!.root.context).apply {
|
||||
addView(binding!!.root)
|
||||
}
|
||||
onViewCreated()
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.language_filtering)
|
||||
.setMessage(R.string.language_filtering_summary)
|
||||
.setView(view)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
onPositive()
|
||||
}
|
||||
.setOnDismissListener {
|
||||
onPositive()
|
||||
}
|
||||
.setOnCancelListener {
|
||||
onPositive()
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
fun onViewCreated() {
|
||||
with(binding!!) {
|
||||
val list = preferences.exhEnabledCategories().get().split(",").map { !it.toBoolean() }
|
||||
doujinshiCheckbox.isChecked = list[0]
|
||||
mangaCheckbox.isChecked = list[1]
|
||||
artistCgCheckbox.isChecked = list[2]
|
||||
gameCgCheckbox.isChecked = list[3]
|
||||
westernCheckbox.isChecked = list[4]
|
||||
nonHCheckbox.isChecked = list[5]
|
||||
imageSetCheckbox.isChecked = list[6]
|
||||
cosplayCheckbox.isChecked = list[7]
|
||||
asianPornCheckbox.isChecked = list[8]
|
||||
miscCheckbox.isChecked = list[9]
|
||||
}
|
||||
}
|
||||
|
||||
fun onPositive() {
|
||||
with(binding!!) {
|
||||
preferences.exhEnabledCategories().set(
|
||||
listOf(
|
||||
(!doujinshiCheckbox.isChecked),
|
||||
(!mangaCheckbox.isChecked),
|
||||
(!artistCgCheckbox.isChecked),
|
||||
(!gameCgCheckbox.isChecked),
|
||||
(!westernCheckbox.isChecked),
|
||||
(!nonHCheckbox.isChecked),
|
||||
(!imageSetCheckbox.isChecked),
|
||||
(!cosplayCheckbox.isChecked),
|
||||
(!asianPornCheckbox.isChecked),
|
||||
(!miscCheckbox.isChecked)
|
||||
).joinToString(separator = ",") { it.toString() }
|
||||
)
|
||||
}
|
||||
with(targetController as? SettingsEhController ?: return) {
|
||||
preferences.exhSettingsLanguages().reconfigure()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||
super.onChangeStarted(handler, type)
|
||||
if (!type.isEnter) {
|
||||
binding = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,183 @@
|
||||
package eu.kanade.tachiyomi.ui.setting.eh
|
||||
|
||||
class LanguagesDialog {
|
||||
}
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.ScrollView
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.databinding.EhDialogLanguagesBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsEhController
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class LanguagesDialog(
|
||||
bundle: Bundle? = null
|
||||
) : DialogController(bundle) {
|
||||
|
||||
var binding: EhDialogLanguagesBinding? = null
|
||||
private set
|
||||
|
||||
val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
binding = EhDialogLanguagesBinding.inflate(LayoutInflater.from(activity!!))
|
||||
val view = ScrollView(binding!!.root.context).apply {
|
||||
addView(binding!!.root)
|
||||
}
|
||||
onViewCreated()
|
||||
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.language_filtering)
|
||||
.setMessage(R.string.language_filtering_summary)
|
||||
.setView(view)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
onPositive()
|
||||
}
|
||||
.setOnDismissListener {
|
||||
onPositive()
|
||||
}
|
||||
.setOnCancelListener {
|
||||
onPositive()
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
fun onViewCreated() {
|
||||
val settingsLanguages = preferences.exhSettingsLanguages().get().split("\n")
|
||||
|
||||
val japanese = settingsLanguages[0].split("*").map { it.toBoolean() }
|
||||
val english = settingsLanguages[1].split("*").map { it.toBoolean() }
|
||||
val chinese = settingsLanguages[2].split("*").map { it.toBoolean() }
|
||||
val dutch = settingsLanguages[3].split("*").map { it.toBoolean() }
|
||||
val french = settingsLanguages[4].split("*").map { it.toBoolean() }
|
||||
val german = settingsLanguages[5].split("*").map { it.toBoolean() }
|
||||
val hungarian = settingsLanguages[6].split("*").map { it.toBoolean() }
|
||||
val italian = settingsLanguages[7].split("*").map { it.toBoolean() }
|
||||
val korean = settingsLanguages[8].split("*").map { it.toBoolean() }
|
||||
val polish = settingsLanguages[9].split("*").map { it.toBoolean() }
|
||||
val portuguese = settingsLanguages[10].split("*").map { it.toBoolean() }
|
||||
val russian = settingsLanguages[11].split("*").map { it.toBoolean() }
|
||||
val spanish = settingsLanguages[12].split("*").map { it.toBoolean() }
|
||||
val thai = settingsLanguages[13].split("*").map { it.toBoolean() }
|
||||
val vietnamese = settingsLanguages[14].split("*").map { it.toBoolean() }
|
||||
val notAvailable =
|
||||
settingsLanguages[15].split("*").map { it.toBoolean() }
|
||||
val other = settingsLanguages[16].split("*").map { it.toBoolean() }
|
||||
|
||||
with(binding!!) {
|
||||
japaneseOriginal.isChecked = japanese[0]
|
||||
japaneseTranslated.isChecked = japanese[1]
|
||||
japaneseRewrite.isChecked = japanese[2]
|
||||
|
||||
japaneseOriginal.isChecked = japanese[0]
|
||||
japaneseTranslated.isChecked = japanese[1]
|
||||
japaneseRewrite.isChecked = japanese[2]
|
||||
|
||||
englishOriginal.isChecked = english[0]
|
||||
englishTranslated.isChecked = english[1]
|
||||
englishRewrite.isChecked = english[2]
|
||||
|
||||
chineseOriginal.isChecked = chinese[0]
|
||||
chineseTranslated.isChecked = chinese[1]
|
||||
chineseRewrite.isChecked = chinese[2]
|
||||
|
||||
dutchOriginal.isChecked = dutch[0]
|
||||
dutchTranslated.isChecked = dutch[1]
|
||||
dutchRewrite.isChecked = dutch[2]
|
||||
|
||||
frenchOriginal.isChecked = french[0]
|
||||
frenchTranslated.isChecked = french[1]
|
||||
frenchRewrite.isChecked = french[2]
|
||||
|
||||
germanOriginal.isChecked = german[0]
|
||||
germanTranslated.isChecked = german[1]
|
||||
germanRewrite.isChecked = german[2]
|
||||
|
||||
hungarianOriginal.isChecked = hungarian[0]
|
||||
hungarianTranslated.isChecked = hungarian[1]
|
||||
hungarianRewrite.isChecked = hungarian[2]
|
||||
|
||||
italianOriginal.isChecked = italian[0]
|
||||
italianTranslated.isChecked = italian[1]
|
||||
italianRewrite.isChecked = italian[2]
|
||||
|
||||
koreanOriginal.isChecked = korean[0]
|
||||
koreanTranslated.isChecked = korean[1]
|
||||
koreanRewrite.isChecked = korean[2]
|
||||
|
||||
polishOriginal.isChecked = polish[0]
|
||||
polishTranslated.isChecked = polish[1]
|
||||
polishRewrite.isChecked = polish[2]
|
||||
|
||||
portugueseOriginal.isChecked = portuguese[0]
|
||||
portugueseTranslated.isChecked = portuguese[1]
|
||||
portugueseRewrite.isChecked = portuguese[2]
|
||||
|
||||
russianOriginal.isChecked = russian[0]
|
||||
russianTranslated.isChecked = russian[1]
|
||||
russianRewrite.isChecked = russian[2]
|
||||
|
||||
spanishOriginal.isChecked = spanish[0]
|
||||
spanishTranslated.isChecked = spanish[1]
|
||||
spanishRewrite.isChecked = spanish[2]
|
||||
|
||||
thaiOriginal.isChecked = thai[0]
|
||||
thaiTranslated.isChecked = thai[1]
|
||||
thaiRewrite.isChecked = thai[2]
|
||||
|
||||
vietnameseOriginal.isChecked = vietnamese[0]
|
||||
vietnameseTranslated.isChecked = vietnamese[1]
|
||||
vietnameseRewrite.isChecked = vietnamese[2]
|
||||
|
||||
notAvailableOriginal.isChecked = notAvailable[0]
|
||||
notAvailableTranslated.isChecked = notAvailable[1]
|
||||
notAvailableRewrite.isChecked = notAvailable[2]
|
||||
|
||||
otherOriginal.isChecked = other[0]
|
||||
otherTranslated.isChecked = other[1]
|
||||
otherRewrite.isChecked = other[2]
|
||||
}
|
||||
}
|
||||
|
||||
fun onPositive() {
|
||||
val languages = with(binding!!) {
|
||||
listOf(
|
||||
"${japaneseOriginal.isChecked}*${japaneseTranslated.isChecked}*${japaneseRewrite.isChecked}",
|
||||
"${englishOriginal.isChecked}*${englishTranslated.isChecked}*${englishRewrite.isChecked}",
|
||||
"${chineseOriginal.isChecked}*${chineseTranslated.isChecked}*${chineseRewrite.isChecked}",
|
||||
"${dutchOriginal.isChecked}*${dutchTranslated.isChecked}*${dutchRewrite.isChecked}",
|
||||
"${frenchOriginal.isChecked}*${frenchTranslated.isChecked}*${frenchRewrite.isChecked}",
|
||||
"${germanOriginal.isChecked}*${germanTranslated.isChecked}*${germanRewrite.isChecked}",
|
||||
"${hungarianOriginal.isChecked}*${hungarianTranslated.isChecked}*${hungarianRewrite.isChecked}",
|
||||
"${italianOriginal.isChecked}*${italianTranslated.isChecked}*${italianRewrite.isChecked}",
|
||||
"${koreanOriginal.isChecked}*${koreanTranslated.isChecked}*${koreanRewrite.isChecked}",
|
||||
"${polishOriginal.isChecked}*${polishTranslated.isChecked}*${polishRewrite.isChecked}",
|
||||
"${portugueseOriginal.isChecked}*${portugueseTranslated.isChecked}*${portugueseRewrite.isChecked}",
|
||||
"${russianOriginal.isChecked}*${russianTranslated.isChecked}*${russianRewrite.isChecked}",
|
||||
"${spanishOriginal.isChecked}*${spanishTranslated.isChecked}*${spanishRewrite.isChecked}",
|
||||
"${thaiOriginal.isChecked}*${thaiTranslated.isChecked}*${thaiRewrite.isChecked}",
|
||||
"${vietnameseOriginal.isChecked}*${vietnameseTranslated.isChecked}*${vietnameseRewrite.isChecked}",
|
||||
"${notAvailableOriginal.isChecked}*${notAvailableTranslated.isChecked}*${notAvailableRewrite.isChecked}",
|
||||
"${otherOriginal.isChecked}*${otherTranslated.isChecked}*${otherRewrite.isChecked}"
|
||||
).joinToString("\n")
|
||||
}
|
||||
|
||||
preferences.exhSettingsLanguages().set(languages)
|
||||
|
||||
with(targetController as? SettingsEhController ?: return) {
|
||||
preferences.exhSettingsLanguages().reconfigure()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||
super.onChangeStarted(handler, type)
|
||||
if (!type.isEnter) {
|
||||
binding = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import android.app.Activity
|
||||
import android.util.Log
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.preference.PreferenceScreen
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||
import eu.kanade.tachiyomi.util.preference.onClick
|
||||
@ -36,23 +36,13 @@ class SettingsDebugController : SettingsController() {
|
||||
try {
|
||||
val result = it.call(DebugFunctions)
|
||||
val text = "Function returned result:\n\n$result"
|
||||
MaterialDialog(context)
|
||||
.title(text = title.toString())
|
||||
.message(text = text) {
|
||||
messageTextView.apply {
|
||||
setHorizontallyScrolling(true)
|
||||
setTextIsSelectable(true)
|
||||
}
|
||||
}
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setTitle(title.toString())
|
||||
.setMessage(text)
|
||||
} catch (t: Throwable) {
|
||||
val text = "Function threw exception:\n\n${Log.getStackTraceString(t)}"
|
||||
MaterialDialog(context)
|
||||
.message(text = text) {
|
||||
messageTextView.apply {
|
||||
setHorizontallyScrolling(true)
|
||||
setTextIsSelectable(true)
|
||||
}
|
||||
}
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setMessage(text)
|
||||
}.show()
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package exh.favorites
|
||||
|
||||
import android.content.Context
|
||||
import androidx.core.text.HtmlCompat
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
@ -10,12 +10,12 @@ import uy.kohesive.injekt.injectLazy
|
||||
class FavoritesIntroDialog {
|
||||
private val prefs: PreferencesHelper by injectLazy()
|
||||
|
||||
fun show(context: Context) = MaterialDialog(context)
|
||||
.title(R.string.favorites_sync_notes)
|
||||
.message(text = HtmlCompat.fromHtml(context.getString(R.string.favorites_sync_notes_message), HtmlCompat.FROM_HTML_MODE_LEGACY))
|
||||
.positiveButton(android.R.string.ok) {
|
||||
fun show(context: Context) = MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.favorites_sync_notes)
|
||||
.setMessage(HtmlCompat.fromHtml(context.getString(R.string.favorites_sync_notes_message), HtmlCompat.FROM_HTML_MODE_LEGACY))
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
prefs.exhShowSyncIntro().set(false)
|
||||
}
|
||||
.cancelable(false)
|
||||
.setCancelable(false)
|
||||
.show()
|
||||
}
|
||||
|
@ -3,7 +3,8 @@ package exh.uconfig
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
@ -14,7 +15,7 @@ import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.cancel
|
||||
|
||||
class ConfiguringDialogController : DialogController() {
|
||||
private var materialDialog: MaterialDialog? = null
|
||||
private var materialDialog: AlertDialog? = null
|
||||
val scope = MainScope()
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
@ -28,10 +29,10 @@ class ConfiguringDialogController : DialogController() {
|
||||
} catch (e: Exception) {
|
||||
launchUI {
|
||||
activity?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.eh_settings_configuration_failed)
|
||||
.message(text = it.getString(R.string.eh_settings_configuration_failed_message, e.message))
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.eh_settings_configuration_failed)
|
||||
.setMessage(it.getString(R.string.eh_settings_configuration_failed_message, e.message))
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
@ -43,10 +44,11 @@ class ConfiguringDialogController : DialogController() {
|
||||
}
|
||||
}
|
||||
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.eh_settings_uploading_to_server)
|
||||
.message(R.string.eh_settings_uploading_to_server_message)
|
||||
.cancelable(false)
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.eh_settings_uploading_to_server)
|
||||
.setMessage(R.string.eh_settings_uploading_to_server_message)
|
||||
.setCancelable(false)
|
||||
.create()
|
||||
.also {
|
||||
materialDialog = it
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ package exh.uconfig
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.bluelinelabs.conductor.Router
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
@ -14,14 +14,15 @@ import uy.kohesive.injekt.injectLazy
|
||||
class WarnConfigureDialogController : DialogController() {
|
||||
private val prefs: PreferencesHelper by injectLazy()
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.settings_profile_note)
|
||||
.message(R.string.settings_profile_note_message)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.settings_profile_note)
|
||||
.setMessage(R.string.settings_profile_note_message)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
prefs.exhShowSettingsUploadWarning().set(false)
|
||||
ConfiguringDialogController().showDialog(router)
|
||||
}
|
||||
.cancelable(false)
|
||||
.setCancelable(false)
|
||||
.create()
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -3,7 +3,7 @@ package exh.ui.batchadd
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.databinding.EhFragmentBatchAddBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
@ -143,12 +143,10 @@ class BatchAddController : NucleusController<EhFragmentBatchAddBinding, BatchAdd
|
||||
|
||||
private fun noGalleriesSpecified() {
|
||||
activity?.let {
|
||||
MaterialDialog(it)
|
||||
.title(R.string.batch_add_no_valid_galleries)
|
||||
.message(R.string.batch_add_no_valid_galleries_message)
|
||||
.positiveButton(android.R.string.ok) { materialDialog -> materialDialog.dismiss() }
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.setTitle(R.string.batch_add_no_valid_galleries)
|
||||
.setMessage(R.string.batch_add_no_valid_galleries_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import android.webkit.JsResult
|
||||
import android.webkit.WebChromeClient
|
||||
import android.webkit.WebView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.databinding.EhActivityCaptchaBinding
|
||||
@ -190,12 +190,10 @@ class BrowserActionActivity : AppCompatActivity() {
|
||||
xLogE("Captcha solve Error", IllegalStateException("Captcha solve failure!"))
|
||||
withUIContext {
|
||||
binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null)
|
||||
MaterialDialog(this@BrowserActionActivity)
|
||||
.title(R.string.captcha_solve_failure)
|
||||
.message(R.string.captcha_solve_failure_message)
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
.positiveButton(android.R.string.ok)
|
||||
MaterialAlertDialogBuilder(this@BrowserActionActivity)
|
||||
.setTitle(R.string.captcha_solve_failure)
|
||||
.setMessage(R.string.captcha_solve_failure_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
@ -5,10 +5,7 @@ import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.callbacks.onCancel
|
||||
import com.afollestad.materialdialogs.callbacks.onDismiss
|
||||
import com.afollestad.materialdialogs.list.listItemsSingleChoice
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@ -83,14 +80,12 @@ class InterceptActivity : BaseViewBindingActivity<EhActivityInterceptBinding>()
|
||||
is InterceptResult.Failure -> {
|
||||
binding.interceptProgress.isVisible = false
|
||||
binding.interceptStatus.text = this.getString(R.string.error_with_reason, it.reason)
|
||||
MaterialDialog(this)
|
||||
.title(R.string.chapter_error)
|
||||
.message(text = this.getString(R.string.could_not_open_manga, it.reason))
|
||||
.cancelable(true)
|
||||
.cancelOnTouchOutside(true)
|
||||
.positiveButton(android.R.string.ok)
|
||||
.onCancel { onBackPressed() }
|
||||
.onDismiss { onBackPressed() }
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.chapter_error)
|
||||
.setMessage(getString(R.string.could_not_open_manga, it.reason))
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.setOnCancelListener { onBackPressed() }
|
||||
.setOnDismissListener { onBackPressed() }
|
||||
.show()
|
||||
}
|
||||
}
|
||||
@ -114,9 +109,10 @@ class InterceptActivity : BaseViewBindingActivity<EhActivityInterceptBinding>()
|
||||
status.value = InterceptResult.Loading
|
||||
val sources = galleryAdder.pickSource(gallery)
|
||||
if (sources.size > 1) {
|
||||
MaterialDialog(this)
|
||||
.title(R.string.label_sources)
|
||||
.listItemsSingleChoice(items = sources.map { it.toString() }) { _, index, _ ->
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.label_sources)
|
||||
.setSingleChoiceItems(sources.map { it.toString() }.toTypedArray(), 0) { dialog, index ->
|
||||
dialog.dismiss()
|
||||
loadGalleryEnd(gallery, sources[index])
|
||||
}
|
||||
.show()
|
||||
|
@ -13,8 +13,7 @@ import android.widget.Toast
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.input.input
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
@ -25,6 +24,7 @@ import eu.kanade.tachiyomi.util.lang.launchUI
|
||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput
|
||||
import exh.log.xLogD
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
@ -147,18 +147,18 @@ class EhLoginActivity : BaseViewBindingActivity<EhActivityLoginBinding>() {
|
||||
|
||||
private fun openIgneousDialog() {
|
||||
var igneous: CharSequence? = null
|
||||
MaterialDialog(this)
|
||||
.title(R.string.custom_igneous_cookie)
|
||||
.message(R.string.custom_igneous_cookie_message)
|
||||
.input { _, charSequence ->
|
||||
igneous = charSequence
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.custom_igneous_cookie)
|
||||
.setMessage(R.string.custom_igneous_cookie_message)
|
||||
.setTextInput { igneousText ->
|
||||
igneous = igneousText
|
||||
}
|
||||
.positiveButton(android.R.string.ok) {
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
if (!igneous.isNullOrBlank()) {
|
||||
this.igneous = igneous?.toString()?.trim()
|
||||
}
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
|
@ -5,11 +5,10 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isVisible
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.customview.customView
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.dd.processbutton.iml.ActionProcessButton
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.databinding.PrefSiteLoginTwoFactorAuthBinding
|
||||
@ -48,12 +47,10 @@ class MangadexLoginDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
binding = PrefSiteLoginTwoFactorAuthBinding.inflate(LayoutInflater.from(activity!!))
|
||||
val dialog = MaterialDialog(activity!!)
|
||||
.customView(view = binding.root, scrollable = false)
|
||||
|
||||
onViewCreated()
|
||||
|
||||
return dialog
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setView(binding.root)
|
||||
.create()
|
||||
}
|
||||
|
||||
fun onViewCreated() {
|
||||
|
@ -3,7 +3,7 @@ package exh.widget.preference
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
@ -34,9 +34,9 @@ class MangadexLogoutDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
)
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.logout)
|
||||
.positiveButton(R.string.logout) {
|
||||
return MaterialAlertDialogBuilder(activity!!)
|
||||
.setTitle(R.string.logout)
|
||||
.setPositiveButton(R.string.logout) { _, _ ->
|
||||
launchNow {
|
||||
supervisorScope {
|
||||
if (source != null) {
|
||||
@ -66,7 +66,8 @@ class MangadexLogoutDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
}
|
||||
}
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
@ -221,7 +221,7 @@
|
||||
</plurals>
|
||||
<string name="biometric_lock_start_time">Enter starting time</string>
|
||||
<string name="biometric_lock_end_time">Enter end time</string>
|
||||
<string name="biometric_lock_time_deleted_snack">Biometric lock time completed</string>
|
||||
<string name="biometric_lock_time_deleted_snack">Biometric lock time deleted</string>
|
||||
<string name="biometric_lock_invalid_time_selected">Invalid time selected</string>
|
||||
<string name="biometric_lock_days">Biometric lock days</string>
|
||||
<string name="biometric_lock_days_summary">Days to have the app locked</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user