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

+ 3 - 3
app/src/main/java/io/legado/app/api/controller/BookSourceController.kt

@@ -3,9 +3,10 @@ package io.legado.app.api.controller
 
 
 import android.text.TextUtils
 import android.text.TextUtils
 import io.legado.app.api.ReturnData
 import io.legado.app.api.ReturnData
+import io.legado.app.constant.SourceType
 import io.legado.app.data.appDb
 import io.legado.app.data.appDb
 import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.BookSource
-import io.legado.app.help.config.SourceConfig
+import io.legado.app.help.source.SourceHelp
 import io.legado.app.utils.GSON
 import io.legado.app.utils.GSON
 import io.legado.app.utils.fromJsonArray
 import io.legado.app.utils.fromJsonArray
 import io.legado.app.utils.fromJsonObject
 import io.legado.app.utils.fromJsonObject
@@ -71,8 +72,7 @@ object BookSourceController {
         kotlin.runCatching {
         kotlin.runCatching {
             GSON.fromJsonArray<BookSource>(postData).getOrThrow().let {
             GSON.fromJsonArray<BookSource>(postData).getOrThrow().let {
                 it.forEach { source ->
                 it.forEach { source ->
-                    appDb.bookSourceDao.delete(source)
-                    SourceConfig.removeSource(source.bookSourceUrl)
+                    SourceHelp.deleteBookSource(source.bookSourceUrl)
                 }
                 }
             }
             }
         }.onFailure {
         }.onFailure {

+ 8 - 0
app/src/main/java/io/legado/app/data/dao/CacheDao.kt

@@ -21,6 +21,14 @@ interface CacheDao {
     @Query("delete from caches where `key` = :key")
     @Query("delete from caches where `key` = :key")
     fun delete(key: String)
     fun delete(key: String)
 
 
+    @Query(
+        """delete from caches where `key` like 'v_' || :key || '_%'
+        or `key` = 'userInfo_' || :key
+        or `key` = 'loginHeader_' || :key
+        or `key` = 'sourceVariable_' || :key"""
+    )
+    fun deleteSourceVariables(key: String)
+
     @Query("delete from caches where deadline > 0 and deadline < :now")
     @Query("delete from caches where deadline > 0 and deadline < :now")
     fun clearDeadline(now: Long)
     fun clearDeadline(now: Long)
 
 

+ 7 - 1
app/src/main/java/io/legado/app/help/source/SourceHelp.kt

@@ -54,15 +54,21 @@ object SourceHelp {
     fun deleteSource(key: String, @SourceType.Type type: Int) {
     fun deleteSource(key: String, @SourceType.Type type: Int) {
         when (type) {
         when (type) {
             SourceType.book -> deleteBookSource(key)
             SourceType.book -> deleteBookSource(key)
-            SourceType.rss -> appDb.rssSourceDao.delete(key)
+            SourceType.rss -> deleteRssSource(key)
         }
         }
     }
     }
 
 
     fun deleteBookSource(key: String) {
     fun deleteBookSource(key: String) {
         appDb.bookSourceDao.delete(key)
         appDb.bookSourceDao.delete(key)
+        appDb.cacheDao.deleteSourceVariables(key)
         SourceConfig.removeSource(key)
         SourceConfig.removeSource(key)
     }
     }
 
 
+    fun deleteRssSource(key: String) {
+        appDb.rssSourceDao.delete(key)
+        appDb.cacheDao.deleteSourceVariables(key)
+    }
+
     fun enableSource(key: String, @SourceType.Type type: Int, enable: Boolean) {
     fun enableSource(key: String, @SourceType.Type type: Int, enable: Boolean) {
         when (type) {
         when (type) {
             SourceType.book -> appDb.bookSourceDao.enable(key, enable)
             SourceType.book -> appDb.bookSourceDao.enable(key, enable)

+ 3 - 5
app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt

@@ -23,6 +23,7 @@ import io.legado.app.help.book.releaseHtmlData
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.SourceConfig
 import io.legado.app.help.config.SourceConfig
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.coroutine.Coroutine
+import io.legado.app.help.source.SourceHelp
 import io.legado.app.model.webBook.WebBook
 import io.legado.app.model.webBook.WebBook
 import io.legado.app.utils.internString
 import io.legado.app.utils.internString
 import io.legado.app.utils.mapParallel
 import io.legado.app.utils.mapParallel
@@ -520,11 +521,8 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
 
 
     fun del(searchBook: SearchBook) {
     fun del(searchBook: SearchBook) {
         execute {
         execute {
-            appDb.bookSourceDao.getBookSource(searchBook.origin)?.let { source ->
-                appDb.bookSourceDao.delete(source)
-                appDb.searchBookDao.delete(searchBook)
-                SourceConfig.removeSource(source.bookSourceUrl)
-            }
+            SourceHelp.deleteBookSource(searchBook.origin)
+            appDb.searchBookDao.delete(searchBook)
         }
         }
         searchBooks.remove(searchBook)
         searchBooks.remove(searchBook)
         searchCallback?.upAdapter()
         searchCallback?.upAdapter()

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt

@@ -5,7 +5,6 @@ import android.os.Bundle
 import android.view.Menu
 import android.view.Menu
 import android.view.MenuItem
 import android.view.MenuItem
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
 import io.legado.app.R
 import io.legado.app.R
 import io.legado.app.base.VMBaseActivity
 import io.legado.app.base.VMBaseActivity
@@ -26,6 +25,7 @@ import io.legado.app.utils.externalFiles
 import io.legado.app.utils.inputStream
 import io.legado.app.utils.inputStream
 import io.legado.app.utils.launch
 import io.legado.app.utils.launch
 import io.legado.app.utils.readUri
 import io.legado.app.utils.readUri
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.toastOnUi
 import io.legado.app.utils.toastOnUi
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import io.legado.app.utils.viewbindingdelegate.viewBinding
@@ -70,10 +70,10 @@ class BookInfoEditActivity :
     }
     }
 
 
     private fun initView() {
     private fun initView() {
-        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+        binding.root.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
             val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
             val insets = windowInsets.getInsets(typeMask)
             val insets = windowInsets.getInsets(typeMask)
-            binding.root.bottomPadding = insets.bottom
+            view.bottomPadding = insets.bottom
             windowInsets
             windowInsets
         }
         }
     }
     }

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt

@@ -10,7 +10,6 @@ import android.view.View
 import android.view.WindowInsets
 import android.view.WindowInsets
 import android.view.WindowManager
 import android.view.WindowManager
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.isVisible
 import androidx.core.view.isVisible
 import androidx.core.view.updateLayoutParams
 import androidx.core.view.updateLayoutParams
@@ -44,6 +43,7 @@ import io.legado.app.utils.gone
 import io.legado.app.utils.isTv
 import io.legado.app.utils.isTv
 import io.legado.app.utils.setLightStatusBar
 import io.legado.app.utils.setLightStatusBar
 import io.legado.app.utils.setNavigationBarColorAuto
 import io.legado.app.utils.setNavigationBarColorAuto
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import java.time.LocalDate
 import java.time.LocalDate
@@ -84,9 +84,9 @@ abstract class BaseReadBookActivity :
         setOrientation()
         setOrientation()
         upLayoutInDisplayCutoutMode()
         upLayoutInDisplayCutoutMode()
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
-        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+        binding.navigationBar.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
             val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
-            binding.navigationBar.updateLayoutParams {
+            view.updateLayoutParams {
                 height = insets.bottom
                 height = insets.bottom
             }
             }
             windowInsets
             windowInsets

+ 5 - 4
app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt

@@ -6,7 +6,6 @@ import android.view.Menu
 import android.view.MenuItem
 import android.view.MenuItem
 import android.widget.EditText
 import android.widget.EditText
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
 import com.google.android.material.tabs.TabLayout
 import com.google.android.material.tabs.TabLayout
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
@@ -46,6 +45,7 @@ import io.legado.app.utils.launch
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.setEdgeEffectColor
 import io.legado.app.utils.setEdgeEffectColor
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.share
 import io.legado.app.utils.share
 import io.legado.app.utils.shareWithQr
 import io.legado.app.utils.shareWithQr
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
@@ -72,7 +72,8 @@ class BookSourceEditActivity :
     private val infoEntities: ArrayList<EditEntity> = ArrayList()
     private val infoEntities: ArrayList<EditEntity> = ArrayList()
     private val tocEntities: ArrayList<EditEntity> = ArrayList()
     private val tocEntities: ArrayList<EditEntity> = ArrayList()
     private val contentEntities: ArrayList<EditEntity> = ArrayList()
     private val contentEntities: ArrayList<EditEntity> = ArrayList()
-//    private val reviewEntities: ArrayList<EditEntity> = ArrayList()
+
+    //    private val reviewEntities: ArrayList<EditEntity> = ArrayList()
     private val qrCodeResult = registerForActivityResult(QrCodeResult()) {
     private val qrCodeResult = registerForActivityResult(QrCodeResult()) {
         it ?: return@registerForActivityResult
         it ?: return@registerForActivityResult
         viewModel.importSource(it) { source ->
         viewModel.importSource(it) { source ->
@@ -200,10 +201,10 @@ class BookSourceEditActivity :
                 setEditEntities(tab?.position)
                 setEditEntities(tab?.position)
             }
             }
         })
         })
-        ViewCompat.setOnApplyWindowInsetsListener(binding.recyclerView) { _, windowInsets ->
+        binding.recyclerView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val navigationBarHeight = windowInsets.navigationBarHeight
             val navigationBarHeight = windowInsets.navigationBarHeight
             val imeHeight = windowInsets.imeHeight
             val imeHeight = windowInsets.imeHeight
-            binding.recyclerView.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
+            view.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
             softKeyboardTool.initialPadding = imeHeight
             softKeyboardTool.initialPadding = imeHeight
             windowInsets
             windowInsets
         }
         }

+ 2 - 3
app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt

@@ -8,10 +8,10 @@ import io.legado.app.data.appDb
 import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.BookSource
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.RuleComplete
 import io.legado.app.help.RuleComplete
-import io.legado.app.help.config.SourceConfig
 import io.legado.app.help.http.CookieStore
 import io.legado.app.help.http.CookieStore
 import io.legado.app.help.http.newCallStrResponse
 import io.legado.app.help.http.newCallStrResponse
 import io.legado.app.help.http.okHttpClient
 import io.legado.app.help.http.okHttpClient
+import io.legado.app.help.source.SourceHelp
 import io.legado.app.help.source.clearExploreKindsCache
 import io.legado.app.help.source.clearExploreKindsCache
 import io.legado.app.help.storage.ImportOldData
 import io.legado.app.help.storage.ImportOldData
 import io.legado.app.model.SharedJsScope
 import io.legado.app.model.SharedJsScope
@@ -63,8 +63,7 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat
                 }
                 }
             }
             }
             bookSource?.let {
             bookSource?.let {
-                appDb.bookSourceDao.delete(it)
-                SourceConfig.removeSource(it.bookSourceUrl)
+                SourceHelp.deleteBookSource(it.bookSourceUrl)
             }
             }
             appDb.bookSourceDao.insert(source)
             appDb.bookSourceDao.insert(source)
             bookSource = source
             bookSource = source

