Fix details bottom sheet menu
This commit is contained in:
@@ -8,6 +8,8 @@ import android.view.View.MeasureSpec
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.Checkable
|
import android.widget.Checkable
|
||||||
|
import androidx.appcompat.widget.ActionMenuView
|
||||||
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.core.view.descendants
|
import androidx.core.view.descendants
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
@@ -153,3 +155,9 @@ fun View.setOnContextClickListenerCompat(listener: View.OnLongClickListener) {
|
|||||||
setOnContextClickListener(listener::onLongClick)
|
setOnContextClickListener(listener::onLongClick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val Toolbar.menuView: ActionMenuView?
|
||||||
|
get() {
|
||||||
|
menu // to call ensureMenu()
|
||||||
|
return children.firstNotNullOfOrNull { it as? ActionMenuView }
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import androidx.appcompat.widget.PopupMenu
|
|||||||
import androidx.core.graphics.Insets
|
import androidx.core.graphics.Insets
|
||||||
import androidx.core.text.buildSpannedString
|
import androidx.core.text.buildSpannedString
|
||||||
import androidx.core.text.inSpans
|
import androidx.core.text.inSpans
|
||||||
|
import androidx.core.view.MenuHost
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
@@ -46,6 +47,7 @@ import org.koitharu.kotatsu.core.util.ext.getAnimationDuration
|
|||||||
import org.koitharu.kotatsu.core.util.ext.getThemeColor
|
import org.koitharu.kotatsu.core.util.ext.getThemeColor
|
||||||
import org.koitharu.kotatsu.core.util.ext.isAnimationsEnabled
|
import org.koitharu.kotatsu.core.util.ext.isAnimationsEnabled
|
||||||
import org.koitharu.kotatsu.core.util.ext.measureHeight
|
import org.koitharu.kotatsu.core.util.ext.measureHeight
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.menuView
|
||||||
import org.koitharu.kotatsu.core.util.ext.observe
|
import org.koitharu.kotatsu.core.util.ext.observe
|
||||||
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
||||||
import org.koitharu.kotatsu.core.util.ext.recyclerView
|
import org.koitharu.kotatsu.core.util.ext.recyclerView
|
||||||
@@ -84,7 +86,12 @@ class DetailsActivity :
|
|||||||
private var buttonTip: WeakReference<ButtonTip>? = null
|
private var buttonTip: WeakReference<ButtonTip>? = null
|
||||||
|
|
||||||
private val viewModel: DetailsViewModel by viewModels()
|
private val viewModel: DetailsViewModel by viewModels()
|
||||||
private lateinit var chaptersMenuProvider: ChaptersMenuProvider
|
|
||||||
|
val secondaryMenuHost: MenuHost
|
||||||
|
get() = viewBinding.toolbarChapters ?: this
|
||||||
|
|
||||||
|
var bottomSheetMediator: ChaptersBottomSheetMediator? = null
|
||||||
|
private set
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -104,17 +111,13 @@ class DetailsActivity :
|
|||||||
actionModeDelegate.addListener(bsMediator)
|
actionModeDelegate.addListener(bsMediator)
|
||||||
checkNotNull(viewBinding.layoutBsHeader).addOnLayoutChangeListener(bsMediator)
|
checkNotNull(viewBinding.layoutBsHeader).addOnLayoutChangeListener(bsMediator)
|
||||||
onBackPressedDispatcher.addCallback(bsMediator)
|
onBackPressedDispatcher.addCallback(bsMediator)
|
||||||
chaptersMenuProvider = ChaptersMenuProvider(viewModel, bsMediator)
|
bottomSheetMediator = bsMediator
|
||||||
behavior.doOnExpansionsChanged(::onChaptersSheetStateChanged)
|
behavior.doOnExpansionsChanged(::onChaptersSheetStateChanged)
|
||||||
viewBinding.toolbarChapters?.setNavigationOnClickListener {
|
viewBinding.toolbarChapters?.setNavigationOnClickListener {
|
||||||
behavior.state = BottomSheetBehavior.STATE_COLLAPSED
|
behavior.state = BottomSheetBehavior.STATE_COLLAPSED
|
||||||
}
|
}
|
||||||
viewBinding.toolbarChapters?.setOnGenericMotionListener(bsMediator)
|
viewBinding.toolbarChapters?.setOnGenericMotionListener(bsMediator)
|
||||||
} else {
|
|
||||||
chaptersMenuProvider = ChaptersMenuProvider(viewModel, null)
|
|
||||||
addMenuProvider(chaptersMenuProvider)
|
|
||||||
}
|
}
|
||||||
onBackPressedDispatcher.addCallback(chaptersMenuProvider)
|
|
||||||
initPager()
|
initPager()
|
||||||
|
|
||||||
viewModel.manga.filterNotNull().observe(this, ::onMangaUpdated)
|
viewModel.manga.filterNotNull().observe(this, ::onMangaUpdated)
|
||||||
@@ -223,12 +226,11 @@ class DetailsActivity :
|
|||||||
TransitionManager.beginDelayedTransition(toolbar, transition)
|
TransitionManager.beginDelayedTransition(toolbar, transition)
|
||||||
}
|
}
|
||||||
if (isExpanded) {
|
if (isExpanded) {
|
||||||
toolbar.addMenuProvider(chaptersMenuProvider)
|
|
||||||
toolbar.setNavigationIconSafe(materialR.drawable.abc_ic_clear_material)
|
toolbar.setNavigationIconSafe(materialR.drawable.abc_ic_clear_material)
|
||||||
} else {
|
} else {
|
||||||
toolbar.removeMenuProvider(chaptersMenuProvider)
|
|
||||||
toolbar.navigationIcon = null
|
toolbar.navigationIcon = null
|
||||||
}
|
}
|
||||||
|
toolbar.menuView?.isVisible = isExpanded
|
||||||
viewBinding.buttonRead.isGone = isExpanded
|
viewBinding.buttonRead.isGone = isExpanded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
|
|||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.details.ui.ChaptersFragment
|
import org.koitharu.kotatsu.details.ui.pager.chapters.ChaptersFragment
|
||||||
import org.koitharu.kotatsu.details.ui.pager.pages.PagesFragment
|
import org.koitharu.kotatsu.details.ui.pager.pages.PagesFragment
|
||||||
|
|
||||||
class DetailsPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity),
|
class DetailsPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity),
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.koitharu.kotatsu.details.ui
|
package org.koitharu.kotatsu.details.ui.pager.chapters
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@@ -10,6 +10,7 @@ import androidx.appcompat.view.ActionMode
|
|||||||
import androidx.core.graphics.Insets
|
import androidx.core.graphics.Insets
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.ui.BaseFragment
|
import org.koitharu.kotatsu.core.ui.BaseFragment
|
||||||
@@ -19,6 +20,9 @@ import org.koitharu.kotatsu.core.util.RecyclerViewScrollCallback
|
|||||||
import org.koitharu.kotatsu.core.util.ext.observe
|
import org.koitharu.kotatsu.core.util.ext.observe
|
||||||
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
||||||
import org.koitharu.kotatsu.databinding.FragmentChaptersBinding
|
import org.koitharu.kotatsu.databinding.FragmentChaptersBinding
|
||||||
|
import org.koitharu.kotatsu.details.ui.ChaptersMenuProvider
|
||||||
|
import org.koitharu.kotatsu.details.ui.DetailsActivity
|
||||||
|
import org.koitharu.kotatsu.details.ui.DetailsViewModel
|
||||||
import org.koitharu.kotatsu.details.ui.adapter.ChaptersAdapter
|
import org.koitharu.kotatsu.details.ui.adapter.ChaptersAdapter
|
||||||
import org.koitharu.kotatsu.details.ui.adapter.ChaptersSelectionDecoration
|
import org.koitharu.kotatsu.details.ui.adapter.ChaptersSelectionDecoration
|
||||||
import org.koitharu.kotatsu.details.ui.model.ChapterListItem
|
import org.koitharu.kotatsu.details.ui.model.ChapterListItem
|
||||||
@@ -65,6 +69,12 @@ class ChaptersFragment :
|
|||||||
viewModel.onSelectChapter.observeEvent(viewLifecycleOwner) {
|
viewModel.onSelectChapter.observeEvent(viewLifecycleOwner) {
|
||||||
selectionController?.onItemLongClick(it)
|
selectionController?.onItemLongClick(it)
|
||||||
}
|
}
|
||||||
|
val detailsActivity = activity as? DetailsActivity
|
||||||
|
if (detailsActivity != null) {
|
||||||
|
val menuProvider = ChaptersMenuProvider(viewModel, detailsActivity.bottomSheetMediator)
|
||||||
|
activity?.onBackPressedDispatcher?.addCallback(menuProvider)
|
||||||
|
detailsActivity.secondaryMenuHost.addMenuProvider(menuProvider, viewLifecycleOwner, Lifecycle.State.RESUMED)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
Reference in New Issue
Block a user