diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index b139d5e41..51f8714ea 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -54,6 +54,7 @@ class App : Application() { override fun onCreate() { super.onCreate() CrashHandler(this) + LogUtils.init(this) LogUtils.d("App", "onCreate") LogUtils.logDeviceInfo() if (isDebuggable) { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt index 51f6d96a7..c827e5eff 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt @@ -197,8 +197,8 @@ class ReadMangaActivity : VMBaseActivity if (mAdapter.isNotEmpty()) { @@ -478,13 +478,13 @@ class ReadMangaActivity : VMBaseActivity { item.isChecked = !item.isChecked AppConfig.disableMangaScale = item.isChecked - disableMangaScaling(item.isChecked) + setDisableMangaScale(item.isChecked) } R.id.menu_disable_click_scroll -> { item.isChecked = !item.isChecked AppConfig.disableClickScroll = item.isChecked - disabledClickScroll(item.isChecked) + setDisableClickScroll(item.isChecked) } R.id.menu_enable_auto_page -> { @@ -594,15 +594,15 @@ class ReadMangaActivity : VMBaseActivity { - if (isEmpty()) return emptyList() - if (position >= getItems().size) return emptyList() + if (isEmpty() || position >= getItems().size) { + return emptyList() + } return getItems().subList(position, position + 1) } diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonRecyclerView.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonRecyclerView.kt index e9f0dbcbf..a274f3264 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonRecyclerView.kt +++ b/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.ValueAnimator import android.content.Context -import android.graphics.RectF import android.util.AttributeSet import android.view.HapticFeedbackConstants import android.view.MotionEvent @@ -42,7 +41,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( var doubleTapZoom = true var tapListener: ((MotionEvent) -> Unit)? = null var longTapListener: ((MotionEvent) -> Boolean)? = null - var disableMangaScaling = false + var disableMangaScale = false override fun onMeasure(widthSpec: Int, heightSpec: Int) { halfWidth = MeasureSpec.getSize(widthSpec) / 2 @@ -277,7 +276,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( MotionEvent.ACTION_DOWN -> { scrollPointerId = ev.getPointerId(0) downX = (ev.x + 0.5f).toInt() - downY =(ev.y + 0.5f).toInt() + downY = (ev.y + 0.5f).toInt() } MotionEvent.ACTION_POINTER_DOWN -> { @@ -287,7 +286,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( } MotionEvent.ACTION_MOVE -> { - if (disableMangaScaling) { + if (disableMangaScale) { return super.onTouchEvent(ev) } if (isDoubleTapping && isQuickScaling) { @@ -335,7 +334,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( } MotionEvent.ACTION_UP -> { - if (isDoubleTapping && !isQuickScaling && !disableMangaScaling) { + if (isDoubleTapping && !isQuickScaling && !disableMangaScale) { listener.onDoubleTapConfirmed(ev) } isZoomDragging = false diff --git a/app/src/main/java/io/legado/app/utils/LogUtils.kt b/app/src/main/java/io/legado/app/utils/LogUtils.kt index c190c146a..ac742b672 100644 --- a/app/src/main/java/io/legado/app/utils/LogUtils.kt +++ b/app/src/main/java/io/legado/app/utils/LogUtils.kt @@ -3,6 +3,7 @@ package io.legado.app.utils import android.annotation.SuppressLint +import android.content.Context import android.os.Build import android.webkit.WebSettings import io.legado.app.BuildConfig @@ -12,6 +13,7 @@ import io.legado.app.help.config.AppConfig import splitties.init.appCtx import java.text.SimpleDateFormat import java.util.Date +import java.util.logging.FileHandler import java.util.logging.Level import java.util.logging.LogRecord import java.util.logging.Logger @@ -23,6 +25,10 @@ object LogUtils { const val TIME_PATTERN = "yy-MM-dd HH:mm:ss.SSS" val logTimeFormat by lazy { SimpleDateFormat(TIME_PATTERN) } + fun init(context: Context) { + fileHandler = createFileHandler(context) + } + @JvmStatic fun d(tag: String, msg: String) { 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 { - val root = appCtx.externalCacheDir ?: return@lazy null + val root = context.externalCacheDir ?: return null val logFolder = FileUtils.createFolderIfNotExist(root, "logs") val expiredTime = System.currentTimeMillis() - 7.days.inWholeMilliseconds logFolder.listFiles()?.forEach { @@ -59,11 +67,11 @@ object LogUtils { } val date = getCurrentDateStr(TIME_PATTERN) val logPath = FileUtils.getPath(root = logFolder, "appLog-$date.txt") - AsyncFileHandler(logPath).apply { + return AsyncFileHandler(logPath).apply { formatter = object : java.util.logging.Formatter() { override fun format(record: LogRecord): String { // 设置文件输出格式 - return (getCurrentDateStr(TIME_PATTERN) + ": " + record.message + "\n") + return getCurrentDateStr(TIME_PATTERN) + ": " + record.message + "\n" } } level = if (AppConfig.recordLog) { @@ -75,7 +83,7 @@ object LogUtils { } catch (e: Exception) { e.printStackTrace() AppLog.putNotSave("创建fileHandler出错\n$e", e) - return@lazy null + return null } }