+ 3 - 2
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt

@@ -4,11 +4,13 @@ import android.app.Application
 import android.text.TextUtils
 import android.text.TextUtils
 import io.legado.app.R
 import io.legado.app.R
 import io.legado.app.base.BaseViewModel
 import io.legado.app.base.BaseViewModel
+import io.legado.app.constant.SourceType
 import io.legado.app.data.appDb
 import io.legado.app.data.appDb
 import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.BookSourcePart
 import io.legado.app.data.entities.BookSourcePart
 import io.legado.app.data.entities.toBookSource
 import io.legado.app.data.entities.toBookSource
 import io.legado.app.help.config.SourceConfig
 import io.legado.app.help.config.SourceConfig
+import io.legado.app.help.source.SourceHelp
 import io.legado.app.utils.FileUtils
 import io.legado.app.utils.FileUtils
 import io.legado.app.utils.GSON
 import io.legado.app.utils.GSON
 import io.legado.app.utils.cnCompare
 import io.legado.app.utils.cnCompare
@@ -50,9 +52,8 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
 
 
     fun del(sources: List<BookSourcePart>) {
     fun del(sources: List<BookSourcePart>) {
         execute {
         execute {
-            appDb.bookSourceDao.delete(sources)
             sources.forEach {
             sources.forEach {
-                SourceConfig.removeSource(it.bookSourceUrl)
+                SourceHelp.deleteBookSource(it.bookSourceUrl)
             }
             }
         }
         }
     }
     }

