pull/473/head
gedoor 4 years ago
parent d8727e44f1
commit a3fe7ffd29
  1. 44
      app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt
  2. 94
      app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt

@ -18,7 +18,6 @@ import androidx.core.view.size
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
import io.legado.app.BuildConfig import io.legado.app.BuildConfig
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.constant.Status import io.legado.app.constant.Status
@ -68,7 +67,7 @@ import org.jetbrains.anko.startActivity
import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.toast import org.jetbrains.anko.toast
class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_book_read), class ReadBookActivity : ReadBookBaseActivity(),
View.OnTouchListener, View.OnTouchListener,
PageView.CallBack, PageView.CallBack,
TextActionMenu.CallBack, TextActionMenu.CallBack,
@ -87,15 +86,12 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
private var menu: Menu? = null private var menu: Menu? = null
private var textActionMenu: TextActionMenu? = null private var textActionMenu: TextActionMenu? = null
override val viewModel: ReadBookViewModel
get() = getViewModel(ReadBookViewModel::class.java)
override val scope: CoroutineScope get() = this override val scope: CoroutineScope get() = this
override val isInitFinish: Boolean get() = viewModel.isInitFinish override val isInitFinish: Boolean get() = viewModel.isInitFinish
override val isScroll: Boolean get() = page_view.isScroll override val isScroll: Boolean get() = page_view.isScroll
private val mHandler = Handler(Looper.getMainLooper()) private val mHandler = Handler(Looper.getMainLooper())
private val keepScreenRunnable: Runnable = private val keepScreenRunnable: Runnable =
Runnable { ReadBookActivityHelp.keepScreenOn(window, false) } Runnable { keepScreenOn(window, false) }
private val autoPageRunnable: Runnable = Runnable { autoPagePlus() } private val autoPageRunnable: Runnable = Runnable { autoPagePlus() }
override var autoPageProgress = 0 override var autoPageProgress = 0
override var isAutoPage = false override var isAutoPage = false
@ -105,14 +101,8 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
override val pageFactory: TextPageFactory get() = page_view.pageFactory override val pageFactory: TextPageFactory get() = page_view.pageFactory
override val headerHeight: Int get() = page_view.curPage.headerHeight override val headerHeight: Int get() = page_view.curPage.headerHeight
override fun onCreate(savedInstanceState: Bundle?) {
ReadBook.msg = null
ReadBookActivityHelp.setOrientation(this)
super.onCreate(savedInstanceState)
}
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
ReadBookActivityHelp.upLayoutInDisplayCutoutMode(window) upLayoutInDisplayCutoutMode()
initView() initView()
upScreenTimeOut() upScreenTimeOut()
ReadBook.callBack = this ReadBook.callBack = this
@ -198,14 +188,6 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
} }
} }
fun showPaddingConfig() {
PaddingConfigDialog().show(supportFragmentManager, "paddingConfig")
}
fun showBgTextConfig() {
BgTextConfigDialog().show(supportFragmentManager, "bgTextConfig")
}
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.read_book, menu) menuInflater.inflate(R.menu.read_book, menu)
return super.onCompatCreateOptionsMenu(menu) return super.onCompatCreateOptionsMenu(menu)
@ -257,8 +239,8 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
viewModel.refreshContent(it) viewModel.refreshContent(it)
} }
} }
R.id.menu_download -> ReadBookActivityHelp.showDownloadDialog(this) R.id.menu_download -> showDownloadDialog()
R.id.menu_add_bookmark -> ReadBookActivityHelp.showBookMark(this) R.id.menu_add_bookmark -> showBookMark()
R.id.menu_copy_text -> R.id.menu_copy_text ->
TextDialog.show(supportFragmentManager, ReadBook.curTextChapter?.getContent()) TextDialog.show(supportFragmentManager, ReadBook.curTextChapter?.getContent())
R.id.menu_update_toc -> ReadBook.book?.let { R.id.menu_update_toc -> ReadBook.book?.let {
@ -274,7 +256,7 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
menu?.findItem(R.id.menu_re_segment)?.isChecked = it.getReSegment() menu?.findItem(R.id.menu_re_segment)?.isChecked = it.getReSegment()
ReadBook.loadContent(false) ReadBook.loadContent(false)
} }
R.id.menu_page_anim -> ReadBookActivityHelp.showPageAnimConfig(this) { R.id.menu_page_anim -> showPageAnimConfig {
page_view.upPageAnim() page_view.upPageAnim()
} }
R.id.menu_book_info -> ReadBook.book?.let { R.id.menu_book_info -> ReadBook.book?.let {
@ -293,7 +275,7 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
Pair("loginUrl", it.loginUrl) Pair("loginUrl", it.loginUrl)
) )
} }
R.id.menu_set_charset -> ReadBookActivityHelp.showCharsetConfig(this) R.id.menu_set_charset -> showCharsetConfig()
} }
return super.onCompatOptionsItemSelected(item) return super.onCompatOptionsItemSelected(item)
} }
@ -324,13 +306,13 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
*/ */
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
when { when {
ReadBookActivityHelp.isPrevKey(this, keyCode) -> { isPrevKey(keyCode) -> {
if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { if (keyCode != KeyEvent.KEYCODE_UNKNOWN) {
page_view.pageDelegate?.keyTurnPage(PageDelegate.Direction.PREV) page_view.pageDelegate?.keyTurnPage(PageDelegate.Direction.PREV)
return true return true
} }
} }
ReadBookActivityHelp.isNextKey(this, keyCode) -> { isNextKey(keyCode) -> {
if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { if (keyCode != KeyEvent.KEYCODE_UNKNOWN) {
page_view.pageDelegate?.keyTurnPage(PageDelegate.Direction.NEXT) page_view.pageDelegate?.keyTurnPage(PageDelegate.Direction.NEXT)
return true return true
@ -736,7 +718,7 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
* 更新状态栏,导航栏 * 更新状态栏,导航栏
*/ */
override fun upSystemUiVisibility() { override fun upSystemUiVisibility() {
ReadBookActivityHelp.upSystemUiVisibility(this, isInMultiWindow, !read_menu.isVisible) upSystemUiVisibility(isInMultiWindow, !read_menu.isVisible)
upNavigationBarColor() upNavigationBarColor()
} }
@ -950,16 +932,16 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_boo
*/ */
override fun screenOffTimerStart() { override fun screenOffTimerStart() {
if (screenTimeOut < 0) { if (screenTimeOut < 0) {
ReadBookActivityHelp.keepScreenOn(window, true) keepScreenOn(window, true)
return return
} }
val t = screenTimeOut - sysScreenOffTime val t = screenTimeOut - sysScreenOffTime
if (t > 0) { if (t > 0) {
mHandler.removeCallbacks(keepScreenRunnable) mHandler.removeCallbacks(keepScreenRunnable)
ReadBookActivityHelp.keepScreenOn(window, true) keepScreenOn(window, true)
mHandler.postDelayed(keepScreenRunnable, screenTimeOut) mHandler.postDelayed(keepScreenRunnable, screenTimeOut)
} else { } else {
ReadBookActivityHelp.keepScreenOn(window, false) keepScreenOn(window, false)
} }
} }
} }

@ -1,14 +1,14 @@
package io.legado.app.ui.book.read package io.legado.app.ui.book.read
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.os.Build import android.os.Build
import android.os.Bundle
import android.view.* import android.view.*
import android.widget.EditText import android.widget.EditText
import io.legado.app.App import io.legado.app.App
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.data.entities.Bookmark import io.legado.app.data.entities.Bookmark
import io.legado.app.help.AppConfig import io.legado.app.help.AppConfig
@ -20,27 +20,60 @@ import io.legado.app.lib.theme.ThemeStore
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.service.help.CacheBook import io.legado.app.service.help.CacheBook
import io.legado.app.service.help.ReadBook import io.legado.app.service.help.ReadBook
import io.legado.app.ui.book.read.config.BgTextConfigDialog
import io.legado.app.ui.book.read.config.PaddingConfigDialog
import io.legado.app.ui.widget.text.AutoCompleteTextView import io.legado.app.ui.widget.text.AutoCompleteTextView
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.getPrefString import io.legado.app.utils.getPrefString
import io.legado.app.utils.getViewModel
import io.legado.app.utils.requestInputMethod import io.legado.app.utils.requestInputMethod
import kotlinx.android.synthetic.main.dialog_download_choice.view.* import kotlinx.android.synthetic.main.dialog_download_choice.view.*
import kotlinx.android.synthetic.main.dialog_edit_text.view.* import kotlinx.android.synthetic.main.dialog_edit_text.view.*
import org.jetbrains.anko.layoutInflater
abstract class ReadBookBaseActivity :
VMBaseActivity<ReadBookViewModel>(R.layout.activity_book_read) {
override val viewModel: ReadBookViewModel
get() = getViewModel(ReadBookViewModel::class.java)
override fun onCreate(savedInstanceState: Bundle?) {
ReadBook.msg = null
setOrientation()
super.onCreate(savedInstanceState)
}
fun showPaddingConfig() {
PaddingConfigDialog().show(supportFragmentManager, "paddingConfig")
}
fun showBgTextConfig() {
BgTextConfigDialog().show(supportFragmentManager, "bgTextConfig")
}
/**
* 屏幕方向
*/
@SuppressLint("SourceLockedOrientationActivity")
fun setOrientation() {
when (AppConfig.requestedDirection) {
"0" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
"1" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
"2" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
"3" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
}
}
object ReadBookActivityHelp {
/** /**
* 更新状态栏,导航栏 * 更新状态栏,导航栏
*/ */
fun upSystemUiVisibility( fun upSystemUiVisibility(
activity: Activity,
isInMultiWindow: Boolean, isInMultiWindow: Boolean,
toolBarHide: Boolean = true toolBarHide: Boolean = true
) { ) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
activity.window.insetsController?.let { window.insetsController?.let {
if (toolBarHide) { if (toolBarHide) {
if (ReadBookConfig.hideStatusBar) { if (ReadBookConfig.hideStatusBar) {
it.hide(WindowInsets.Type.statusBars()) it.hide(WindowInsets.Type.statusBars())
@ -54,20 +87,19 @@ object ReadBookActivityHelp {
} }
} }
} }
upSystemUiVisibilityO(activity, isInMultiWindow, toolBarHide) upSystemUiVisibilityO(isInMultiWindow, toolBarHide)
if (toolBarHide) { if (toolBarHide) {
ATH.setLightStatusBar(activity, ReadBookConfig.durConfig.curStatusIconDark()) ATH.setLightStatusBar(this, ReadBookConfig.durConfig.curStatusIconDark())
} else { } else {
ATH.setLightStatusBarAuto( ATH.setLightStatusBarAuto(
activity, this,
ThemeStore.statusBarColor(activity, AppConfig.isTransparentStatusBar) ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar)
) )
} }
} }
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
private fun upSystemUiVisibilityO( private fun upSystemUiVisibilityO(
activity: Activity,
isInMultiWindow: Boolean, isInMultiWindow: Boolean,
toolBarHide: Boolean = true toolBarHide: Boolean = true
) { ) {
@ -88,20 +120,7 @@ object ReadBookActivityHelp {
flag = flag or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION flag = flag or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
} }
} }
activity.window.decorView.systemUiVisibility = flag window.decorView.systemUiVisibility = flag
}
/**
* 屏幕方向
*/
@SuppressLint("SourceLockedOrientationActivity")
fun setOrientation(activity: Activity) = activity.apply {
when (AppConfig.requestedDirection) {
"0" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
"1" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
"2" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
"3" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
}
} }
@ -119,7 +138,7 @@ object ReadBookActivityHelp {
/** /**
* 适配刘海 * 适配刘海
*/ */
fun upLayoutInDisplayCutoutMode(window: Window) { fun upLayoutInDisplayCutoutMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && AppConfig.readBodyToLh) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && AppConfig.readBodyToLh) {
window.attributes = window.attributes.apply { window.attributes = window.attributes.apply {
layoutInDisplayCutoutMode = layoutInDisplayCutoutMode =
@ -129,12 +148,13 @@ object ReadBookActivityHelp {
} }
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
fun showDownloadDialog(context: Context) { fun showDownloadDialog() {
ReadBook.book?.let { book -> ReadBook.book?.let { book ->
context.alert(titleResource = R.string.offline_cache) { alert(titleResource = R.string.offline_cache) {
var view: View? = null var view: View? = null
customView { customView {
LayoutInflater.from(context).inflate(R.layout.dialog_download_choice, null) LayoutInflater.from(this@ReadBookBaseActivity)
.inflate(R.layout.dialog_download_choice, null)
.apply { .apply {
view = this view = this
setBackgroundColor(context.backgroundColor) setBackgroundColor(context.backgroundColor)
@ -155,10 +175,10 @@ object ReadBookActivityHelp {
} }
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
fun showBookMark(context: Context) = with(context) { fun showBookMark() {
val book = ReadBook.book ?: return val book = ReadBook.book ?: return
val textChapter = ReadBook.curTextChapter ?: return val textChapter = ReadBook.curTextChapter ?: return
context.alert(title = getString(R.string.bookmark_add)) { alert(title = getString(R.string.bookmark_add)) {
var editText: EditText? = null var editText: EditText? = null
message = book.name + "" + textChapter.title message = book.name + "" + textChapter.title
customView { customView {
@ -188,7 +208,7 @@ object ReadBookActivityHelp {
} }
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
fun showCharsetConfig(context: Context) = with(context) { fun showCharsetConfig() {
val charsets = val charsets =
arrayListOf("UTF-8", "GB2312", "GBK", "Unicode", "UTF-16", "UTF-16LE", "ASCII") arrayListOf("UTF-8", "GB2312", "GBK", "Unicode", "UTF-16", "UTF-16LE", "ASCII")
alert(R.string.set_charset) { alert(R.string.set_charset) {
@ -210,7 +230,7 @@ object ReadBookActivityHelp {
}.show().applyTint() }.show().applyTint()
} }
fun showPageAnimConfig(context: Context, success: () -> Unit) = with(context) { fun showPageAnimConfig(success: () -> Unit) {
val items = arrayListOf<String>() val items = arrayListOf<String>()
items.add(getString(R.string.btn_default_s)) items.add(getString(R.string.btn_default_s))
items.add(getString(R.string.page_anim_cover)) items.add(getString(R.string.page_anim_cover))
@ -224,13 +244,13 @@ object ReadBookActivityHelp {
} }
} }
fun isPrevKey(context: Context, keyCode: Int): Boolean { fun isPrevKey(keyCode: Int): Boolean {
val prevKeysStr = context.getPrefString(PreferKey.prevKeys) val prevKeysStr = getPrefString(PreferKey.prevKeys)
return prevKeysStr?.split(",")?.contains(keyCode.toString()) ?: false return prevKeysStr?.split(",")?.contains(keyCode.toString()) ?: false
} }
fun isNextKey(context: Context, keyCode: Int): Boolean { fun isNextKey(keyCode: Int): Boolean {
val nextKeysStr = context.getPrefString(PreferKey.nextKeys) val nextKeysStr = getPrefString(PreferKey.nextKeys)
return nextKeysStr?.split(",")?.contains(keyCode.toString()) ?: false return nextKeysStr?.split(",")?.contains(keyCode.toString()) ?: false
} }
} }
Loading…
Cancel
Save