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