+ 3 - 3
app/src/main/java/io/legado/app/ui/main/MainActivity.kt

@@ -9,7 +9,6 @@ import android.view.MotionEvent
 import android.view.ViewGroup
 import android.view.ViewGroup
 import androidx.activity.addCallback
 import androidx.activity.addCallback
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.core.view.postDelayed
 import androidx.core.view.postDelayed
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentManager
@@ -48,6 +47,7 @@ import io.legado.app.utils.isCreated
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.observeEvent
 import io.legado.app.utils.observeEvent
 import io.legado.app.utils.setEdgeEffectColor
 import io.legado.app.utils.setEdgeEffectColor
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.shouldHideSoftInput
 import io.legado.app.utils.shouldHideSoftInput
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.toastOnUi
 import io.legado.app.utils.toastOnUi
@@ -202,9 +202,9 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
         if (AppConfig.isEInkMode) {
         if (AppConfig.isEInkMode) {
             bottomNavigationView.setBackgroundResource(R.drawable.bg_eink_border_top)
             bottomNavigationView.setBackgroundResource(R.drawable.bg_eink_border_top)
         }
         }
-        ViewCompat.setOnApplyWindowInsetsListener(root) { _, windowInsets ->
+        bottomNavigationView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val height = windowInsets.navigationBarHeight
             val height = windowInsets.navigationBarHeight
-            bottomNavigationView.bottomPadding = height
+            view.bottomPadding = height
             windowInsets.inset(0, 0, 0, height)
             windowInsets.inset(0, 0, 0, height)
         }
         }
     }
     }

