|
|
@ -5,8 +5,6 @@ import android.app.Activity |
|
|
|
import android.content.Intent |
|
|
|
import android.content.Intent |
|
|
|
import android.content.res.Configuration |
|
|
|
import android.content.res.Configuration |
|
|
|
import android.os.Bundle |
|
|
|
import android.os.Bundle |
|
|
|
import android.os.Handler |
|
|
|
|
|
|
|
import android.os.Looper |
|
|
|
|
|
|
|
import android.view.* |
|
|
|
import android.view.* |
|
|
|
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT |
|
|
|
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT |
|
|
|
import androidx.activity.result.contract.ActivityResultContracts |
|
|
|
import androidx.activity.result.contract.ActivityResultContracts |
|
|
@ -53,7 +51,9 @@ import io.legado.app.ui.replace.edit.ReplaceEditActivity |
|
|
|
import io.legado.app.ui.widget.dialog.TextDialog |
|
|
|
import io.legado.app.ui.widget.dialog.TextDialog |
|
|
|
import io.legado.app.utils.* |
|
|
|
import io.legado.app.utils.* |
|
|
|
import kotlinx.coroutines.Dispatchers.IO |
|
|
|
import kotlinx.coroutines.Dispatchers.IO |
|
|
|
|
|
|
|
import kotlinx.coroutines.Job |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
|
|
|
|
import kotlinx.coroutines.isActive |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
|
|
|
|
|
|
|
|
class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
class ReadBookActivity : ReadBookBaseActivity(), |
|
|
@ -109,15 +109,9 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
|
|
|
|
|
|
|
|
override val isInitFinish: Boolean get() = viewModel.isInitFinish |
|
|
|
override val isInitFinish: Boolean get() = viewModel.isInitFinish |
|
|
|
override val isScroll: Boolean get() = binding.readView.isScroll |
|
|
|
override val isScroll: Boolean get() = binding.readView.isScroll |
|
|
|
private val mHandler = Handler(Looper.getMainLooper()) |
|
|
|
private var keepScreenJon: Job? = null |
|
|
|
private val keepScreenRunnable = Runnable { keepScreenOn(false) } |
|
|
|
private var autoPageJob: Job? = null |
|
|
|
private val autoPageRunnable = Runnable { autoPagePlus() } |
|
|
|
private var backupJob: Job? = null |
|
|
|
private val backupRunnable = Runnable { |
|
|
|
|
|
|
|
if (!BuildConfig.DEBUG) { |
|
|
|
|
|
|
|
ReadBook.uploadProgress() |
|
|
|
|
|
|
|
Backup.autoBack(this) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
override var autoPageProgress = 0 |
|
|
|
override var autoPageProgress = 0 |
|
|
|
override var isAutoPage = false |
|
|
|
override var isAutoPage = false |
|
|
|
private var screenTimeOut: Long = 0 |
|
|
|
private var screenTimeOut: Long = 0 |
|
|
@ -169,7 +163,7 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
override fun onPause() { |
|
|
|
override fun onPause() { |
|
|
|
super.onPause() |
|
|
|
super.onPause() |
|
|
|
autoPageStop() |
|
|
|
autoPageStop() |
|
|
|
mHandler.removeCallbacks(backupRunnable) |
|
|
|
backupJob?.cancel() |
|
|
|
ReadBook.saveRead() |
|
|
|
ReadBook.saveRead() |
|
|
|
timeBatteryReceiver?.let { |
|
|
|
timeBatteryReceiver?.let { |
|
|
|
unregisterReceiver(it) |
|
|
|
unregisterReceiver(it) |
|
|
@ -629,7 +623,7 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
launch { |
|
|
|
launch { |
|
|
|
autoPageProgress = 0 |
|
|
|
autoPageProgress = 0 |
|
|
|
binding.readMenu.setSeekPage(ReadBook.durPageIndex()) |
|
|
|
binding.readMenu.setSeekPage(ReadBook.durPageIndex()) |
|
|
|
mHandler.postDelayed(backupRunnable, 600000) |
|
|
|
startBackupJob() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -692,38 +686,42 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
override fun autoPageStop() { |
|
|
|
override fun autoPageStop() { |
|
|
|
if (isAutoPage) { |
|
|
|
if (isAutoPage) { |
|
|
|
isAutoPage = false |
|
|
|
isAutoPage = false |
|
|
|
mHandler.removeCallbacks(autoPageRunnable) |
|
|
|
autoPageJob?.cancel() |
|
|
|
binding.readMenu.setAutoPage(false) |
|
|
|
binding.readMenu.setAutoPage(false) |
|
|
|
upScreenTimeOut() |
|
|
|
upScreenTimeOut() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun autoPagePlus() { |
|
|
|
private fun autoPagePlus() { |
|
|
|
var delayMillis = ReadBookConfig.autoReadSpeed * 1000L / binding.readView.height |
|
|
|
autoPageJob?.cancel() |
|
|
|
var scrollOffset = 1 |
|
|
|
autoPageJob = launch { |
|
|
|
if (delayMillis < 20) { |
|
|
|
while (isActive) { |
|
|
|
var delayInt = delayMillis.toInt() |
|
|
|
var delayMillis = ReadBookConfig.autoReadSpeed * 1000L / binding.readView.height |
|
|
|
if (delayInt == 0) delayInt = 1 |
|
|
|
var scrollOffset = 1 |
|
|
|
scrollOffset = 20 / delayInt |
|
|
|
if (delayMillis < 20) { |
|
|
|
delayMillis = 20 |
|
|
|
var delayInt = delayMillis.toInt() |
|
|
|
} |
|
|
|
if (delayInt == 0) delayInt = 1 |
|
|
|
mHandler.removeCallbacks(autoPageRunnable) |
|
|
|
scrollOffset = 20 / delayInt |
|
|
|
if (!menuLayoutIsVisible) { |
|
|
|
delayMillis = 20 |
|
|
|
if (binding.readView.isScroll) { |
|
|
|
} |
|
|
|
binding.readView.curPage.scroll(-scrollOffset) |
|
|
|
delay(delayMillis) |
|
|
|
} else { |
|
|
|
if (!menuLayoutIsVisible && isActive) { |
|
|
|
autoPageProgress += scrollOffset |
|
|
|
if (binding.readView.isScroll) { |
|
|
|
if (autoPageProgress >= binding.readView.height) { |
|
|
|
binding.readView.curPage.scroll(-scrollOffset) |
|
|
|
autoPageProgress = 0 |
|
|
|
} else { |
|
|
|
if (!binding.readView.fillPage(PageDirection.NEXT)) { |
|
|
|
autoPageProgress += scrollOffset |
|
|
|
autoPageStop() |
|
|
|
if (autoPageProgress >= binding.readView.height) { |
|
|
|
|
|
|
|
autoPageProgress = 0 |
|
|
|
|
|
|
|
if (!binding.readView.fillPage(PageDirection.NEXT)) { |
|
|
|
|
|
|
|
autoPageStop() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
binding.readView.invalidate() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
|
|
|
|
binding.readView.invalidate() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
mHandler.postDelayed(autoPageRunnable, delayMillis) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun openSourceEditActivity() { |
|
|
|
override fun openSourceEditActivity() { |
|
|
@ -878,6 +876,13 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun startBackupJob() { |
|
|
|
|
|
|
|
backupJob?.cancel() |
|
|
|
|
|
|
|
backupJob = launch { |
|
|
|
|
|
|
|
delay(120000) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun finish() { |
|
|
|
override fun finish() { |
|
|
|
ReadBook.book?.let { |
|
|
|
ReadBook.book?.let { |
|
|
|
if (!ReadBook.inBookshelf) { |
|
|
|
if (!ReadBook.inBookshelf) { |
|
|
@ -897,7 +902,6 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
|
|
|
|
|
|
|
|
override fun onDestroy() { |
|
|
|
override fun onDestroy() { |
|
|
|
super.onDestroy() |
|
|
|
super.onDestroy() |
|
|
|
mHandler.removeCallbacks(keepScreenRunnable) |
|
|
|
|
|
|
|
textActionMenu.dismiss() |
|
|
|
textActionMenu.dismiss() |
|
|
|
binding.readView.onDestroy() |
|
|
|
binding.readView.onDestroy() |
|
|
|
ReadBook.msg = null |
|
|
|
ReadBook.msg = null |
|
|
@ -975,17 +979,20 @@ class ReadBookActivity : ReadBookBaseActivity(), |
|
|
|
* 重置黑屏时间 |
|
|
|
* 重置黑屏时间 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
override fun screenOffTimerStart() { |
|
|
|
override fun screenOffTimerStart() { |
|
|
|
if (screenTimeOut < 0) { |
|
|
|
keepScreenJon?.cancel() |
|
|
|
keepScreenOn(true) |
|
|
|
keepScreenJon = launch { |
|
|
|
return |
|
|
|
if (screenTimeOut < 0) { |
|
|
|
} |
|
|
|
keepScreenOn(true) |
|
|
|
val t = screenTimeOut - sysScreenOffTime |
|
|
|
return@launch |
|
|
|
if (t > 0) { |
|
|
|
} |
|
|
|
mHandler.removeCallbacks(keepScreenRunnable) |
|
|
|
val t = screenTimeOut - sysScreenOffTime |
|
|
|
keepScreenOn(true) |
|
|
|
if (t > 0) { |
|
|
|
mHandler.postDelayed(keepScreenRunnable, screenTimeOut) |
|
|
|
keepScreenOn(true) |
|
|
|
} else { |
|
|
|
delay(screenTimeOut) |
|
|
|
keepScreenOn(false) |
|
|
|
keepScreenOn(false) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
keepScreenOn(false) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |