From 0d1e85d0c29540039a5b94c411dee16d99327ddb Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Thu, 21 Jul 2022 00:05:57 +0300 Subject: [PATCH] Fix merging troubles --- .../kotatsu/core/db/MangaDatabaseTest.kt | 19 ------ .../kotatsu/reader/ui/ReaderActivity.kt | 66 ++++++++++++------- .../main/res/drawable/ic_read_reversed.xml | 11 ++++ app/src/main/res/menu/opt_reader_bottom.xml | 25 ++++++- 4 files changed, 74 insertions(+), 47 deletions(-) create mode 100644 app/src/main/res/drawable/ic_read_reversed.xml diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt b/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt index daf61989e..23c8b9796 100644 --- a/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt +++ b/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt @@ -53,24 +53,5 @@ class MangaDatabaseTest { private companion object { const val TEST_DB = "test-db" -<<<<<<< HEAD - - val migrations = arrayOf( - Migration1To2(), - Migration2To3(), - Migration3To4(), - Migration4To5(), - Migration5To6(), - Migration6To7(), - Migration7To8(), - Migration8To9(), - Migration9To10(), - Migration10To11(), - Migration11To12(), - Migration12To13(), - Migration13To14(), - ) -======= ->>>>>>> devel } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index 95ee3d3d1..c3f173cd4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -6,11 +6,13 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.* +import androidx.activity.result.ActivityResultCallback import androidx.core.graphics.Insets import androidx.core.view.OnApplyWindowInsetsListener import androidx.core.view.WindowInsetsCompat import androidx.core.view.isVisible import androidx.core.view.updatePadding +import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.transition.Slide import androidx.transition.TransitionManager @@ -18,6 +20,8 @@ import androidx.transition.TransitionSet import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.koin.android.ext.android.get @@ -35,12 +39,12 @@ import org.koitharu.kotatsu.databinding.ActivityReaderBinding import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaPage -import org.koitharu.kotatsu.reader.ui.config.ReaderConfigBottomSheet 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 org.koitharu.kotatsu.utils.GridTouchHelper +import org.koitharu.kotatsu.utils.ScreenOrientationHelper import org.koitharu.kotatsu.utils.ShareHelper import org.koitharu.kotatsu.utils.ext.* import java.util.concurrent.TimeUnit @@ -50,7 +54,8 @@ class ReaderActivity : ChaptersBottomSheet.OnChapterChangeListener, GridTouchHelper.OnGridTouchListener, OnPageSelectListener, - ReaderConfigBottomSheet.Callback, + ReaderConfigDialog.Callback, + ActivityResultCallback, ReaderControlDelegate.OnInteractionListener, OnApplyWindowInsetsListener { @@ -63,7 +68,9 @@ class ReaderActivity : } private lateinit var touchHelper: GridTouchHelper + private lateinit var orientationHelper: ScreenOrientationHelper private lateinit var controlDelegate: ReaderControlDelegate + private val savePageRequest = registerForActivityResult(PageSaveContract(), this) private var gestureInsets: Insets = Insets.NONE private lateinit var readerManager: ReaderManager private val hideUiRunnable = Runnable { setUiIsVisible(false) } @@ -74,12 +81,18 @@ class ReaderActivity : readerManager = ReaderManager(supportFragmentManager, R.id.container) supportActionBar?.setDisplayHomeAsUpEnabled(true) touchHelper = GridTouchHelper(this, this) + orientationHelper = ScreenOrientationHelper(this) controlDelegate = ReaderControlDelegate(lifecycleScope, get(), this) + binding.toolbarBottom.inflateMenu(R.menu.opt_reader_bottom) binding.toolbarBottom.setOnMenuItemClickListener(::onOptionsItemSelected) - binding.slider.setLabelFormatter(PageLabelFormatter()) - ReaderSliderListener(this, viewModel).attachToSlider(binding.slider) insetsDelegate.interceptingWindowInsetsListener = this + orientationHelper.observeAutoOrientation() + .flowWithLifecycle(lifecycle) + .onEach { + binding.toolbarBottom.menu.findItem(R.id.action_screen_rotate).isVisible = !it + }.launchIn(lifecycleScope) + viewModel.onError.observe(this, this::onError) viewModel.readerMode.observe(this, this::onInitReader) viewModel.onPageSaved.observe(this, this::onPageSaved) @@ -101,19 +114,31 @@ class ReaderActivity : if (readerManager.currentMode != mode) { readerManager.replace(mode) } + val iconRes = when (mode) { + ReaderMode.WEBTOON -> R.drawable.ic_script + ReaderMode.REVERSED -> R.drawable.ic_read_reversed + ReaderMode.STANDARD -> R.drawable.ic_book_page + } + binding.toolbarBottom.menu.findItem(R.id.action_reader_mode).run { + setIcon(iconRes) + setVisible(true) + } if (binding.appbarTop.isVisible) { lifecycle.postDelayed(hideUiRunnable, TimeUnit.SECONDS.toMillis(1)) } } override fun onCreateOptionsMenu(menu: Menu): Boolean { - super.onCreateOptionsMenu(menu) menuInflater.inflate(R.menu.opt_reader_top, menu) - return true + return super.onCreateOptionsMenu(menu) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { + R.id.action_reader_mode -> { + val currentMode = readerManager.currentMode ?: return false + ReaderConfigDialog.show(supportFragmentManager, currentMode) + } R.id.action_settings -> { startActivity(SettingsActivity.newReaderSettingsIntent(this)) } @@ -124,6 +149,9 @@ class ReaderActivity : viewModel.getCurrentState()?.chapterId ?: 0L ) } + R.id.action_screen_rotate -> { + orientationHelper.toggleOrientation() + } R.id.action_pages_thumbs -> { val pages = viewModel.getCurrentChapterPages() if (!pages.isNullOrEmpty()) { @@ -149,16 +177,15 @@ class ReaderActivity : viewModel.addBookmark() } } - R.id.action_options -> { - viewModel.saveCurrentState(readerManager.currentReader?.getCurrentState()) - val currentMode = readerManager.currentMode ?: return false - ReaderConfigBottomSheet.show(supportFragmentManager, currentMode) - } else -> return super.onOptionsItemSelected(item) } return true } + override fun onActivityResult(uri: Uri?) { + viewModel.onActivityResult(uri) + } + private fun onLoadingStateChanged(isLoading: Boolean) { val hasPages = !viewModel.content.value?.pages.isNullOrEmpty() binding.layoutLoading.isVisible = isLoading && !hasPages @@ -170,6 +197,7 @@ class ReaderActivity : val menu = binding.toolbarBottom.menu menu.findItem(R.id.action_bookmark).isVisible = hasPages menu.findItem(R.id.action_pages_thumbs).isVisible = hasPages + menu.findItem(R.id.action_save_page).isVisible = hasPages } private fun onError(e: Throwable) { @@ -319,28 +347,16 @@ class ReaderActivity : private fun onUiStateChanged(uiState: ReaderUiState?, previous: ReaderUiState?) { title = uiState?.chapterName ?: uiState?.mangaName ?: getString(R.string.loading_) - if (uiState == null) { - supportActionBar?.subtitle = null - binding.slider.isVisible = false - return - } - supportActionBar?.subtitle = if (uiState.chapterNumber in 1..uiState.chaptersTotal) { + supportActionBar?.subtitle = if (uiState != null && uiState.chapterNumber in 1..uiState.chaptersTotal) { getString(R.string.chapter_d_of_d, uiState.chapterNumber, uiState.chaptersTotal) } else { null } - if (previous?.chapterName != null && uiState.chapterName != previous.chapterName) { + if (uiState != null && previous?.chapterName != null && uiState.chapterName != previous.chapterName) { if (!uiState.chapterName.isNullOrEmpty()) { binding.toastView.showTemporary(uiState.chapterName, TOAST_DURATION) } } - if (uiState.totalPages > 0) { - binding.slider.value = uiState.currentPage.toFloat() - binding.slider.valueTo = uiState.totalPages.toFloat() - binding.slider.isVisible = true - } else { - binding.slider.isVisible = false - } } private inner class ErrorDialogListener( diff --git a/app/src/main/res/drawable/ic_read_reversed.xml b/app/src/main/res/drawable/ic_read_reversed.xml new file mode 100644 index 000000000..1e564ec9e --- /dev/null +++ b/app/src/main/res/drawable/ic_read_reversed.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/menu/opt_reader_bottom.xml b/app/src/main/res/menu/opt_reader_bottom.xml index d900b0c37..569bffc11 100644 --- a/app/src/main/res/menu/opt_reader_bottom.xml +++ b/app/src/main/res/menu/opt_reader_bottom.xml @@ -20,9 +20,28 @@ app:showAsAction="always" /> + + + + + +