+ 2 - 1
app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt

@@ -18,6 +18,7 @@ import io.legado.app.ui.widget.keyboard.KeyboardToolPop
 import io.legado.app.utils.GSON
 import io.legado.app.utils.GSON
 import io.legado.app.utils.imeHeight
 import io.legado.app.utils.imeHeight
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.sendToClip
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.showHelp
 import io.legado.app.utils.showHelp
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
 
@@ -91,7 +92,7 @@ class ReplaceEditActivity :
         binding.ivHelp.setOnClickListener {
         binding.ivHelp.setOnClickListener {
             showHelp("regexHelp")
             showHelp("regexHelp")
         }
         }
-        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+        binding.root.setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
             softKeyboardTool.initialPadding = windowInsets.imeHeight
             softKeyboardTool.initialPadding = windowInsets.imeHeight
             windowInsets
             windowInsets
         }
         }

+ 3 - 3
app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt

@@ -22,7 +22,6 @@ import android.webkit.WebView
 import android.webkit.WebViewClient
 import android.webkit.WebViewClient
 import androidx.activity.addCallback
 import androidx.activity.addCallback
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.size
 import androidx.core.view.size
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
@@ -54,6 +53,7 @@ import io.legado.app.utils.keepScreenOn
 import io.legado.app.utils.longSnackbar
 import io.legado.app.utils.longSnackbar
 import io.legado.app.utils.openUrl
 import io.legado.app.utils.openUrl
 import io.legado.app.utils.setDarkeningAllowed
 import io.legado.app.utils.setDarkeningAllowed
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.setTintMutate
 import io.legado.app.utils.setTintMutate
 import io.legado.app.utils.share
 import io.legado.app.utils.share
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
@@ -208,10 +208,10 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
     }
     }
 
 
     private fun initView() {
     private fun initView() {
-        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+        binding.root.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
             val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
             val insets = windowInsets.getInsets(typeMask)
             val insets = windowInsets.getInsets(typeMask)
-            binding.root.bottomPadding = insets.bottom
+            view.bottomPadding = insets.bottom
             windowInsets
             windowInsets
         }
         }
     }
     }

