Implement onNewIntent() in ReaderActivity
This commit is contained in:
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()
|
||||
|
||||
Reference in new issue
Block a user