Implement onNewIntent() in ReaderActivity

This commit is contained in:
FooIbar authored and tarsin committed 2023-02-25 02:36:37 +08:00
1 parent 49661c0bf0
commit f757e98da0
4 files changed
+43 -42

No files matched your search

@@ -85,7 +85,6 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.system.applySystemAnimatorScale
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
@@ -162,7 +161,6 @@ class ReaderActivity : EhActivity() {
}
}
var mGalleryProvider: PageLoader2? = null
private var mSize: Int = 0
private var mCurrentIndex: Int = 0
private var mSavingPage = -1
private lateinit var builder: EditTextDialogBuilder
@@ -192,9 +190,9 @@ class ReaderActivity : EhActivity() {
return EhUrl.getGalleryDetailUrl(gid, token, 0, false)
}
private fun buildProvider() {
private fun buildProvider(replace: Boolean = false) {
if (mGalleryProvider != null) {
return
if (replace) mGalleryProvider!!.stop() else return
}
if (ACTION_EH == mAction) {
@@ -250,13 +248,17 @@ class ReaderActivity : EhActivity() {
}
}
private fun onInit() {
val intent = intent ?: return
private fun handleIntent(intent: Intent?) {
intent ?: return
mAction = intent.action
mFilename = intent.getStringExtra(KEY_FILENAME)
mUri = intent.data
mGalleryInfo = intent.getParcelableExtraCompat(KEY_GALLERY_INFO)
mPage = intent.getIntExtra(KEY_PAGE, -1)
}
private fun onInit() {
handleIntent(intent)
buildProvider()
}
@@ -270,6 +272,21 @@ class ReaderActivity : EhActivity() {
buildProvider()
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
handleIntent(intent)
buildProvider(true)
mGalleryProvider?.let {
lifecycleScope.launchIO {
it.start()
if (it.awaitReady()) withUIContext {
viewer?.setGalleryProvider(it)
moveToPageIndex(0)
}
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString(KEY_ACTION, mAction)
@@ -299,10 +316,6 @@ class ReaderActivity : EhActivity() {
builder.setPositiveButton(getString(android.R.string.ok), null)
dialog = builder.create()
dialog.setCanceledOnTouchOutside(false)
if (mGalleryProvider == null) {
finish()
return
}
mGalleryProvider.let {
if (it == null) {
@@ -325,9 +338,10 @@ class ReaderActivity : EhActivity() {
dialog.dismiss()
// Get start page
if (mCurrentIndex == 0) mCurrentIndex = if (mPage >= 0) mPage else mGalleryProvider!!.startPage
mSize = mGalleryProvider!!.size
val viewerMode = ReadingModeType.fromPreference(readerPreferences.defaultReadingMode().get())
if (mCurrentIndex == 0)
mCurrentIndex = if (mPage >= 0) mPage else mGalleryProvider!!.startPage
val viewerMode =
ReadingModeType.fromPreference(readerPreferences.defaultReadingMode().get())
binding.actionReadingMode.setImageResource(viewerMode.iconRes)
viewer?.destroy()
viewer = ReadingModeType.toViewer(readerPreferences.defaultReadingMode().get(), this)
@@ -47,7 +47,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
/**
* Currently active item. It can be a chapter page or a chapter transition.
*/
private var currentPage: Any? = null
private var currentPage: ReaderPage? = null
/**
* Viewer chapters to set when the pager enters idle mode. Otherwise, if the view was settling
@@ -153,27 +153,14 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
.firstOrNull { it.item == page }
/**
* Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active
* Called when a new [ReaderPage] is marked as active
*/
private fun onPageChange(position: Int) {
val page = adapter.items.getOrNull(position)
if (page != null && currentPage != page) {
val forward = when {
currentPage is ReaderPage && page is ReaderPage -> {
// if both pages have the same number, it's a split page with an InsertPage
if (page.number == (currentPage as ReaderPage).number) {
// the InsertPage is always the second in the reading direction
false
} else {
page.number > (currentPage as ReaderPage).number
}
}
else -> true
}
val forward = page.number > (currentPage?.number ?: 0)
currentPage = page
when (page) {
is ReaderPage -> onReaderPageSelected(page, forward)
}
onReaderPageSelected(page, forward)
}
}
@@ -206,6 +193,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
private fun setChaptersInternal(chapters: PageLoader) {
logcat { "setChaptersInternal" }
adapter.setChapters(chapters)
refreshAdapter(0)
// Layout the pager once a chapter is being set
if (pager.isGone) {
@@ -251,7 +239,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
*/
protected open fun moveRight() {
if (pager.currentItem != adapter.count - 1) {
val holder = (currentPage as? ReaderPage)?.let { getPageHolder(it) }
val holder = currentPage?.let { getPageHolder(it) }
if (holder != null && config.navigateToPan && holder.canPanRight()) {
holder.panRight()
} else {
@@ -265,7 +253,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
*/
protected open fun moveLeft() {
if (pager.currentItem != 0) {
val holder = (currentPage as? ReaderPage)?.let { getPageHolder(it) }
val holder = currentPage?.let { getPageHolder(it) }
if (holder != null && config.navigateToPan && holder.canPanLeft()) {
holder.panLeft()
} else {
@@ -292,8 +280,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
* Resets the adapter in order to recreate all the views. Used when a image configuration is
* changed.
*/
private fun refreshAdapter() {
val currentItem = pager.currentItem
private fun refreshAdapter(currentItem: Int = pager.currentItem) {
adapter.refresh()
pager.adapter = adapter
pager.setCurrentItem(currentItem, false)
@@ -318,6 +305,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
if (!config.volumeKeysInverted) moveDown() else moveUp()
}
}
KeyEvent.KEYCODE_VOLUME_UP -> {
if (!config.volumeKeysEnabled || activity.menuVisible) {
return false
@@ -325,16 +313,19 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
if (!config.volumeKeysInverted) moveUp() else moveDown()
}
}
KeyEvent.KEYCODE_DPAD_RIGHT -> {
if (isUp) {
if (ctrlPressed) moveToNext() else moveRight()
}
}
KeyEvent.KEYCODE_DPAD_LEFT -> {
if (isUp) {
if (ctrlPressed) moveToPrevious() else moveLeft()
}
}
KeyEvent.KEYCODE_DPAD_DOWN -> if (isUp) moveDown()
KeyEvent.KEYCODE_DPAD_UP -> if (isUp) moveUp()
KeyEvent.KEYCODE_PAGE_DOWN -> if (isUp) moveDown()
@@ -39,8 +39,6 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
if (viewer is R2LPagerViewer) {
items = items.asReversed()
}
notifyDataSetChanged()
}
/**
@@ -60,7 +58,7 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
}
override fun destroyView(container: ViewGroup, position: Int, view: View) {
val item = items[position]
val item = (view as PagerPageHolder).item
currentChapter?.cancelRequest(item.index)
}
@@ -155,6 +155,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
*/
override fun setGalleryProvider(provider: PageLoader) {
adapter.setChapters(provider)
refreshAdapter(0)
if (recycler.isGone) {
logcat { "Recycler first layout" }
@@ -181,9 +182,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
val item = adapter.items.getOrNull(position)
if (item != null && currentPage != item) {
currentPage = item
when (item) {
is ReaderPage -> onPageSelected(item)
}
onPageSelected(item)
}
}
@@ -265,8 +264,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
* Notifies adapter of changes around the current page to trigger a relayout in the recycler.
* Used when an image configuration is changed.
*/
private fun refreshAdapter() {
val position = layoutManager.findLastEndVisibleItemPosition()
private fun refreshAdapter(position: Int = layoutManager.findLastEndVisibleItemPosition()) {
val positionStart = maxOf(0, position - 3)
val positionEnd = minOf(position + 3, adapter.itemCount - 1)
adapter.refresh()