diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/View.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/View.kt index ff519da76..793e2d102 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/View.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/View.kt @@ -8,6 +8,8 @@ import android.view.View.MeasureSpec import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.widget.Checkable +import androidx.appcompat.widget.ActionMenuView +import androidx.appcompat.widget.Toolbar import androidx.core.view.children import androidx.core.view.descendants import androidx.core.view.isVisible @@ -153,3 +155,9 @@ fun View.setOnContextClickListenerCompat(listener: View.OnLongClickListener) { setOnContextClickListener(listener::onLongClick) } } + +val Toolbar.menuView: ActionMenuView? + get() { + menu // to call ensureMenu() + return children.firstNotNullOfOrNull { it as? ActionMenuView } + } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt index a0076bcb1..afdbcd194 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt @@ -22,6 +22,7 @@ import androidx.appcompat.widget.PopupMenu import androidx.core.graphics.Insets import androidx.core.text.buildSpannedString import androidx.core.text.inSpans +import androidx.core.view.MenuHost import androidx.core.view.isGone import androidx.core.view.isVisible 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.isAnimationsEnabled 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.observeEvent import org.koitharu.kotatsu.core.util.ext.recyclerView @@ -84,7 +86,12 @@ class DetailsActivity : private var buttonTip: WeakReference? = null 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?) { super.onCreate(savedInstanceState) @@ -104,17 +111,13 @@ class DetailsActivity : actionModeDelegate.addListener(bsMediator) checkNotNull(viewBinding.layoutBsHeader).addOnLayoutChangeListener(bsMediator) onBackPressedDispatcher.addCallback(bsMediator) - chaptersMenuProvider = ChaptersMenuProvider(viewModel, bsMediator) + bottomSheetMediator = bsMediator behavior.doOnExpansionsChanged(::onChaptersSheetStateChanged) viewBinding.toolbarChapters?.setNavigationOnClickListener { behavior.state = BottomSheetBehavior.STATE_COLLAPSED } viewBinding.toolbarChapters?.setOnGenericMotionListener(bsMediator) - } else { - chaptersMenuProvider = ChaptersMenuProvider(viewModel, null) - addMenuProvider(chaptersMenuProvider) } - onBackPressedDispatcher.addCallback(chaptersMenuProvider) initPager() viewModel.manga.filterNotNull().observe(this, ::onMangaUpdated) @@ -223,12 +226,11 @@ class DetailsActivity : TransitionManager.beginDelayedTransition(toolbar, transition) } if (isExpanded) { - toolbar.addMenuProvider(chaptersMenuProvider) toolbar.setNavigationIconSafe(materialR.drawable.abc_ic_clear_material) } else { - toolbar.removeMenuProvider(chaptersMenuProvider) toolbar.navigationIcon = null } + toolbar.menuView?.isVisible = isExpanded viewBinding.buttonRead.isGone = isExpanded } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/DetailsPagerAdapter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/DetailsPagerAdapter.kt index 7e7d84c26..b916a1471 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/DetailsPagerAdapter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/DetailsPagerAdapter.kt @@ -6,7 +6,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator 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 class DetailsPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity), diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/chapters/ChaptersFragment.kt similarity index 91% rename from app/src/main/kotlin/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt rename to app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/chapters/ChaptersFragment.kt index 8c955c77c..768fb7201 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/ChaptersFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/chapters/ChaptersFragment.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.details.ui +package org.koitharu.kotatsu.details.ui.pager.chapters import android.os.Bundle import android.view.LayoutInflater @@ -10,6 +10,7 @@ import androidx.appcompat.view.ActionMode import androidx.core.graphics.Insets import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import com.google.android.material.snackbar.Snackbar import org.koitharu.kotatsu.R 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.observeEvent 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.ChaptersSelectionDecoration import org.koitharu.kotatsu.details.ui.model.ChapterListItem @@ -65,6 +69,12 @@ class ChaptersFragment : viewModel.onSelectChapter.observeEvent(viewLifecycleOwner) { 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() {