diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index 535fe7f29..d65fc2062 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -10,7 +10,6 @@ import android.transition.TransitionManager import android.transition.TransitionSet import android.view.Gravity import android.view.KeyEvent -import android.view.MenuItem import android.view.MotionEvent import android.view.View import android.view.ViewGroup.MarginLayoutParams @@ -60,8 +59,6 @@ import org.koitharu.kotatsu.reader.ui.config.ReaderConfigSheet import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.reader.ui.pager.ReaderUiState import org.koitharu.kotatsu.reader.ui.thumbnails.OnPageSelectListener -import org.koitharu.kotatsu.reader.ui.thumbnails.PagesThumbnailsSheet -import org.koitharu.kotatsu.settings.SettingsActivity import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -111,7 +108,6 @@ class ReaderActivity : touchHelper = GridTouchHelper(this, this) scrollTimer = scrollTimerFactory.create(this, this) controlDelegate = ReaderControlDelegate(resources, settings, this, this) - viewBinding.toolbarBottom.setOnMenuItemClickListener(::onOptionsItemSelected) viewBinding.slider.setLabelFormatter(PageLabelFormatter()) viewBinding.zoomControl.listener = this ReaderSliderListener(this, viewModel).attachToSlider(viewBinding.slider) @@ -144,7 +140,7 @@ class ReaderActivity : viewModel.isScreenshotsBlockEnabled.observe(this, this::setWindowSecure) viewModel.isKeepScreenOnEnabled.observe(this, this::setKeepScreenOn) viewModel.isInfoBarEnabled.observe(this, ::onReaderBarChanged) - viewModel.isBookmarkAdded.observe(this, this::onBookmarkStateChanged) + viewModel.isBookmarkAdded.observe(this, MenuInvalidator(viewBinding.toolbarBottom)) viewModel.onShowToast.observeEvent(this) { msgId -> Snackbar.make(viewBinding.container, msgId, Snackbar.LENGTH_SHORT) .setAnchorView(viewBinding.appbarBottom) @@ -154,6 +150,7 @@ class ReaderActivity : viewBinding.zoomControl.isVisible = it } addMenuProvider(ReaderTopMenuProvider(this, viewModel)) + viewBinding.toolbarBottom.addMenuProvider(ReaderBottomMenuProvider(this, readerManager, viewModel)) } override fun getParentActivityIntent(): Intent? { @@ -192,41 +189,6 @@ class ReaderActivity : viewBinding.slider.isRtl = mode == ReaderMode.REVERSED } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.action_settings -> { - startActivity(SettingsActivity.newReaderSettingsIntent(this)) - } - - R.id.action_pages_thumbs -> { - val state = viewModel.getCurrentState() ?: return false - PagesThumbnailsSheet.show( - supportFragmentManager, - viewModel.manga?.toManga() ?: return false, - state.chapterId, - state.page, - ) - } - - R.id.action_bookmark -> { - if (viewModel.isBookmarkAdded.value) { - viewModel.removeBookmark() - } else { - viewModel.addBookmark() - } - } - - R.id.action_options -> { - viewModel.saveCurrentState(readerManager.currentReader?.getCurrentState()) - val currentMode = readerManager.currentMode ?: return false - ReaderConfigSheet.show(supportFragmentManager, currentMode) - } - - else -> return super.onOptionsItemSelected(item) - } - return true - } - private fun onLoadingStateChanged(isLoading: Boolean) { val hasPages = viewModel.content.value.pages.isNotEmpty() viewBinding.layoutLoading.isVisible = isLoading && !hasPages @@ -235,9 +197,7 @@ class ReaderActivity : } else { viewBinding.toastView.hide() } - val menu = viewBinding.toolbarBottom.menu - menu.findItem(R.id.action_bookmark).isVisible = hasPages - menu.findItem(R.id.action_pages_thumbs).isVisible = hasPages + viewBinding.toolbarBottom.invalidateMenu() } override fun onGridTouch(area: Int) { @@ -385,12 +345,6 @@ class ReaderActivity : viewBinding.infoBar.isVisible = isBarEnabled && viewBinding.appbarTop.isGone } - private fun onBookmarkStateChanged(isAdded: Boolean) { - val menuItem = viewBinding.toolbarBottom.menu.findItem(R.id.action_bookmark) ?: return - menuItem.setTitle(if (isAdded) R.string.bookmark_remove else R.string.bookmark_add) - menuItem.setIcon(if (isAdded) R.drawable.ic_bookmark_added else R.drawable.ic_bookmark) - } - private fun onUiStateChanged(pair: Pair) { val (previous: ReaderUiState?, uiState: ReaderUiState?) = pair title = uiState?.resolveTitle(this) ?: getString(R.string.loading_) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderBottomMenuProvider.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderBottomMenuProvider.kt new file mode 100644 index 000000000..796d1d6f6 --- /dev/null +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderBottomMenuProvider.kt @@ -0,0 +1,74 @@ +package org.koitharu.kotatsu.reader.ui + +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import androidx.core.view.MenuProvider +import androidx.fragment.app.FragmentActivity +import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.reader.ui.config.ReaderConfigSheet +import org.koitharu.kotatsu.reader.ui.thumbnails.PagesThumbnailsSheet +import org.koitharu.kotatsu.settings.SettingsActivity + +class ReaderBottomMenuProvider( + private val activity: FragmentActivity, + private val readerManager: ReaderManager, + private val viewModel: ReaderViewModel, +) : MenuProvider { + + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + menuInflater.inflate(R.menu.opt_reader_bottom, menu) + onPrepareMenu(menu) // fix, not called in toolbar + } + + override fun onPrepareMenu(menu: Menu) { + val hasPages = viewModel.content.value.pages.isNotEmpty() + menu.findItem(R.id.action_pages_thumbs).isVisible = hasPages + + val bookmarkItem = menu.findItem(R.id.action_bookmark) ?: return + bookmarkItem.isVisible = hasPages + if (hasPages) { + val hasBookmark = viewModel.isBookmarkAdded.value + bookmarkItem.setTitle(if (hasBookmark) R.string.bookmark_remove else R.string.bookmark_add) + bookmarkItem.setIcon(if (hasBookmark) R.drawable.ic_bookmark_added else R.drawable.ic_bookmark) + } + } + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean { + return when (menuItem.itemId) { + R.id.action_settings -> { + activity.startActivity(SettingsActivity.newReaderSettingsIntent(activity)) + true + } + + R.id.action_pages_thumbs -> { + val state = viewModel.getCurrentState() ?: return false + PagesThumbnailsSheet.show( + activity.supportFragmentManager, + viewModel.manga?.toManga() ?: return false, + state.chapterId, + state.page, + ) + true + } + + R.id.action_bookmark -> { + if (viewModel.isBookmarkAdded.value) { + viewModel.removeBookmark() + } else { + viewModel.addBookmark() + } + true + } + + R.id.action_options -> { + viewModel.saveCurrentState(readerManager.currentReader?.getCurrentState()) + val currentMode = readerManager.currentMode ?: return false + ReaderConfigSheet.show(activity.supportFragmentManager, currentMode) + true + } + + else -> false + } + } +} diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderTopMenuProvider.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderTopMenuProvider.kt index 867ecfc7f..57b795c06 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderTopMenuProvider.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderTopMenuProvider.kt @@ -4,12 +4,13 @@ import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import androidx.core.view.MenuProvider +import androidx.fragment.app.FragmentActivity import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.util.ext.DIALOG_THEME_CENTERED class ReaderTopMenuProvider( - private val activity: ReaderActivity, + private val activity: FragmentActivity, private val viewModel: ReaderViewModel, ) : MenuProvider { diff --git a/app/src/main/res/layout-w600dp-land/activity_reader.xml b/app/src/main/res/layout-w600dp-land/activity_reader.xml index 5d7333a2b..2a2572b7c 100644 --- a/app/src/main/res/layout-w600dp-land/activity_reader.xml +++ b/app/src/main/res/layout-w600dp-land/activity_reader.xml @@ -50,14 +50,15 @@ android:id="@id/toolbar" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_weight="1" /> + android:layout_weight="1" + tools:menu="@menu/opt_reader_top" /> + tools:menu="@menu/opt_reader_bottom"> + app:popupTheme="@style/ThemeOverlay.Kotatsu" + tools:menu="@menu/opt_reader_top" /> @@ -65,7 +66,7 @@ android:id="@+id/toolbar_bottom" android:layout_width="match_parent" android:layout_height="wrap_content" - app:menu="@menu/opt_reader_bottom"> + tools:menu="@menu/opt_reader_bottom">