mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 15:41:52 +01:00
Toolbar Menu Items Fix
This commit is contained in:
parent
7008752639
commit
3e04619404
@ -85,10 +85,11 @@ abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateContr
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Workaround for disappearing menu items when collapsing an expandable item like a SearchView.
|
* Workaround for buggy menu item layout after expanding/collapsing an expandable item like a SearchView.
|
||||||
* This method should be removed when fixed upstream.
|
* This method should be removed when fixed upstream.
|
||||||
* Issue link: https://issuetracker.google.com/issues/37657375
|
* Issue link: https://issuetracker.google.com/issues/37657375
|
||||||
*/
|
*/
|
||||||
|
var expandActionViewFromInteraction = false
|
||||||
fun MenuItem.fixExpand(onExpand: ((MenuItem) -> Boolean)? = null, onCollapse: ((MenuItem) -> Boolean)? = null) {
|
fun MenuItem.fixExpand(onExpand: ((MenuItem) -> Boolean)? = null, onCollapse: ((MenuItem) -> Boolean)? = null) {
|
||||||
setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
|
setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
|
||||||
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
||||||
@ -101,6 +102,25 @@ abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateContr
|
|||||||
return onCollapse?.invoke(item) ?: true
|
return onCollapse?.invoke(item) ?: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (expandActionViewFromInteraction) {
|
||||||
|
expandActionViewFromInteraction = false
|
||||||
|
expandActionView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Workaround for menu items not disappearing when expanding an expandable item like a SearchView.
|
||||||
|
* [expandActionViewFromInteraction] should be set to true in [onOptionsItemSelected] when the expandable item is selected
|
||||||
|
* This method should be called as part of [MenuItem.OnActionExpandListener.onMenuItemActionExpand]
|
||||||
|
*/
|
||||||
|
fun invalidateMenuOnExpand(): Boolean {
|
||||||
|
return if (expandActionViewFromInteraction) {
|
||||||
|
activity?.invalidateOptionsMenu()
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -261,12 +261,12 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
inflater.inflate(R.menu.catalogue_list, menu)
|
inflater.inflate(R.menu.catalogue_list, menu)
|
||||||
|
|
||||||
// Initialize search menu
|
// Initialize search menu
|
||||||
menu.findItem(R.id.action_search).apply {
|
val searchItem = menu.findItem(R.id.action_search)
|
||||||
val searchView = actionView as SearchView
|
val searchView = searchItem.actionView as SearchView
|
||||||
|
|
||||||
val query = presenter.query
|
val query = presenter.query
|
||||||
if (!query.isBlank()) {
|
if (!query.isBlank()) {
|
||||||
expandActionView()
|
searchItem.expandActionView()
|
||||||
searchView.setQuery(query, true)
|
searchView.setQuery(query, true)
|
||||||
searchView.clearFocus()
|
searchView.clearFocus()
|
||||||
}
|
}
|
||||||
@ -286,11 +286,13 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
.map { it.queryText().toString() }
|
.map { it.queryText().toString() }
|
||||||
.subscribeUntilDestroy { searchWithQuery(it) }
|
.subscribeUntilDestroy { searchWithQuery(it) }
|
||||||
|
|
||||||
fixExpand(onCollapse = {
|
searchItem.fixExpand(
|
||||||
|
onExpand = { invalidateMenuOnExpand() },
|
||||||
|
onCollapse = {
|
||||||
searchWithQuery("")
|
searchWithQuery("")
|
||||||
true
|
true
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Setup filters button
|
// Setup filters button
|
||||||
menu.findItem(R.id.action_set_filter).apply {
|
menu.findItem(R.id.action_set_filter).apply {
|
||||||
@ -324,6 +326,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
|
|||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
|
R.id.action_search -> expandActionViewFromInteraction = true
|
||||||
R.id.action_display_mode -> swapDisplayMode()
|
R.id.action_display_mode -> swapDisplayMode()
|
||||||
R.id.action_set_filter -> navView?.let { activity?.drawer?.openDrawer(GravityCompat.END) }
|
R.id.action_set_filter -> navView?.let { activity?.drawer?.openDrawer(GravityCompat.END) }
|
||||||
R.id.action_open_in_browser -> openInBrowser()
|
R.id.action_open_in_browser -> openInBrowser()
|
||||||
|
@ -85,6 +85,7 @@ open class ExtensionController : NucleusController<ExtensionPresenter>(),
|
|||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
|
R.id.action_search -> expandActionViewFromInteraction = true
|
||||||
R.id.action_filter -> {
|
R.id.action_filter -> {
|
||||||
router.pushController((RouterTransaction.with(SettingsExtensionsController()))
|
router.pushController((RouterTransaction.with(SettingsExtensionsController()))
|
||||||
.popChangeHandler(SettingsExtensionsFadeChangeHandler())
|
.popChangeHandler(SettingsExtensionsFadeChangeHandler())
|
||||||
@ -152,7 +153,7 @@ open class ExtensionController : NucleusController<ExtensionPresenter>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fixes problem with the overflow icon showing up in lieu of search
|
// Fixes problem with the overflow icon showing up in lieu of search
|
||||||
searchItem.fixExpand()
|
searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
|
||||||
|
|
||||||
val autoItem = menu.findItem(R.id.action_auto_check)
|
val autoItem = menu.findItem(R.id.action_auto_check)
|
||||||
val preferences:PreferencesHelper = Injekt.get()
|
val preferences:PreferencesHelper = Injekt.get()
|
||||||
|
@ -449,7 +449,7 @@ class LibraryController(
|
|||||||
searchRelay.call(query)
|
searchRelay.call(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
searchItem.fixExpand()
|
searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
|
||||||
}
|
}
|
||||||
|
|
||||||
fun search(query:String) {
|
fun search(query:String) {
|
||||||
@ -468,6 +468,7 @@ class LibraryController(
|
|||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
|
R.id.action_search -> expandActionViewFromInteraction = true
|
||||||
R.id.action_filter -> {
|
R.id.action_filter -> {
|
||||||
navView?.let { activity?.drawer?.openDrawer(GravityCompat.END) }
|
navView?.let { activity?.drawer?.openDrawer(GravityCompat.END) }
|
||||||
}
|
}
|
||||||
|
@ -185,16 +185,36 @@ class SettingsSourcesController : SettingsController(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fixes problem with the overflow icon showing up in lieu of search
|
// Fixes problem with the overflow icon showing up in lieu of search
|
||||||
searchItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
|
searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
|
||||||
|
}
|
||||||
|
|
||||||
|
var expandActionViewFromInteraction = false
|
||||||
|
private fun MenuItem.fixExpand(onExpand: ((MenuItem) -> Boolean)? = null, onCollapse: ((MenuItem) -> Boolean)? = null) {
|
||||||
|
setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
|
||||||
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
||||||
return true
|
return onExpand?.invoke(item) ?: true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
||||||
activity?.invalidateOptionsMenu()
|
activity?.invalidateOptionsMenu()
|
||||||
return true
|
|
||||||
|
return onCollapse?.invoke(item) ?: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (expandActionViewFromInteraction) {
|
||||||
|
expandActionViewFromInteraction = false
|
||||||
|
expandActionView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun invalidateMenuOnExpand(): Boolean {
|
||||||
|
return if (expandActionViewFromInteraction) {
|
||||||
|
activity?.invalidateOptionsMenu()
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun drawSources() {
|
private fun drawSources() {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
android:id="@+id/action_filter"
|
android:id="@+id/action_filter"
|
||||||
android:title="@string/action_filter"
|
android:title="@string/action_filter"
|
||||||
android:icon="@drawable/ic_filter_list_white_24dp"
|
android:icon="@drawable/ic_filter_list_white_24dp"
|
||||||
app:showAsAction="always"/>
|
app:showAsAction="ifRoom"/>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_auto_check"
|
android:id="@+id/action_auto_check"
|
||||||
|
Loading…
Reference in New Issue
Block a user