Refactor ReadActivity menus
This commit is contained in:
@@ -10,7 +10,6 @@ import android.transition.TransitionManager
|
|||||||
import android.transition.TransitionSet
|
import android.transition.TransitionSet
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup.MarginLayoutParams
|
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.ReaderPage
|
||||||
import org.koitharu.kotatsu.reader.ui.pager.ReaderUiState
|
import org.koitharu.kotatsu.reader.ui.pager.ReaderUiState
|
||||||
import org.koitharu.kotatsu.reader.ui.thumbnails.OnPageSelectListener
|
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 java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -111,7 +108,6 @@ class ReaderActivity :
|
|||||||
touchHelper = GridTouchHelper(this, this)
|
touchHelper = GridTouchHelper(this, this)
|
||||||
scrollTimer = scrollTimerFactory.create(this, this)
|
scrollTimer = scrollTimerFactory.create(this, this)
|
||||||
controlDelegate = ReaderControlDelegate(resources, settings, this, this)
|
controlDelegate = ReaderControlDelegate(resources, settings, this, this)
|
||||||
viewBinding.toolbarBottom.setOnMenuItemClickListener(::onOptionsItemSelected)
|
|
||||||
viewBinding.slider.setLabelFormatter(PageLabelFormatter())
|
viewBinding.slider.setLabelFormatter(PageLabelFormatter())
|
||||||
viewBinding.zoomControl.listener = this
|
viewBinding.zoomControl.listener = this
|
||||||
ReaderSliderListener(this, viewModel).attachToSlider(viewBinding.slider)
|
ReaderSliderListener(this, viewModel).attachToSlider(viewBinding.slider)
|
||||||
@@ -144,7 +140,7 @@ class ReaderActivity :
|
|||||||
viewModel.isScreenshotsBlockEnabled.observe(this, this::setWindowSecure)
|
viewModel.isScreenshotsBlockEnabled.observe(this, this::setWindowSecure)
|
||||||
viewModel.isKeepScreenOnEnabled.observe(this, this::setKeepScreenOn)
|
viewModel.isKeepScreenOnEnabled.observe(this, this::setKeepScreenOn)
|
||||||
viewModel.isInfoBarEnabled.observe(this, ::onReaderBarChanged)
|
viewModel.isInfoBarEnabled.observe(this, ::onReaderBarChanged)
|
||||||
viewModel.isBookmarkAdded.observe(this, this::onBookmarkStateChanged)
|
viewModel.isBookmarkAdded.observe(this, MenuInvalidator(viewBinding.toolbarBottom))
|
||||||
viewModel.onShowToast.observeEvent(this) { msgId ->
|
viewModel.onShowToast.observeEvent(this) { msgId ->
|
||||||
Snackbar.make(viewBinding.container, msgId, Snackbar.LENGTH_SHORT)
|
Snackbar.make(viewBinding.container, msgId, Snackbar.LENGTH_SHORT)
|
||||||
.setAnchorView(viewBinding.appbarBottom)
|
.setAnchorView(viewBinding.appbarBottom)
|
||||||
@@ -154,6 +150,7 @@ class ReaderActivity :
|
|||||||
viewBinding.zoomControl.isVisible = it
|
viewBinding.zoomControl.isVisible = it
|
||||||
}
|
}
|
||||||
addMenuProvider(ReaderTopMenuProvider(this, viewModel))
|
addMenuProvider(ReaderTopMenuProvider(this, viewModel))
|
||||||
|
viewBinding.toolbarBottom.addMenuProvider(ReaderBottomMenuProvider(this, readerManager, viewModel))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getParentActivityIntent(): Intent? {
|
override fun getParentActivityIntent(): Intent? {
|
||||||
@@ -192,41 +189,6 @@ class ReaderActivity :
|
|||||||
viewBinding.slider.isRtl = mode == ReaderMode.REVERSED
|
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) {
|
private fun onLoadingStateChanged(isLoading: Boolean) {
|
||||||
val hasPages = viewModel.content.value.pages.isNotEmpty()
|
val hasPages = viewModel.content.value.pages.isNotEmpty()
|
||||||
viewBinding.layoutLoading.isVisible = isLoading && !hasPages
|
viewBinding.layoutLoading.isVisible = isLoading && !hasPages
|
||||||
@@ -235,9 +197,7 @@ class ReaderActivity :
|
|||||||
} else {
|
} else {
|
||||||
viewBinding.toastView.hide()
|
viewBinding.toastView.hide()
|
||||||
}
|
}
|
||||||
val menu = viewBinding.toolbarBottom.menu
|
viewBinding.toolbarBottom.invalidateMenu()
|
||||||
menu.findItem(R.id.action_bookmark).isVisible = hasPages
|
|
||||||
menu.findItem(R.id.action_pages_thumbs).isVisible = hasPages
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onGridTouch(area: Int) {
|
override fun onGridTouch(area: Int) {
|
||||||
@@ -385,12 +345,6 @@ class ReaderActivity :
|
|||||||
viewBinding.infoBar.isVisible = isBarEnabled && viewBinding.appbarTop.isGone
|
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<ReaderUiState?, ReaderUiState?>) {
|
private fun onUiStateChanged(pair: Pair<ReaderUiState?, ReaderUiState?>) {
|
||||||
val (previous: ReaderUiState?, uiState: ReaderUiState?) = pair
|
val (previous: ReaderUiState?, uiState: ReaderUiState?) = pair
|
||||||
title = uiState?.resolveTitle(this) ?: getString(R.string.loading_)
|
title = uiState?.resolveTitle(this) ?: getString(R.string.loading_)
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,12 +4,13 @@ import android.view.Menu
|
|||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import androidx.core.view.MenuProvider
|
import androidx.core.view.MenuProvider
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.util.ext.DIALOG_THEME_CENTERED
|
import org.koitharu.kotatsu.core.util.ext.DIALOG_THEME_CENTERED
|
||||||
|
|
||||||
class ReaderTopMenuProvider(
|
class ReaderTopMenuProvider(
|
||||||
private val activity: ReaderActivity,
|
private val activity: FragmentActivity,
|
||||||
private val viewModel: ReaderViewModel,
|
private val viewModel: ReaderViewModel,
|
||||||
) : MenuProvider {
|
) : MenuProvider {
|
||||||
|
|
||||||
|
|||||||
@@ -50,14 +50,15 @@
|
|||||||
android:id="@id/toolbar"
|
android:id="@id/toolbar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1" />
|
android:layout_weight="1"
|
||||||
|
tools:menu="@menu/opt_reader_top" />
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
android:id="@+id/toolbar_bottom"
|
android:id="@+id/toolbar_bottom"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
app:menu="@menu/opt_reader_bottom">
|
tools:menu="@menu/opt_reader_bottom">
|
||||||
|
|
||||||
<com.google.android.material.slider.Slider
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/slider"
|
android:id="@+id/slider"
|
||||||
|
|||||||
@@ -47,7 +47,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:elevation="@dimen/m3_card_elevated_elevation"
|
android:elevation="@dimen/m3_card_elevated_elevation"
|
||||||
app:elevation="@dimen/m3_card_elevated_elevation"
|
app:elevation="@dimen/m3_card_elevated_elevation"
|
||||||
app:popupTheme="@style/ThemeOverlay.Kotatsu" />
|
app:popupTheme="@style/ThemeOverlay.Kotatsu"
|
||||||
|
tools:menu="@menu/opt_reader_top" />
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@
|
|||||||
android:id="@+id/toolbar_bottom"
|
android:id="@+id/toolbar_bottom"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:menu="@menu/opt_reader_bottom">
|
tools:menu="@menu/opt_reader_bottom">
|
||||||
|
|
||||||
<com.google.android.material.slider.Slider
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/slider"
|
android:id="@+id/slider"
|
||||||
|
|||||||
Reference in New Issue
Block a user