+ 3 - 3
app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt

@@ -5,7 +5,6 @@ import android.view.Menu
 import android.view.MenuItem
 import android.view.MenuItem
 import android.widget.EditText
 import android.widget.EditText
 import androidx.activity.viewModels
 import androidx.activity.viewModels
-import androidx.core.view.ViewCompat
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
 import com.google.android.material.tabs.TabLayout
 import com.google.android.material.tabs.TabLayout
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
@@ -35,6 +34,7 @@ import io.legado.app.utils.launch
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.navigationBarHeight
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.sendToClip
 import io.legado.app.utils.setEdgeEffectColor
 import io.legado.app.utils.setEdgeEffectColor
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import io.legado.app.utils.share
 import io.legado.app.utils.share
 import io.legado.app.utils.shareWithQr
 import io.legado.app.utils.shareWithQr
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.showDialogFragment
@@ -188,10 +188,10 @@ class RssSourceEditActivity :
                 setEditEntities(tab?.position)
                 setEditEntities(tab?.position)
             }
             }
         })
         })
-        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+        binding.recyclerView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
             val navigationBarHeight = windowInsets.navigationBarHeight
             val navigationBarHeight = windowInsets.navigationBarHeight
             val imeHeight = windowInsets.imeHeight
             val imeHeight = windowInsets.imeHeight
-            binding.recyclerView.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
+            view.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
             softKeyboardTool.initialPadding = imeHeight
             softKeyboardTool.initialPadding = imeHeight
             windowInsets
             windowInsets
         }
         }

+ 7 - 4
app/src/main/java/io/legado/app/utils/ViewExtensions.kt

@@ -266,7 +266,7 @@ fun View.shouldHideSoftInput(event: MotionEvent): Boolean {
 
 
 fun View.applyStatusBarPadding(withInitialPadding: Boolean = false) {
 fun View.applyStatusBarPadding(withInitialPadding: Boolean = false) {
     val initialPadding = if (withInitialPadding) topPadding else 0
     val initialPadding = if (withInitialPadding) topPadding else 0
-    ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
+    setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
         val insets = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
         val insets = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
         topPadding = initialPadding + insets.top
         topPadding = initialPadding + insets.top
         windowInsets
         windowInsets
@@ -275,7 +275,7 @@ fun View.applyStatusBarPadding(withInitialPadding: Boolean = false) {
 
 
 fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
 fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
     val initialPadding = if (withInitialPadding) bottomPadding else 0
     val initialPadding = if (withInitialPadding) bottomPadding else 0
-    ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
+    setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
         bottomPadding = initialPadding + windowInsets.navigationBarHeight
         bottomPadding = initialPadding + windowInsets.navigationBarHeight
         windowInsets
         windowInsets
     }
     }
@@ -283,7 +283,7 @@ fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
 
 
 fun View.applyNavigationBarMargin(withInitialMargin: Boolean = false) {
 fun View.applyNavigationBarMargin(withInitialMargin: Boolean = false) {
     val initialMargin = if (withInitialMargin) marginBottom else 0
     val initialMargin = if (withInitialMargin) marginBottom else 0
-    ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
+    setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
         updateLayoutParams<ViewGroup.MarginLayoutParams> {
         updateLayoutParams<ViewGroup.MarginLayoutParams> {
             bottomMargin = initialMargin + windowInsets.navigationBarHeight
             bottomMargin = initialMargin + windowInsets.navigationBarHeight
         }
         }
@@ -304,10 +304,13 @@ fun View.canScroll(direction: Int): Boolean {
     return canScrollVertically(direction) || canScrollHorizontally(direction)
     return canScrollVertically(direction) || canScrollHorizontally(direction)
 }
 }
 
 
+private val requestLayoutBroken = Build.VERSION.SDK_INT <= Build.VERSION_CODES.M
+        || Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q
+
 fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) {
 fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) {
     ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
     ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
         val windowInsets = listener(view, insets)
         val windowInsets = listener(view, insets)
-        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && isLayoutRequested) {
+        if (requestLayoutBroken && isLayoutRequested) {
             post {
             post {
                 requestLayout()
                 requestLayout()
             }
             }