更新与修复界面
修复一些设备的导航栏着色 增加删除单个书籍缓存功能 增加阅读记录封面显示 恢复一些默认动效
This commit is contained in:
@@ -13,6 +13,7 @@ import android.view.View
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.color.DynamicColors
|
||||
@@ -27,6 +28,8 @@ import io.legato.kazusa.utils.disableAutoFill
|
||||
import io.legato.kazusa.utils.getPrefString
|
||||
import io.legato.kazusa.utils.hideSoftInput
|
||||
import io.legato.kazusa.utils.observeEvent
|
||||
import io.legato.kazusa.utils.setNavigationBarColorAuto
|
||||
import io.legato.kazusa.utils.themeColor
|
||||
import io.legato.kazusa.utils.toastOnUi
|
||||
import io.legato.kazusa.utils.windowSize
|
||||
|
||||
@@ -69,7 +72,9 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
window.decorView.disableAutoFill()
|
||||
AppContextWrapper.applyLocaleAndFont(this)
|
||||
super.onCreate(savedInstanceState)
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
enableEdgeToEdge()
|
||||
window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
|
||||
//setupSystemBar()
|
||||
setContentView(binding.root)
|
||||
upBackgroundImage()
|
||||
@@ -152,15 +157,6 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
}
|
||||
}
|
||||
|
||||
open fun upNavigationBarColor() {
|
||||
// if (AppConfig.immNavigationBar) {
|
||||
// setNavigationBarColorAuto(ThemeStore.navigationBarColor(this))
|
||||
// } else {
|
||||
// val nbColor = ColorUtils.darkenColor(ThemeStore.navigationBarColor(this))
|
||||
// setNavigationBarColorAuto(nbColor)
|
||||
// }
|
||||
}
|
||||
|
||||
open fun observeLiveBus() {
|
||||
observeEvent<String>(EventBus.RECREATE) {
|
||||
recreate()
|
||||
|
||||
@@ -12,6 +12,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import io.legato.kazusa.constant.AppLog
|
||||
import io.legato.kazusa.help.coroutine.Coroutine
|
||||
import io.legato.kazusa.utils.setNavigationBarColorAuto
|
||||
import io.legato.kazusa.utils.themeColor
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
@@ -28,6 +30,7 @@ abstract class BaseBottomSheetDialogFragment(
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
dialog?.window?.setNavigationBarColorAuto(requireContext().themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
|
||||
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
val screenHeight = resources.displayMetrics.heightPixels
|
||||
(dialog as? BottomSheetDialog)?.behavior?.apply {
|
||||
@@ -38,7 +41,6 @@ abstract class BaseBottomSheetDialogFragment(
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
onFragmentCreated(view, savedInstanceState)
|
||||
observeLiveBus()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package io.legato.kazusa.data.dao
|
||||
|
||||
import androidx.room.*
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
import io.legato.kazusa.data.entities.ReadRecord
|
||||
import io.legato.kazusa.data.entities.ReadRecordShow
|
||||
|
||||
@@ -38,6 +43,7 @@ interface ReadRecordDao {
|
||||
@Query("select readTime from readRecord where deviceId = :androidId and bookName = :bookName")
|
||||
fun getReadTime(androidId: String, bookName: String): Long?
|
||||
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun insert(vararg readRecord: ReadRecord)
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import io.legato.kazusa.databinding.ItemReadRecordBinding
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.help.config.LocalConfig
|
||||
import io.legato.kazusa.lib.dialogs.alert
|
||||
import io.legato.kazusa.model.BookCover
|
||||
//import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legato.kazusa.ui.book.search.SearchActivity
|
||||
import io.legato.kazusa.utils.applyNavigationBarPadding
|
||||
@@ -157,7 +158,7 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
inner class RecordAdapter(context: Context) :
|
||||
RecyclerAdapter<ReadRecordShow, ItemReadRecordBinding>(context) {
|
||||
|
||||
private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
|
||||
private val dateFormat = SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault())
|
||||
|
||||
override fun getViewBinding(parent: ViewGroup): ItemReadRecordBinding {
|
||||
return ItemReadRecordBinding.inflate(inflater, parent, false)
|
||||
@@ -175,7 +176,17 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
if (item.lastRead > 0) {
|
||||
tvLastReadTime.text = dateFormat.format(item.lastRead)
|
||||
} else {
|
||||
tvLastReadTime.text = ""
|
||||
tvLastReadTime.text = "时间未知"
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
val book = withContext(IO) {
|
||||
appDb.bookDao.findByName(item.bookName).firstOrNull()
|
||||
}
|
||||
if (book != null) {
|
||||
BookCover.load(root.context, book.getDisplayCover(), false, book.origin)
|
||||
.into(ivCover)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ import io.legato.kazusa.ui.about.AppLogDialog
|
||||
import io.legato.kazusa.ui.file.HandleFileContract
|
||||
import io.legato.kazusa.utils.ACache
|
||||
import io.legato.kazusa.utils.FileDoc
|
||||
import io.legato.kazusa.utils.applyNavigationBarPadding
|
||||
import io.legato.kazusa.utils.applyOpenTint
|
||||
import io.legato.kazusa.utils.applyTint
|
||||
import io.legato.kazusa.utils.checkWrite
|
||||
@@ -233,7 +232,6 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
||||
private fun initRecyclerView() {
|
||||
binding.recyclerView.layoutManager = layoutManager
|
||||
binding.recyclerView.adapter = adapter
|
||||
binding.recyclerView.applyNavigationBarPadding()
|
||||
}
|
||||
|
||||
private fun initBookData() {
|
||||
@@ -345,6 +343,11 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
||||
}
|
||||
}
|
||||
|
||||
override fun deleteDownload(book: Book) {
|
||||
viewModel.clearCacheForBook(book)
|
||||
notifyItemChanged(book.bookUrl)
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置自定义导出对话框
|
||||
*
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package io.legato.kazusa.ui.book.cache
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
@@ -47,8 +49,10 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
|
||||
if (payloads.isEmpty()) {
|
||||
tvName.text = item.name
|
||||
tvAuthor.text = context.getString(R.string.author_show, item.getRealAuthor())
|
||||
|
||||
if (item.isLocal) {
|
||||
tvDownload.setText(R.string.local_book)
|
||||
progressDownload.gone()
|
||||
} else {
|
||||
val cs = callBack.cacheChapters[item.bookUrl]
|
||||
if (cs == null) {
|
||||
@@ -67,8 +71,22 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
|
||||
tvDownload.setText(R.string.local_book)
|
||||
} else {
|
||||
val cacheSize = callBack.cacheChapters[item.bookUrl]?.size ?: 0
|
||||
val cacheTask = CacheBook.cacheBookMap[item.bookUrl]
|
||||
tvDownload.text =
|
||||
context.getString(R.string.download_count, cacheSize, item.totalChapterNum)
|
||||
|
||||
if (cacheTask != null && !cacheTask.isStop()) {
|
||||
val progress = if (item.totalChapterNum > 0) {
|
||||
(cacheSize * 100 / item.totalChapterNum)
|
||||
} else {
|
||||
0
|
||||
}
|
||||
tvMsg.gone()
|
||||
progressDownload.progress = progress
|
||||
progressDownload.visible()
|
||||
} else {
|
||||
progressDownload.gone()
|
||||
}
|
||||
}
|
||||
}
|
||||
upDownloadIv(ivDownload, item)
|
||||
@@ -94,6 +112,23 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
|
||||
tvExport.setOnClickListener {
|
||||
callBack.export(holder.layoutPosition)
|
||||
}
|
||||
ivDelete.setOnClickListener {
|
||||
getItem(holder.layoutPosition)?.let { book ->
|
||||
CacheBook.cacheBookMap[book.bookUrl]?.let {
|
||||
if (!it.isStop()) {
|
||||
CacheBook.remove(context, book.bookUrl)
|
||||
Handler(Looper.getMainLooper()).postDelayed({
|
||||
callBack.deleteDownload(book)
|
||||
}, 500)
|
||||
} else {
|
||||
callBack.deleteDownload(book)
|
||||
}
|
||||
} ?: run {
|
||||
callBack.deleteDownload(book)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,5 +173,7 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
|
||||
fun export(position: Int)
|
||||
fun exportProgress(bookUrl: String): Int?
|
||||
fun exportMsg(bookUrl: String): String?
|
||||
fun deleteDownload(book: Book)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import io.legato.kazusa.help.book.isLocal
|
||||
import io.legato.kazusa.help.coroutine.Coroutine
|
||||
import io.legato.kazusa.utils.sendValue
|
||||
import kotlinx.coroutines.ensureActive
|
||||
import kotlin.collections.set
|
||||
|
||||
|
||||
class CacheViewModel(application: Application) : BaseViewModel(application) {
|
||||
@@ -43,4 +42,10 @@ class CacheViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
fun clearCacheForBook(book: Book) {
|
||||
BookHelp.clearCache(book)
|
||||
cacheChapters[book.bookUrl] = hashSetOf()
|
||||
upAdapterLiveData.sendValue(book.bookUrl)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -64,26 +64,33 @@ class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_gro
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
//binding.toolBar.setBackgroundColor(primaryColor)
|
||||
sortOptions = resources.getStringArray(R.array.book_sort).toList()
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
bookGroup = arguments?.getParcelable("group")
|
||||
bookGroup?.let {
|
||||
binding.btnDelete.isEnabled = (it.groupId > 0 || it.groupId == Long.MIN_VALUE)
|
||||
binding.tieGroupName.setText(it.groupName)
|
||||
if (bookGroup?.cover != null)
|
||||
binding.ivCover.load(it.cover)
|
||||
binding.cbEnableRefresh.isChecked = it.enableRefresh
|
||||
if (it.bookSort in sortOptions.indices) {
|
||||
selectedSortIndex = it.bookSort
|
||||
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
|
||||
|
||||
bookGroup?.let { group ->
|
||||
binding.btnDelete.isEnabled = (group.groupId > 0 || group.groupId == Long.MIN_VALUE)
|
||||
binding.tieGroupName.setText(group.groupName)
|
||||
if (group.cover != null) {
|
||||
binding.ivCover.load(group.cover)
|
||||
}
|
||||
} ?: let {
|
||||
binding.cbEnableRefresh.isChecked = group.enableRefresh
|
||||
|
||||
selectedSortIndex = if (group.bookSort in sortOptions.indices) {
|
||||
group.bookSort
|
||||
} else {
|
||||
0
|
||||
}
|
||||
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
|
||||
} ?: run {
|
||||
binding.btnDelete.gone()
|
||||
binding.ivCover.load()
|
||||
selectedSortIndex = 0
|
||||
binding.chipSortMenu.text = sortOptions[selectedSortIndex]
|
||||
}
|
||||
|
||||
|
||||
binding.run {
|
||||
chipSortMenu.setOnClickListener { chip ->
|
||||
PopupMenu(requireContext(), chip).apply {
|
||||
|
||||
@@ -2,11 +2,8 @@ package io.legato.kazusa.ui.book.info
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.RenderEffect
|
||||
import android.graphics.Shader
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
@@ -18,7 +15,6 @@ import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.palette.graphics.Palette
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.VMBaseActivity
|
||||
import io.legato.kazusa.constant.BookType
|
||||
@@ -64,6 +60,7 @@ import io.legato.kazusa.utils.ConvertUtils
|
||||
import io.legato.kazusa.utils.FileDoc
|
||||
import io.legato.kazusa.utils.GSON
|
||||
import io.legato.kazusa.utils.StartActivityContract
|
||||
import io.legato.kazusa.utils.applyNavigationBarMargin
|
||||
import io.legato.kazusa.utils.dpToPx
|
||||
import io.legato.kazusa.utils.gone
|
||||
import io.legato.kazusa.utils.longToastOnUi
|
||||
@@ -75,7 +72,6 @@ import io.legato.kazusa.utils.startActivity
|
||||
import io.legato.kazusa.utils.toastOnUi
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
import io.legato.kazusa.utils.visible
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
@@ -158,7 +154,7 @@ class BookInfoActivity :
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setSupportActionBar(binding.topBar)
|
||||
|
||||
binding.llRead?.applyNavigationBarMargin()
|
||||
// binding.refreshLayout?.setColorSchemeColors(accentColor)
|
||||
// binding.llInfo.setBackgroundColor(backgroundColor)
|
||||
// binding.flAction.setBackgroundColor(bottomBackground)
|
||||
@@ -786,16 +782,4 @@ class BookInfoActivity :
|
||||
}
|
||||
}
|
||||
|
||||
// 扩展函数:从Drawable中提取主色调
|
||||
suspend fun Drawable.extractDominantColor(): Int = withContext(Dispatchers.Default) {
|
||||
// 将Drawable转换为Bitmap
|
||||
val bitmap = (this@extractDominantColor as? BitmapDrawable)?.bitmap ?: return@withContext Color.TRANSPARENT
|
||||
|
||||
// 生成Palette
|
||||
val palette = Palette.from(bitmap).generate()
|
||||
|
||||
// 返回主色调,若未找到则使用默认值
|
||||
palette.getDominantColor(Color.WHITE)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -44,6 +44,7 @@ import io.legato.kazusa.utils.setLightStatusBar
|
||||
import io.legato.kazusa.utils.setNavigationBarColorAuto
|
||||
import io.legato.kazusa.utils.setOnApplyWindowInsetsListenerCompat
|
||||
import io.legato.kazusa.utils.showDialogFragment
|
||||
import io.legato.kazusa.utils.themeColor
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
import java.time.LocalDate
|
||||
import java.time.format.DateTimeFormatter
|
||||
@@ -211,14 +212,14 @@ abstract class BaseReadBookActivity :
|
||||
window.decorView.systemUiVisibility = flag
|
||||
}
|
||||
|
||||
override fun upNavigationBarColor() {
|
||||
fun upNavigationBarColor() {
|
||||
upNavigationBar()
|
||||
when {
|
||||
binding.readMenu.isVisible -> super.upNavigationBarColor()
|
||||
binding.searchMenu.bottomMenuVisible -> super.upNavigationBarColor()
|
||||
bottomDialog > 0 -> super.upNavigationBarColor()
|
||||
binding.readMenu.isVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
|
||||
binding.searchMenu.bottomMenuVisible -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
|
||||
bottomDialog > 0 -> window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurface))
|
||||
//!AppConfig.immNavigationBar -> super.upNavigationBarColor()
|
||||
else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor)
|
||||
else -> window.setNavigationBarColorAuto(ReadBookConfig.bgMeanColor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,21 @@
|
||||
package io.legato.kazusa.ui.book.read.config
|
||||
|
||||
//import io.legado.app.lib.theme.bottomBackground
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.DialogInterface
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewConfiguration
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BasePrefDialogFragment
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.constant.EventBus
|
||||
import io.legato.kazusa.constant.PreferKey
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.help.config.ReadBookConfig
|
||||
import io.legato.kazusa.lib.prefs.fragment.PreferenceFragment
|
||||
//import io.legado.app.lib.theme.bottomBackground
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import io.legato.kazusa.model.ReadBook
|
||||
import io.legato.kazusa.ui.book.read.ReadBookActivity
|
||||
import io.legato.kazusa.ui.book.read.page.provider.ChapterProvider
|
||||
@@ -29,31 +25,23 @@ import io.legato.kazusa.utils.getPrefBoolean
|
||||
import io.legato.kazusa.utils.postEvent
|
||||
import io.legato.kazusa.utils.removePref
|
||||
|
||||
class MoreConfigDialog : BasePrefDialogFragment() {
|
||||
class MoreConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_more_config) {
|
||||
private val readPreferTag = "readPreferenceFragment"
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
(activity as ReadBookActivity).bottomDialog++
|
||||
val view = LinearLayout(context)
|
||||
//view.setBackgroundColor(requireContext().bottomBackground)
|
||||
view.id = R.id.tag1
|
||||
container?.addView(view)
|
||||
return view
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
(activity as? ReadBookActivity)?.bottomDialog++
|
||||
var preferenceFragment = childFragmentManager.findFragmentByTag(readPreferTag)
|
||||
if (preferenceFragment == null) preferenceFragment = ReadPreferenceFragment()
|
||||
childFragmentManager.beginTransaction()
|
||||
.replace(view.id, preferenceFragment, readPreferTag)
|
||||
.replace(R.id.containerPreferences, preferenceFragment, readPreferTag)
|
||||
.commit()
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
(activity as ReadBookActivity).bottomDialog--
|
||||
}
|
||||
|
||||
class ReadPreferenceFragment : PreferenceFragmentCompat(),
|
||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
@@ -69,11 +57,6 @@ class MoreConfigDialog : BasePrefDialogFragment() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
//listView.setEdgeEffectColor(primaryColor)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
preferenceManager
|
||||
|
||||
@@ -15,17 +15,6 @@ class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_p
|
||||
|
||||
private val binding by viewBinding(DialogReadPaddingBinding::bind)
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
// dialog?.window?.let {
|
||||
// it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
|
||||
// val attr = it.attributes
|
||||
// attr.dimAmount = 0.0f
|
||||
// it.attributes = attr
|
||||
// }
|
||||
// setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
initData()
|
||||
initView()
|
||||
|
||||
@@ -22,9 +22,9 @@ import io.legato.kazusa.model.ReadBook
|
||||
import io.legato.kazusa.ui.book.read.ReadBookActivity
|
||||
import io.legato.kazusa.ui.font.FontSelectDialog
|
||||
import io.legato.kazusa.utils.ChineseUtils
|
||||
import io.legato.kazusa.utils.dpToPx
|
||||
import io.legato.kazusa.utils.postEvent
|
||||
import io.legato.kazusa.utils.showDialogFragment
|
||||
import io.legato.kazusa.utils.themeColor
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
|
||||
@@ -48,13 +48,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
||||
}
|
||||
|
||||
private fun initView() = binding.run {
|
||||
//val bg = requireContext().bottomBackground
|
||||
//val isLight = ColorUtils.isColorLight(bg)
|
||||
//val textColor = requireContext().getPrimaryTextColor(isLight)
|
||||
// rootView.setBackgroundColor(bg)
|
||||
// tvPageAnim.setTextColor(textColor)
|
||||
// tvBgTs.setTextColor(textColor)
|
||||
// tvShareLayout.setTextColor(textColor)
|
||||
if (AppConfig.isNightTheme) {
|
||||
tvDayNight.setIconResource(R.drawable.ic_daytime)
|
||||
} else {
|
||||
@@ -72,10 +65,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
||||
rvStyle.adapter = styleAdapter
|
||||
styleAdapter.addFooterView {
|
||||
ItemReadStyleBinding.inflate(layoutInflater, it, false).apply {
|
||||
// ivStyle.setPadding(6.dpToPx(), 6.dpToPx(), 6.dpToPx(), 6.dpToPx())
|
||||
// ivStyle.setText(null)
|
||||
// ivStyle.setColorFilter(textColor)
|
||||
// ivStyle.borderColor = textColor
|
||||
ivStyle.setImageResource(R.drawable.ic_add)
|
||||
root.setOnClickListener {
|
||||
ReadBookConfig.configList.add(ReadBookConfig.Config())
|
||||
@@ -235,11 +224,15 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
|
||||
ivStyle.setImageDrawable(item.curBgDrawable(100, 150))
|
||||
if (ReadBookConfig.styleSelect == holder.layoutPosition) {
|
||||
llStyle.gravity = Gravity.TOP
|
||||
cdStyle.strokeColor =
|
||||
context.themeColor(com.google.android.material.R.attr.colorTertiary)
|
||||
rvStyle.setCardBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorTertiary))
|
||||
cdStyle.cardElevation = 1f.dpToPx()
|
||||
cdStyle.radius = 16f.dpToPx()
|
||||
cdStyle.strokeWidth = 2
|
||||
cdStyle.strokeColor = item.curTextColor()
|
||||
//tvStyle.setTextBold(true)
|
||||
} else {
|
||||
cdStyle.cardElevation = 2f.dpToPx()
|
||||
cdStyle.radius = 32f.dpToPx()
|
||||
cdStyle.strokeWidth = 0
|
||||
cdStyle.strokeColor = item.curTextColor()
|
||||
//tvStyle.setTextBold(false)
|
||||
}
|
||||
|
||||
@@ -13,8 +13,13 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) :
|
||||
|
||||
private val explosionField = ExplosionField.attach2Window(activity)
|
||||
|
||||
init {
|
||||
setHasStableIds(true)
|
||||
}
|
||||
|
||||
|
||||
override fun getItemId(position: Int): Long {
|
||||
return position.toLong()
|
||||
return getItem(position)!!.lastUseTime
|
||||
}
|
||||
|
||||
override fun getViewBinding(parent: ViewGroup): ItemSearchHistoryBinding {
|
||||
@@ -33,6 +38,7 @@ class HistoryKeyAdapter(activity: SearchActivity, val callBack: CallBack) :
|
||||
}
|
||||
|
||||
override fun registerListener(holder: ItemViewHolder, binding: ItemSearchHistoryBinding) {
|
||||
|
||||
holder.itemView.apply {
|
||||
setOnClickListener {
|
||||
getItemByLayoutPosition(holder.layoutPosition)?.let {
|
||||
|
||||
@@ -12,9 +12,11 @@ import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.flexbox.FlexboxLayoutManager
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.search.SearchBar
|
||||
import com.google.android.material.search.SearchView
|
||||
import io.legato.kazusa.R
|
||||
@@ -30,7 +32,6 @@ import io.legato.kazusa.ui.about.AppLogDialog
|
||||
import io.legato.kazusa.ui.book.info.BookInfoActivity
|
||||
import io.legato.kazusa.ui.book.source.manage.BookSourceActivity
|
||||
import io.legato.kazusa.utils.applyNavigationBarMargin
|
||||
import io.legato.kazusa.utils.applyNavigationBarPadding
|
||||
import io.legato.kazusa.utils.applyStatusBarPadding
|
||||
import io.legato.kazusa.utils.getPrefBoolean
|
||||
import io.legato.kazusa.utils.gone
|
||||
@@ -84,6 +85,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
||||
setSupportActionBar(binding.searchBar)
|
||||
initRecyclerView()
|
||||
initMaterialSearch()
|
||||
@@ -177,6 +180,26 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
|
||||
binding.appBar.applyStatusBarPadding()
|
||||
|
||||
binding.appBar.post {
|
||||
val maxPaddingTop = binding.appBar.paddingTop
|
||||
binding.appBar.addOnOffsetChangedListener(
|
||||
AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
|
||||
val totalScrollRange = appBarLayout.totalScrollRange
|
||||
val scrollRatio =
|
||||
(1f - (abs(verticalOffset).toFloat() / totalScrollRange)).coerceIn(0f, 1f)
|
||||
|
||||
appBarLayout.alpha = scrollRatio
|
||||
appBarLayout.setPadding(
|
||||
appBarLayout.paddingLeft,
|
||||
(maxPaddingTop * scrollRatio).toInt(),
|
||||
appBarLayout.paddingRight,
|
||||
appBarLayout.paddingBottom
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
searchBar.setOnMenuItemClickListener { item ->
|
||||
onCompatOptionsItemSelected(item)
|
||||
}
|
||||
@@ -215,7 +238,6 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
|
||||
searchView.addTransitionListener { _, _, newState ->
|
||||
if (newState == SearchView.TransitionState.HIDDEN) {
|
||||
// 当 SearchView 关闭时,将搜索文本设置回 SearchBar
|
||||
searchBar.setText(searchView.text)
|
||||
}
|
||||
}
|
||||
@@ -232,14 +254,16 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
private fun initRecyclerView() {
|
||||
binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this)
|
||||
binding.rvBookshelfSearch.adapter = bookAdapter
|
||||
binding.rvBookshelfSearch.applyNavigationBarMargin()
|
||||
binding.rvBookshelfSearch.itemAnimator = DefaultItemAnimator()
|
||||
|
||||
binding.rvHistoryKey.layoutManager = FlexboxLayoutManager(this)
|
||||
binding.rvHistoryKey.adapter = historyKeyAdapter
|
||||
binding.rvHistoryKey.applyNavigationBarMargin()
|
||||
binding.rvHistoryKey.itemAnimator = DefaultItemAnimator()
|
||||
|
||||
binding.recyclerView.layoutManager = LinearLayoutManager(this)
|
||||
binding.recyclerView.adapter = adapter
|
||||
binding.recyclerView.itemAnimator = null
|
||||
binding.recyclerView.applyNavigationBarPadding()
|
||||
binding.recyclerView.itemAnimator = DefaultItemAnimator()
|
||||
|
||||
adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
|
||||
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
||||
super.onItemRangeInserted(positionStart, itemCount)
|
||||
@@ -279,6 +303,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
}
|
||||
|
||||
private fun initOtherView() {
|
||||
binding.llStop.applyNavigationBarMargin()
|
||||
binding.fbStartStop.setOnClickListener {
|
||||
if (viewModel.isSearchLiveData.value == true) {
|
||||
isManualStopSearch = true
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.legato.kazusa.ui.book.search
|
||||
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
@@ -8,7 +9,7 @@ import androidx.appcompat.widget.SearchView
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BaseDialogFragment
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.base.adapter.ItemViewHolder
|
||||
import io.legato.kazusa.constant.AppLog
|
||||
import io.legato.kazusa.data.AppDatabase
|
||||
@@ -17,10 +18,7 @@ import io.legato.kazusa.data.entities.BookSourcePart
|
||||
import io.legato.kazusa.databinding.DialogSearchScopeBinding
|
||||
import io.legato.kazusa.databinding.ItemCheckBoxBinding
|
||||
import io.legato.kazusa.databinding.ItemRadioButtonBinding
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import io.legato.kazusa.utils.applyTint
|
||||
import io.legato.kazusa.utils.flowWithLifecycleAndDatabaseChange
|
||||
import io.legato.kazusa.utils.setLayout
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -31,7 +29,7 @@ import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
class SearchScopeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_search_scope) {
|
||||
|
||||
private val binding by viewBinding(DialogSearchScopeBinding::bind)
|
||||
private var sourceFlowJob: Job? = null
|
||||
@@ -44,13 +42,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
RecyclerAdapter()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
setLayout(0.9f, 0.8f)
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
//binding.toolBar.setBackgroundColor(primaryColor)
|
||||
binding.recyclerView.adapter = adapter
|
||||
initMenu()
|
||||
initSearchView()
|
||||
@@ -60,7 +52,6 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
|
||||
private fun initMenu() {
|
||||
binding.toolBar.inflateMenu(R.menu.book_search_scope)
|
||||
//binding.toolBar.menu.applyTint(requireContext())
|
||||
}
|
||||
|
||||
private fun initSearchView() {
|
||||
@@ -80,17 +71,24 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
}
|
||||
|
||||
private fun initOtherView() {
|
||||
binding.rgScope.setOnCheckedChangeListener { _, checkedId ->
|
||||
binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible = checkedId == R.id.rb_source
|
||||
upData()
|
||||
|
||||
binding.rgScope.addOnButtonCheckedListener { group, checkedId, isChecked ->
|
||||
if (isChecked) {
|
||||
binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible =
|
||||
checkedId == R.id.rb_source
|
||||
upData()
|
||||
}
|
||||
}
|
||||
|
||||
binding.tvCancel.setOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.tvAllSource.setOnClickListener {
|
||||
callback.onSearchScopeOk(SearchScope(""))
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.tvOk.setOnClickListener {
|
||||
if (binding.rbGroup.isChecked) {
|
||||
callback.onSearchScopeOk(SearchScope(adapter.selectGroups))
|
||||
@@ -104,6 +102,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
package io.legato.kazusa.ui.login
|
||||
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.setPadding
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.script.rhino.runScriptWithContext
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BaseDialogFragment
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.constant.AppLog
|
||||
import io.legato.kazusa.data.entities.BaseSource
|
||||
import io.legato.kazusa.data.entities.rule.RowUi
|
||||
@@ -18,16 +17,13 @@ import io.legato.kazusa.databinding.DialogLoginBinding
|
||||
import io.legato.kazusa.databinding.ItemFilletTextBinding
|
||||
import io.legato.kazusa.databinding.ItemSourceEditBinding
|
||||
import io.legato.kazusa.lib.dialogs.alert
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import io.legato.kazusa.ui.about.AppLogDialog
|
||||
import io.legato.kazusa.utils.GSON
|
||||
import io.legato.kazusa.utils.applyTint
|
||||
import io.legato.kazusa.utils.dpToPx
|
||||
import io.legato.kazusa.utils.isAbsUrl
|
||||
import io.legato.kazusa.utils.openUrl
|
||||
import io.legato.kazusa.utils.printOnDebug
|
||||
import io.legato.kazusa.utils.sendToClip
|
||||
import io.legato.kazusa.utils.setLayout
|
||||
import io.legato.kazusa.utils.showDialogFragment
|
||||
import io.legato.kazusa.utils.toastOnUi
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
@@ -40,16 +36,11 @@ import splitties.init.appCtx
|
||||
import splitties.views.onClick
|
||||
|
||||
|
||||
class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
|
||||
class SourceLoginDialog : BaseBottomSheetDialogFragment(R.layout.dialog_login) {
|
||||
|
||||
private val binding by viewBinding(DialogLoginBinding::bind)
|
||||
private val viewModel by activityViewModels<SourceLoginViewModel>()
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
val source = viewModel.source ?: return
|
||||
//binding.toolBar.setBackgroundColor(primaryColor)
|
||||
@@ -91,7 +82,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
|
||||
rowUi.style().apply(it.root)
|
||||
it.root.id = index + 1000
|
||||
it.textView.text = rowUi.name
|
||||
it.textView.setPadding(16.dpToPx())
|
||||
|
||||
it.root.onClick {
|
||||
handleButtonClick(source, rowUi, loginUi)
|
||||
}
|
||||
|
||||
@@ -48,8 +48,10 @@ import io.legato.kazusa.utils.gone
|
||||
import io.legato.kazusa.utils.hideSoftInput
|
||||
import io.legato.kazusa.utils.isCreated
|
||||
import io.legato.kazusa.utils.observeEvent
|
||||
import io.legato.kazusa.utils.setNavigationBarColorAuto
|
||||
import io.legato.kazusa.utils.shouldHideSoftInput
|
||||
import io.legato.kazusa.utils.showDialogFragment
|
||||
import io.legato.kazusa.utils.themeColor
|
||||
import io.legato.kazusa.utils.toastOnUi
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
import io.legato.kazusa.utils.visible
|
||||
@@ -203,23 +205,16 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
|
||||
private fun initView() = binding.run {
|
||||
//viewPagerMain.setEdgeEffectColor(primaryColor)
|
||||
viewPagerMain.offscreenPageLimit = 3
|
||||
viewPagerMain.adapter = adapter
|
||||
viewPagerMain.addOnPageChangeListener(PageChangeCallback())
|
||||
//bottomNavigationView.elevation = elevation
|
||||
getNavigationBarView().apply {
|
||||
setOnItemSelectedListener { onNavigationItemSelected(it) }
|
||||
setOnItemReselectedListener { onNavigationItemReselected(it) }
|
||||
}
|
||||
|
||||
//getNavigationBarView().applyNavigationBarPadding()
|
||||
|
||||
// bottomNavigationView.setOnApplyWindowInsetsListenerCompat { view, windowInsets ->
|
||||
// val height = windowInsets.navigationBarHeight
|
||||
// view.bottomPadding = height
|
||||
// windowInsets.inset(0, 0, 0, height)
|
||||
// }
|
||||
window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.legato.kazusa.ui.widget.text
|
||||
|
||||
//import io.legado.app.lib.theme.accentColor
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
@@ -9,11 +10,10 @@ import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.textfield.MaterialAutoCompleteTextView
|
||||
import io.legato.kazusa.R
|
||||
//import io.legado.app.lib.theme.accentColor
|
||||
import io.legato.kazusa.utils.gone
|
||||
import io.legato.kazusa.utils.visible
|
||||
|
||||
@@ -63,7 +63,7 @@ class AutoCompleteTextView @JvmOverloads constructor(
|
||||
.inflate(R.layout.item_1line_text_and_del, parent, false)
|
||||
val textView = view.findViewById<TextView>(R.id.text_view)
|
||||
textView.text = getItem(position)
|
||||
val ivDelete = view.findViewById<ImageView>(R.id.iv_delete)
|
||||
val ivDelete = view.findViewById<MaterialButton>(R.id.iv_delete)
|
||||
if (delCallBack != null) ivDelete.visible() else ivDelete.gone()
|
||||
ivDelete.setOnClickListener {
|
||||
getItem(position)?.let {
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.util.DisplayMetrics
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.Window
|
||||
import android.view.WindowInsets
|
||||
import android.view.WindowInsetsController
|
||||
import android.view.WindowManager
|
||||
@@ -144,11 +145,12 @@ fun Activity.setLightStatusBar(isLightBar: Boolean) {
|
||||
* 设置导航栏颜色
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
|
||||
fun Window.setNavigationBarColorAuto(@ColorInt color: Int) {
|
||||
val isLightBor = ColorUtils.isColorLight(color)
|
||||
window.navigationBarColor = color
|
||||
navigationBarColor = color
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
window.insetsController?.let {
|
||||
insetsController?.let {
|
||||
if (isLightBor) {
|
||||
it.setSystemBarsAppearance(
|
||||
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
|
||||
@@ -162,9 +164,9 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
val decorView = window.decorView
|
||||
if (Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q) {
|
||||
var systemUiVisibility = decorView.systemUiVisibility
|
||||
systemUiVisibility = if (isLightBor) {
|
||||
systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
|
||||
@@ -175,6 +177,7 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun Activity.keepScreenOn(on: Boolean) {
|
||||
val isScreenOn =
|
||||
(window.attributes.flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0
|
||||
|
||||
@@ -302,7 +302,7 @@ fun View.canScroll(direction: Int): Boolean {
|
||||
return canScrollVertically(direction) || canScrollHorizontally(direction)
|
||||
}
|
||||
|
||||
private val requestLayoutBroken = Build.VERSION.SDK_INT <= Build.VERSION_CODES.M
|
||||
private val requestLayoutBroken = false
|
||||
|| Build.VERSION.SDK_INT in Build.VERSION_CODES.O..Build.VERSION_CODES.Q
|
||||
|
||||
fun View.setOnApplyWindowInsetsListenerCompat(listener: (View, WindowInsetsCompat) -> WindowInsetsCompat) {
|
||||
|
||||
Reference in New Issue
Block a user