Fix everything about the sort by tag list
This commit is contained in:
parent
db70a62c8f
commit
67e1fee4c5
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.category.genre
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -9,6 +10,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
@ -43,6 +45,8 @@ class SortTagController :
|
||||
*/
|
||||
private var actionMode: ActionMode? = null
|
||||
|
||||
private var shownHelpDialog = false
|
||||
|
||||
/**
|
||||
* Adapter containing category items.
|
||||
*/
|
||||
@ -68,6 +72,10 @@ class SortTagController :
|
||||
return resources?.getString(R.string.action_edit_tags)
|
||||
}
|
||||
|
||||
init {
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the view of this controller.
|
||||
*
|
||||
@ -91,6 +99,7 @@ class SortTagController :
|
||||
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
||||
binding.recycler.setHasFixedSize(true)
|
||||
binding.recycler.adapter = adapter
|
||||
adapter?.isHandleDragEnabled = true
|
||||
adapter?.isPermanentDelete = false
|
||||
|
||||
actionFabScrollListener = actionFab?.shrinkOnScroll(binding.recycler)
|
||||
@ -102,7 +111,12 @@ class SortTagController :
|
||||
fab.setIconResource(R.drawable.ic_add_24dp)
|
||||
fab.clicks()
|
||||
.onEach {
|
||||
SortTagCreateDialog(this@SortTagController).showDialog(router, null)
|
||||
if (!shownHelpDialog) {
|
||||
shownHelpDialog = true
|
||||
helpDialog(true)
|
||||
} else {
|
||||
SortTagCreateDialog(this@SortTagController).showDialog(router, null)
|
||||
}
|
||||
}
|
||||
.launchIn(scope)
|
||||
}
|
||||
@ -145,6 +159,21 @@ class SortTagController :
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.sort_tags, menu)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.action_help -> {
|
||||
shownHelpDialog = true
|
||||
helpDialog()
|
||||
}
|
||||
else -> return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when action mode is first created. The menu supplied will be used to generate action
|
||||
* buttons for the action mode.
|
||||
@ -202,11 +231,27 @@ class SortTagController :
|
||||
)
|
||||
mode.finish()
|
||||
}
|
||||
R.id.action_help -> {
|
||||
shownHelpDialog = true
|
||||
helpDialog()
|
||||
}
|
||||
else -> return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun helpDialog(hasPositive: Boolean = false) {
|
||||
MaterialDialog(activity!!)
|
||||
.title(R.string.add_tag)
|
||||
.message(R.string.action_add_tags_message)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
if (hasPositive) {
|
||||
SortTagCreateDialog(this@SortTagController).showDialog(router, null)
|
||||
}
|
||||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an action mode is about to be exited and destroyed.
|
||||
*
|
||||
|
@ -32,7 +32,6 @@ class SortTagCreateDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.action_add_category)
|
||||
.message(R.string.action_add_tags_message)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.input(
|
||||
hint = resources?.getString(R.string.name),
|
||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.category.genre
|
||||
|
||||
import android.view.View
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import kotlinx.android.synthetic.main.categories_item.reorder
|
||||
import kotlinx.android.synthetic.main.categories_item.title
|
||||
|
||||
/**
|
||||
@ -11,13 +12,27 @@ import kotlinx.android.synthetic.main.categories_item.title
|
||||
* @param adapter The adapter containing this holder.
|
||||
*/
|
||||
class SortTagHolder(view: View, val adapter: SortTagAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
||||
|
||||
init {
|
||||
setDragHandleView(reorder)
|
||||
}
|
||||
|
||||
/**
|
||||
* Binds this holder with the given category.
|
||||
*
|
||||
* @param tag The tag to bind.
|
||||
*/
|
||||
fun bind(tag: String) {
|
||||
// Set capitalized title.
|
||||
title.text = tag
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an item is released.
|
||||
*
|
||||
* @param position The position of the released item.
|
||||
*/
|
||||
override fun onItemReleased(position: Int) {
|
||||
super.onItemReleased(position)
|
||||
adapter.onItemReleaseListener.onItemReleased(position)
|
||||
}
|
||||
}
|
||||
|
@ -60,6 +60,9 @@ class SortTagItem(val tag: String) : AbstractFlexibleItem<SortTagHolder>() {
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other is SortTagItem) {
|
||||
return tag == other.tag
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -264,6 +264,9 @@ class SettingsLibraryController : SettingsController() {
|
||||
titleRes = R.string.pref_tag_sorting
|
||||
val count = preferences.sortTagsForLibrary().get().size
|
||||
summary = resources!!.getQuantityString(R.plurals.pref_tag_sorting_desc, count, count)
|
||||
onClick {
|
||||
router.pushController(SortTagController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -279,10 +282,6 @@ class SettingsLibraryController : SettingsController() {
|
||||
titleRes = R.string.skip_pre_migration
|
||||
summaryRes = R.string.pref_skip_pre_migration_summary
|
||||
defaultValue = false
|
||||
|
||||
onClick {
|
||||
router.pushController(SortTagController().withFadeTransaction())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
11
app/src/main/res/menu/sort_tags.xml
Normal file
11
app/src/main/res/menu/sort_tags.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_help"
|
||||
android:icon="@drawable/ic_help_24dp"
|
||||
android:title="@string/label_help"
|
||||
app:showAsAction="always" />
|
||||
|
||||
</menu>
|
@ -294,7 +294,7 @@
|
||||
</plurals>
|
||||
<string name="pref_tag_sorting_desc">Tag sorting list</string>
|
||||
<string name="action_add_tags">Add tag</string>
|
||||
<string name="action_add_tags_message">Read this! Tags must be exact, there are no partial matches, you cannot do netorare to filter out female:netorare or similar!\nThe style for namespace tags is "female: sole female" without quotes!\nAdding multiple variants of the same tag is supported, so feel free to do "tag: netorare" for NHentai and "female: netorare" for E-Hentai!</string>
|
||||
<string name="action_add_tags_message">Read this! Tags must be exact, there are no partial matches, you cannot do netorare to filter out female:netorare or similar!\nThe style for namespace tags is\n\"female: sole female\"\nwithout quotes!\nAdding multiple variants of the same tag is supported, so feel free to do \"tag: netorare\" for NHentai and \"female: netorare\" for E-Hentai!</string>
|
||||
<string name="action_edit_tags">Edit tags</string>
|
||||
<string name="information_empty_tags">You have no tags. Tap the plus button to create one for sorting your library by tags</string>
|
||||
<string name="error_tag_exists">This tag exists!</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user