优化
This commit is contained in:
@@ -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)
|
SourceHelp.deleteBookSource(source.bookSourceUrl)
|
||||||
SourceConfig.removeSource(source.bookSourceUrl)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 ->
|
SourceHelp.deleteBookSource(searchBook.origin)
|
||||||
appDb.bookSourceDao.delete(source)
|
|
||||||
appDb.searchBookDao.delete(searchBook)
|
appDb.searchBookDao.delete(searchBook)
|
||||||
SourceConfig.removeSource(source.bookSourceUrl)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
searchBooks.remove(searchBook)
|
searchBooks.remove(searchBook)
|
||||||
searchCallback?.upAdapter()
|
searchCallback?.upAdapter()
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,6 +72,7 @@ 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
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
SourceHelp.deleteBookSource(it.bookSourceUrl)
|
||||||
SourceConfig.removeSource(it.bookSourceUrl)
|
|
||||||
}
|
}
|
||||||
appDb.bookSourceDao.insert(source)
|
appDb.bookSourceDao.insert(source)
|
||||||
bookSource = source
|
bookSource = source
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user