优化
This commit is contained in:
@@ -3,9 +3,10 @@ package io.legado.app.api.controller
|
||||
|
||||
import android.text.TextUtils
|
||||
import io.legado.app.api.ReturnData
|
||||
import io.legado.app.constant.SourceType
|
||||
import io.legado.app.data.appDb
|
||||
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.fromJsonArray
|
||||
import io.legado.app.utils.fromJsonObject
|
||||
@@ -71,8 +72,7 @@ object BookSourceController {
|
||||
kotlin.runCatching {
|
||||
GSON.fromJsonArray<BookSource>(postData).getOrThrow().let {
|
||||
it.forEach { source ->
|
||||
appDb.bookSourceDao.delete(source)
|
||||
SourceConfig.removeSource(source.bookSourceUrl)
|
||||
SourceHelp.deleteBookSource(source.bookSourceUrl)
|
||||
}
|
||||
}
|
||||
}.onFailure {
|
||||
|
||||
@@ -21,6 +21,14 @@ interface CacheDao {
|
||||
@Query("delete from caches where `key` = :key")
|
||||
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")
|
||||
fun clearDeadline(now: Long)
|
||||
|
||||
|
||||
@@ -54,15 +54,21 @@ object SourceHelp {
|
||||
fun deleteSource(key: String, @SourceType.Type type: Int) {
|
||||
when (type) {
|
||||
SourceType.book -> deleteBookSource(key)
|
||||
SourceType.rss -> appDb.rssSourceDao.delete(key)
|
||||
SourceType.rss -> deleteRssSource(key)
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteBookSource(key: String) {
|
||||
appDb.bookSourceDao.delete(key)
|
||||
appDb.cacheDao.deleteSourceVariables(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) {
|
||||
when (type) {
|
||||
SourceType.book -> appDb.bookSourceDao.enable(key, enable)
|
||||
|
||||
@@ -23,6 +23,7 @@ import io.legado.app.help.book.releaseHtmlData
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.SourceConfig
|
||||
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.utils.internString
|
||||
import io.legado.app.utils.mapParallel
|
||||
@@ -520,11 +521,8 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
|
||||
|
||||
fun del(searchBook: SearchBook) {
|
||||
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)
|
||||
searchCallback?.upAdapter()
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import io.legado.app.R
|
||||
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.launch
|
||||
import io.legado.app.utils.readUri
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
@@ -70,10 +70,10 @@ class BookInfoEditActivity :
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||
binding.root.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
|
||||
val insets = windowInsets.getInsets(typeMask)
|
||||
binding.root.bottomPadding = insets.bottom
|
||||
view.bottomPadding = insets.bottom
|
||||
windowInsets
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import android.view.View
|
||||
import android.view.WindowInsets
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.isVisible
|
||||
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.setLightStatusBar
|
||||
import io.legado.app.utils.setNavigationBarColorAuto
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import java.time.LocalDate
|
||||
@@ -84,9 +84,9 @@ abstract class BaseReadBookActivity :
|
||||
setOrientation()
|
||||
upLayoutInDisplayCutoutMode()
|
||||
super.onCreate(savedInstanceState)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||
binding.navigationBar.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
binding.navigationBar.updateLayoutParams {
|
||||
view.updateLayoutParams {
|
||||
height = insets.bottom
|
||||
}
|
||||
windowInsets
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.widget.EditText
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
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.sendToClip
|
||||
import io.legado.app.utils.setEdgeEffectColor
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.share
|
||||
import io.legado.app.utils.shareWithQr
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
@@ -72,7 +72,8 @@ class BookSourceEditActivity :
|
||||
private val infoEntities: ArrayList<EditEntity> = ArrayList()
|
||||
private val tocEntities: 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()) {
|
||||
it ?: return@registerForActivityResult
|
||||
viewModel.importSource(it) { source ->
|
||||
@@ -200,10 +201,10 @@ class BookSourceEditActivity :
|
||||
setEditEntities(tab?.position)
|
||||
}
|
||||
})
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.recyclerView) { _, windowInsets ->
|
||||
binding.recyclerView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val navigationBarHeight = windowInsets.navigationBarHeight
|
||||
val imeHeight = windowInsets.imeHeight
|
||||
binding.recyclerView.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
|
||||
view.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
|
||||
softKeyboardTool.initialPadding = imeHeight
|
||||
windowInsets
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
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.newCallStrResponse
|
||||
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.storage.ImportOldData
|
||||
import io.legado.app.model.SharedJsScope
|
||||
@@ -63,8 +63,7 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat
|
||||
}
|
||||
}
|
||||
bookSource?.let {
|
||||
appDb.bookSourceDao.delete(it)
|
||||
SourceConfig.removeSource(it.bookSourceUrl)
|
||||
SourceHelp.deleteBookSource(it.bookSourceUrl)
|
||||
}
|
||||
appDb.bookSourceDao.insert(source)
|
||||
bookSource = source
|
||||
|
||||
@@ -4,11 +4,13 @@ import android.app.Application
|
||||
import android.text.TextUtils
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseViewModel
|
||||
import io.legado.app.constant.SourceType
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.BookSourcePart
|
||||
import io.legado.app.data.entities.toBookSource
|
||||
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.GSON
|
||||
import io.legado.app.utils.cnCompare
|
||||
@@ -50,9 +52,8 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
|
||||
|
||||
fun del(sources: List<BookSourcePart>) {
|
||||
execute {
|
||||
appDb.bookSourceDao.delete(sources)
|
||||
sources.forEach {
|
||||
SourceConfig.removeSource(it.bookSourceUrl)
|
||||
SourceHelp.deleteBookSource(it.bookSourceUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.fragment.app.Fragment
|
||||
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.observeEvent
|
||||
import io.legado.app.utils.setEdgeEffectColor
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.shouldHideSoftInput
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.toastOnUi
|
||||
@@ -202,9 +202,9 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
if (AppConfig.isEInkMode) {
|
||||
bottomNavigationView.setBackgroundResource(R.drawable.bg_eink_border_top)
|
||||
}
|
||||
ViewCompat.setOnApplyWindowInsetsListener(root) { _, windowInsets ->
|
||||
bottomNavigationView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val height = windowInsets.navigationBarHeight
|
||||
bottomNavigationView.bottomPadding = height
|
||||
view.bottomPadding = height
|
||||
windowInsets.inset(0, 0, 0, height)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import io.legado.app.ui.widget.keyboard.KeyboardToolPop
|
||||
import io.legado.app.utils.GSON
|
||||
import io.legado.app.utils.imeHeight
|
||||
import io.legado.app.utils.sendToClip
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.showHelp
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
@@ -91,7 +92,7 @@ class ReplaceEditActivity :
|
||||
binding.ivHelp.setOnClickListener {
|
||||
showHelp("regexHelp")
|
||||
}
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||
binding.root.setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
|
||||
softKeyboardTool.initialPadding = windowInsets.imeHeight
|
||||
windowInsets
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.size
|
||||
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.openUrl
|
||||
import io.legado.app.utils.setDarkeningAllowed
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.setTintMutate
|
||||
import io.legado.app.utils.share
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
@@ -208,10 +208,10 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||
binding.root.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()
|
||||
val insets = windowInsets.getInsets(typeMask)
|
||||
binding.root.bottomPadding = insets.bottom
|
||||
view.bottomPadding = insets.bottom
|
||||
windowInsets
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.widget.EditText
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
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.sendToClip
|
||||
import io.legado.app.utils.setEdgeEffectColor
|
||||
import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legado.app.utils.share
|
||||
import io.legado.app.utils.shareWithQr
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
@@ -188,10 +188,10 @@ class RssSourceEditActivity :
|
||||
setEditEntities(tab?.position)
|
||||
}
|
||||
})
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||
binding.recyclerView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
val navigationBarHeight = windowInsets.navigationBarHeight
|
||||
val imeHeight = windowInsets.imeHeight
|
||||
binding.recyclerView.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
|
||||
view.bottomPadding = if (imeHeight == 0) navigationBarHeight else 0
|
||||
softKeyboardTool.initialPadding = imeHeight
|
||||
windowInsets
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ fun View.shouldHideSoftInput(event: MotionEvent): Boolean {
|
||||
|
||||
fun View.applyStatusBarPadding(withInitialPadding: Boolean = false) {
|
||||
val initialPadding = if (withInitialPadding) topPadding else 0
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
|
||||
setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
|
||||
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
|
||||
topPadding = initialPadding + insets.top
|
||||
windowInsets
|
||||
@@ -275,7 +275,7 @@ fun View.applyStatusBarPadding(withInitialPadding: Boolean = false) {
|
||||
|
||||
fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
|
||||
val initialPadding = if (withInitialPadding) bottomPadding else 0
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
|
||||
setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
|
||||
bottomPadding = initialPadding + windowInsets.navigationBarHeight
|
||||
windowInsets
|
||||
}
|
||||
@@ -283,7 +283,7 @@ fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
|
||||
|
||||
fun View.applyNavigationBarMargin(withInitialMargin: Boolean = false) {
|
||||
val initialMargin = if (withInitialMargin) marginBottom else 0
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
|
||||
setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
|
||||
updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
bottomMargin = initialMargin + windowInsets.navigationBarHeight
|
||||
}
|
||||
@@ -304,10 +304,13 @@ fun View.canScroll(direction: Int): Boolean {
|
||||
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) {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
|
||||
val windowInsets = listener(view, insets)
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && isLayoutRequested) {
|
||||
if (requestLayoutBroken && isLayoutRequested) {
|
||||
post {
|
||||
requestLayout()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user