Fix merging troubles

pull/189/head
Zakhar Timoshenko 4 years ago
parent 3b5a305122
commit 0d1e85d0c2

@ -53,24 +53,5 @@ class MangaDatabaseTest {
private companion object { private companion object {
const val TEST_DB = "test-db" const val TEST_DB = "test-db"
<<<<<<< HEAD
val migrations = arrayOf(
Migration1To2(),
Migration2To3(),
Migration3To4(),
Migration4To5(),
Migration5To6(),
Migration6To7(),
Migration7To8(),
Migration8To9(),
Migration9To10(),
Migration10To11(),
Migration11To12(),
Migration12To13(),
Migration13To14(),
)
=======
>>>>>>> devel
} }
} }

@ -6,11 +6,13 @@ import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import androidx.activity.result.ActivityResultCallback
import androidx.core.graphics.Insets import androidx.core.graphics.Insets
import androidx.core.view.OnApplyWindowInsetsListener import androidx.core.view.OnApplyWindowInsetsListener
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.transition.Slide import androidx.transition.Slide
import androidx.transition.TransitionManager import androidx.transition.TransitionManager
@ -18,6 +20,8 @@ import androidx.transition.TransitionSet
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get 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.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaPage 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.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.reader.ui.thumbnails.PagesThumbnailsSheet
import org.koitharu.kotatsu.settings.SettingsActivity import org.koitharu.kotatsu.settings.SettingsActivity
import org.koitharu.kotatsu.utils.GridTouchHelper import org.koitharu.kotatsu.utils.GridTouchHelper
import org.koitharu.kotatsu.utils.ScreenOrientationHelper
import org.koitharu.kotatsu.utils.ShareHelper import org.koitharu.kotatsu.utils.ShareHelper
import org.koitharu.kotatsu.utils.ext.* import org.koitharu.kotatsu.utils.ext.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -50,7 +54,8 @@ class ReaderActivity :
ChaptersBottomSheet.OnChapterChangeListener, ChaptersBottomSheet.OnChapterChangeListener,
GridTouchHelper.OnGridTouchListener, GridTouchHelper.OnGridTouchListener,
OnPageSelectListener, OnPageSelectListener,
ReaderConfigBottomSheet.Callback, ReaderConfigDialog.Callback,
ActivityResultCallback<Uri?>,
ReaderControlDelegate.OnInteractionListener, ReaderControlDelegate.OnInteractionListener,
OnApplyWindowInsetsListener { OnApplyWindowInsetsListener {
@ -63,7 +68,9 @@ class ReaderActivity :
} }
private lateinit var touchHelper: GridTouchHelper private lateinit var touchHelper: GridTouchHelper
private lateinit var orientationHelper: ScreenOrientationHelper
private lateinit var controlDelegate: ReaderControlDelegate private lateinit var controlDelegate: ReaderControlDelegate
private val savePageRequest = registerForActivityResult(PageSaveContract(), this)
private var gestureInsets: Insets = Insets.NONE private var gestureInsets: Insets = Insets.NONE
private lateinit var readerManager: ReaderManager private lateinit var readerManager: ReaderManager
private val hideUiRunnable = Runnable { setUiIsVisible(false) } private val hideUiRunnable = Runnable { setUiIsVisible(false) }
@ -74,12 +81,18 @@ class ReaderActivity :
readerManager = ReaderManager(supportFragmentManager, R.id.container) readerManager = ReaderManager(supportFragmentManager, R.id.container)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
touchHelper = GridTouchHelper(this, this) touchHelper = GridTouchHelper(this, this)
orientationHelper = ScreenOrientationHelper(this)
controlDelegate = ReaderControlDelegate(lifecycleScope, get(), this) controlDelegate = ReaderControlDelegate(lifecycleScope, get(), this)
binding.toolbarBottom.inflateMenu(R.menu.opt_reader_bottom)
binding.toolbarBottom.setOnMenuItemClickListener(::onOptionsItemSelected) binding.toolbarBottom.setOnMenuItemClickListener(::onOptionsItemSelected)
binding.slider.setLabelFormatter(PageLabelFormatter())
ReaderSliderListener(this, viewModel).attachToSlider(binding.slider)
insetsDelegate.interceptingWindowInsetsListener = this 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.onError.observe(this, this::onError)
viewModel.readerMode.observe(this, this::onInitReader) viewModel.readerMode.observe(this, this::onInitReader)
viewModel.onPageSaved.observe(this, this::onPageSaved) viewModel.onPageSaved.observe(this, this::onPageSaved)
@ -101,19 +114,31 @@ class ReaderActivity :
if (readerManager.currentMode != mode) { if (readerManager.currentMode != mode) {
readerManager.replace(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) { if (binding.appbarTop.isVisible) {
lifecycle.postDelayed(hideUiRunnable, TimeUnit.SECONDS.toMillis(1)) lifecycle.postDelayed(hideUiRunnable, TimeUnit.SECONDS.toMillis(1))
} }
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
super.onCreateOptionsMenu(menu)
menuInflater.inflate(R.menu.opt_reader_top, menu) menuInflater.inflate(R.menu.opt_reader_top, menu)
return true return super.onCreateOptionsMenu(menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_reader_mode -> {
val currentMode = readerManager.currentMode ?: return false
ReaderConfigDialog.show(supportFragmentManager, currentMode)
}
R.id.action_settings -> { R.id.action_settings -> {
startActivity(SettingsActivity.newReaderSettingsIntent(this)) startActivity(SettingsActivity.newReaderSettingsIntent(this))
} }
@ -124,6 +149,9 @@ class ReaderActivity :
viewModel.getCurrentState()?.chapterId ?: 0L viewModel.getCurrentState()?.chapterId ?: 0L
) )
} }
R.id.action_screen_rotate -> {
orientationHelper.toggleOrientation()
}
R.id.action_pages_thumbs -> { R.id.action_pages_thumbs -> {
val pages = viewModel.getCurrentChapterPages() val pages = viewModel.getCurrentChapterPages()
if (!pages.isNullOrEmpty()) { if (!pages.isNullOrEmpty()) {
@ -149,16 +177,15 @@ class ReaderActivity :
viewModel.addBookmark() 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) else -> return super.onOptionsItemSelected(item)
} }
return true return true
} }
override fun onActivityResult(uri: Uri?) {
viewModel.onActivityResult(uri)
}
private fun onLoadingStateChanged(isLoading: Boolean) { private fun onLoadingStateChanged(isLoading: Boolean) {
val hasPages = !viewModel.content.value?.pages.isNullOrEmpty() val hasPages = !viewModel.content.value?.pages.isNullOrEmpty()
binding.layoutLoading.isVisible = isLoading && !hasPages binding.layoutLoading.isVisible = isLoading && !hasPages
@ -170,6 +197,7 @@ class ReaderActivity :
val menu = binding.toolbarBottom.menu val menu = binding.toolbarBottom.menu
menu.findItem(R.id.action_bookmark).isVisible = hasPages menu.findItem(R.id.action_bookmark).isVisible = hasPages
menu.findItem(R.id.action_pages_thumbs).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) { private fun onError(e: Throwable) {
@ -319,28 +347,16 @@ class ReaderActivity :
private fun onUiStateChanged(uiState: ReaderUiState?, previous: ReaderUiState?) { private fun onUiStateChanged(uiState: ReaderUiState?, previous: ReaderUiState?) {
title = uiState?.chapterName ?: uiState?.mangaName ?: getString(R.string.loading_) title = uiState?.chapterName ?: uiState?.mangaName ?: getString(R.string.loading_)
if (uiState == null) { supportActionBar?.subtitle = if (uiState != null && uiState.chapterNumber in 1..uiState.chaptersTotal) {
supportActionBar?.subtitle = null
binding.slider.isVisible = false
return
}
supportActionBar?.subtitle = if (uiState.chapterNumber in 1..uiState.chaptersTotal) {
getString(R.string.chapter_d_of_d, uiState.chapterNumber, uiState.chaptersTotal) getString(R.string.chapter_d_of_d, uiState.chapterNumber, uiState.chaptersTotal)
} else { } else {
null null
} }
if (previous?.chapterName != null && uiState.chapterName != previous.chapterName) { if (uiState != null && previous?.chapterName != null && uiState.chapterName != previous.chapterName) {
if (!uiState.chapterName.isNullOrEmpty()) { if (!uiState.chapterName.isNullOrEmpty()) {
binding.toastView.showTemporary(uiState.chapterName, TOAST_DURATION) 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( private inner class ErrorDialogListener(

@ -0,0 +1,11 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000"
android:pathData="M4 21h15a2 2 0 0 0 2-2v-6h-4v2l-4-3 4-3v2h4V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2m0-6h4v2H4v-2m0-4h7v2H4v-2m0-4h7v2H4V7m17 4h3v2h-3v-2z" />
</vector>

@ -20,9 +20,28 @@
app:showAsAction="always" /> app:showAsAction="always" />
<item <item
android:id="@+id/action_options" android:id="@+id/action_screen_rotate"
android:icon="@drawable/abc_ic_menu_overflow_material" android:icon="@drawable/ic_screen_rotation"
android:title="@string/options" android:title="@string/rotate_screen"
android:visible="false"
app:showAsAction="always" />
<item
android:id="@+id/action_reader_mode"
android:icon="@drawable/ic_loading"
android:title="@string/read_mode"
android:visible="false"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/action_save_page"
android:title="@string/save_page"
android:visible="false"
app:showAsAction="never" />
<item
android:id="@+id/action_settings"
android:title="@string/settings"
app:showAsAction="never" />
</menu> </menu>

Loading…
Cancel
Save