优化
This commit is contained in:
@@ -54,6 +54,7 @@ class App : Application() {
|
|||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
CrashHandler(this)
|
CrashHandler(this)
|
||||||
|
LogUtils.init(this)
|
||||||
LogUtils.d("App", "onCreate")
|
LogUtils.d("App", "onCreate")
|
||||||
LogUtils.logDeviceInfo()
|
LogUtils.logDeviceInfo()
|
||||||
if (isDebuggable) {
|
if (isDebuggable) {
|
||||||
|
|||||||
@@ -197,8 +197,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
mLayoutManager.initialPrefetchItemCount = 4
|
mLayoutManager.initialPrefetchItemCount = 4
|
||||||
mLayoutManager.isItemPrefetchEnabled = true
|
mLayoutManager.isItemPrefetchEnabled = true
|
||||||
setItemViewCacheSize(AppConfig.preDownloadNum)
|
setItemViewCacheSize(AppConfig.preDownloadNum)
|
||||||
disabledClickScroll(AppConfig.disableClickScroll)
|
setDisableClickScroll(AppConfig.disableClickScroll)
|
||||||
disableMangaScaling(AppConfig.disableMangaScale)
|
setDisableMangaScale(AppConfig.disableMangaScale)
|
||||||
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
|
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
|
||||||
setPreScrollListener { _, _, _, position ->
|
setPreScrollListener { _, _, _, position ->
|
||||||
if (mAdapter.isNotEmpty()) {
|
if (mAdapter.isNotEmpty()) {
|
||||||
@@ -478,13 +478,13 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
R.id.menu_disable_manga_scale -> {
|
R.id.menu_disable_manga_scale -> {
|
||||||
item.isChecked = !item.isChecked
|
item.isChecked = !item.isChecked
|
||||||
AppConfig.disableMangaScale = item.isChecked
|
AppConfig.disableMangaScale = item.isChecked
|
||||||
disableMangaScaling(item.isChecked)
|
setDisableMangaScale(item.isChecked)
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_disable_click_scroll -> {
|
R.id.menu_disable_click_scroll -> {
|
||||||
item.isChecked = !item.isChecked
|
item.isChecked = !item.isChecked
|
||||||
AppConfig.disableClickScroll = item.isChecked
|
AppConfig.disableClickScroll = item.isChecked
|
||||||
disabledClickScroll(item.isChecked)
|
setDisableClickScroll(item.isChecked)
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_enable_auto_page -> {
|
R.id.menu_enable_auto_page -> {
|
||||||
@@ -594,15 +594,15 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
AppConfig.enableMangaHorizontalScroll
|
AppConfig.enableMangaHorizontalScroll
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disableMangaScaling(disable: Boolean) {
|
private fun setDisableMangaScale(disable: Boolean) {
|
||||||
binding.webtoonFrame.disableMangaScale = disable
|
binding.webtoonFrame.disableMangaScale = disable
|
||||||
binding.mRecyclerManga.disableMangaScaling = disable
|
binding.mRecyclerManga.disableMangaScale = disable
|
||||||
if (disable) {
|
if (disable) {
|
||||||
binding.mRecyclerManga.resetZoom()
|
binding.mRecyclerManga.resetZoom()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disabledClickScroll(disable: Boolean) {
|
private fun setDisableClickScroll(disable: Boolean) {
|
||||||
binding.webtoonFrame.disabledClickScroll = disable
|
binding.webtoonFrame.disabledClickScroll = disable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -215,8 +215,9 @@ class MangaAdapter(private val context: Context) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getPreloadItems(position: Int): List<Any> {
|
override fun getPreloadItems(position: Int): List<Any> {
|
||||||
if (isEmpty()) return emptyList()
|
if (isEmpty() || position >= getItems().size) {
|
||||||
if (position >= getItems().size) return emptyList()
|
return emptyList()
|
||||||
|
}
|
||||||
return getItems().subList(position, position + 1)
|
return getItems().subList(position, position + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package io.legado.app.ui.book.manga.recyclerview
|
|||||||
import android.animation.AnimatorSet
|
import android.animation.AnimatorSet
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.RectF
|
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.HapticFeedbackConstants
|
import android.view.HapticFeedbackConstants
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
@@ -42,7 +41,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
var doubleTapZoom = true
|
var doubleTapZoom = true
|
||||||
var tapListener: ((MotionEvent) -> Unit)? = null
|
var tapListener: ((MotionEvent) -> Unit)? = null
|
||||||
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
||||||
var disableMangaScaling = false
|
var disableMangaScale = false
|
||||||
|
|
||||||
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
||||||
halfWidth = MeasureSpec.getSize(widthSpec) / 2
|
halfWidth = MeasureSpec.getSize(widthSpec) / 2
|
||||||
@@ -277,7 +276,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
MotionEvent.ACTION_DOWN -> {
|
MotionEvent.ACTION_DOWN -> {
|
||||||
scrollPointerId = ev.getPointerId(0)
|
scrollPointerId = ev.getPointerId(0)
|
||||||
downX = (ev.x + 0.5f).toInt()
|
downX = (ev.x + 0.5f).toInt()
|
||||||
downY =(ev.y + 0.5f).toInt()
|
downY = (ev.y + 0.5f).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||||
@@ -287,7 +286,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
MotionEvent.ACTION_MOVE -> {
|
MotionEvent.ACTION_MOVE -> {
|
||||||
if (disableMangaScaling) {
|
if (disableMangaScale) {
|
||||||
return super.onTouchEvent(ev)
|
return super.onTouchEvent(ev)
|
||||||
}
|
}
|
||||||
if (isDoubleTapping && isQuickScaling) {
|
if (isDoubleTapping && isQuickScaling) {
|
||||||
@@ -335,7 +334,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
MotionEvent.ACTION_UP -> {
|
MotionEvent.ACTION_UP -> {
|
||||||
if (isDoubleTapping && !isQuickScaling && !disableMangaScaling) {
|
if (isDoubleTapping && !isQuickScaling && !disableMangaScale) {
|
||||||
listener.onDoubleTapConfirmed(ev)
|
listener.onDoubleTapConfirmed(ev)
|
||||||
}
|
}
|
||||||
isZoomDragging = false
|
isZoomDragging = false
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
package io.legado.app.utils
|
package io.legado.app.utils
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.webkit.WebSettings
|
import android.webkit.WebSettings
|
||||||
import io.legado.app.BuildConfig
|
import io.legado.app.BuildConfig
|
||||||
@@ -12,6 +13,7 @@ import io.legado.app.help.config.AppConfig
|
|||||||
import splitties.init.appCtx
|
import splitties.init.appCtx
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
import java.util.logging.FileHandler
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
import java.util.logging.LogRecord
|
import java.util.logging.LogRecord
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
@@ -23,6 +25,10 @@ object LogUtils {
|
|||||||
const val TIME_PATTERN = "yy-MM-dd HH:mm:ss.SSS"
|
const val TIME_PATTERN = "yy-MM-dd HH:mm:ss.SSS"
|
||||||
val logTimeFormat by lazy { SimpleDateFormat(TIME_PATTERN) }
|
val logTimeFormat by lazy { SimpleDateFormat(TIME_PATTERN) }
|
||||||
|
|
||||||
|
fun init(context: Context) {
|
||||||
|
fileHandler = createFileHandler(context)
|
||||||
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun d(tag: String, msg: String) {
|
fun d(tag: String, msg: String) {
|
||||||
logger.log(Level.INFO, "$tag $msg")
|
logger.log(Level.INFO, "$tag $msg")
|
||||||
@@ -47,9 +53,11 @@ object LogUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val fileHandler by lazy {
|
private var fileHandler: FileHandler? = null
|
||||||
|
|
||||||
|
private fun createFileHandler(context: Context): FileHandler? {
|
||||||
try {
|
try {
|
||||||
val root = appCtx.externalCacheDir ?: return@lazy null
|
val root = context.externalCacheDir ?: return null
|
||||||
val logFolder = FileUtils.createFolderIfNotExist(root, "logs")
|
val logFolder = FileUtils.createFolderIfNotExist(root, "logs")
|
||||||
val expiredTime = System.currentTimeMillis() - 7.days.inWholeMilliseconds
|
val expiredTime = System.currentTimeMillis() - 7.days.inWholeMilliseconds
|
||||||
logFolder.listFiles()?.forEach {
|
logFolder.listFiles()?.forEach {
|
||||||
@@ -59,11 +67,11 @@ object LogUtils {
|
|||||||
}
|
}
|
||||||
val date = getCurrentDateStr(TIME_PATTERN)
|
val date = getCurrentDateStr(TIME_PATTERN)
|
||||||
val logPath = FileUtils.getPath(root = logFolder, "appLog-$date.txt")
|
val logPath = FileUtils.getPath(root = logFolder, "appLog-$date.txt")
|
||||||
AsyncFileHandler(logPath).apply {
|
return AsyncFileHandler(logPath).apply {
|
||||||
formatter = object : java.util.logging.Formatter() {
|
formatter = object : java.util.logging.Formatter() {
|
||||||
override fun format(record: LogRecord): String {
|
override fun format(record: LogRecord): String {
|
||||||
// 设置文件输出格式
|
// 设置文件输出格式
|
||||||
return (getCurrentDateStr(TIME_PATTERN) + ": " + record.message + "\n")
|
return getCurrentDateStr(TIME_PATTERN) + ": " + record.message + "\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
level = if (AppConfig.recordLog) {
|
level = if (AppConfig.recordLog) {
|
||||||
@@ -75,7 +83,7 @@ object LogUtils {
|
|||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
AppLog.putNotSave("创建fileHandler出错\n$e", e)
|
AppLog.putNotSave("创建fileHandler出错\n$e", e)
|
||||||
return@lazy null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user