Horis 1 год назад
Родитель
Сommit
b9d424bce3

+ 1 - 0
app/src/main/java/io/legado/app/App.kt

@@ -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) {

+ 7 - 7
app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt

@@ -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)
-            disableMangaScaling(AppConfig.disableMangaScale)
+            setDisableClickScroll(AppConfig.disableClickScroll)
+            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
     }
     }
 
 

+ 3 - 2
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt

@@ -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 (position >= getItems().size) return emptyList()
+        if (isEmpty() || position >= getItems().size) {
+            return emptyList()
+        }
         return getItems().subList(position, position + 1)
         return getItems().subList(position, position + 1)
     }
     }
 
 

+ 4 - 5
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonRecyclerView.kt

@@ -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

+ 13 - 5
app/src/main/java/io/legado/app/utils/LogUtils.kt

@@ -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
         }
         }
     }
     }