更新界面
This commit is contained in:
@@ -118,7 +118,6 @@
|
|||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|||||||
@@ -3,36 +3,26 @@ package io.legato.kazusa.base
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.graphics.drawable.BitmapDrawable
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.util.Log
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.FrameLayout
|
|
||||||
import androidx.activity.addCallback
|
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
import com.google.android.material.appbar.AppBarLayout
|
import com.google.android.material.appbar.AppBarLayout
|
||||||
import com.google.android.material.color.DynamicColors
|
import com.google.android.material.color.DynamicColors
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.constant.AppConst
|
|
||||||
import io.legato.kazusa.constant.AppLog
|
import io.legato.kazusa.constant.AppLog
|
||||||
import io.legato.kazusa.constant.EventBus
|
import io.legato.kazusa.constant.EventBus
|
||||||
import io.legato.kazusa.constant.PreferKey
|
|
||||||
import io.legato.kazusa.constant.Theme
|
import io.legato.kazusa.constant.Theme
|
||||||
import io.legato.kazusa.help.config.ThemeConfig
|
import io.legato.kazusa.help.config.ThemeConfig
|
||||||
//import io.legado.app.lib.theme.backgroundColor
|
|
||||||
//import io.legado.app.lib.theme.primaryColor
|
|
||||||
import io.legato.kazusa.utils.applyOpenTint
|
import io.legato.kazusa.utils.applyOpenTint
|
||||||
import io.legato.kazusa.utils.applyTint
|
import io.legato.kazusa.utils.applyTint
|
||||||
import io.legato.kazusa.utils.disableAutoFill
|
import io.legato.kazusa.utils.disableAutoFill
|
||||||
import io.legato.kazusa.utils.getPrefBoolean
|
|
||||||
import io.legato.kazusa.utils.getPrefString
|
import io.legato.kazusa.utils.getPrefString
|
||||||
import io.legato.kazusa.utils.hideSoftInput
|
import io.legato.kazusa.utils.hideSoftInput
|
||||||
import io.legato.kazusa.utils.observeEvent
|
import io.legato.kazusa.utils.observeEvent
|
||||||
@@ -88,7 +78,7 @@ abstract class BaseActivity<VB : ViewBinding>(
|
|||||||
|
|
||||||
|
|
||||||
observeLiveBus()
|
observeLiveBus()
|
||||||
onActivityCreated(savedInstanceState)
|
//onActivityCreated(savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) {
|
override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) {
|
||||||
@@ -107,7 +97,7 @@ abstract class BaseActivity<VB : ViewBinding>(
|
|||||||
// //setupSystemBar()
|
// //setupSystemBar()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
abstract fun onActivityCreated(savedInstanceState: Bundle?)
|
|
||||||
|
|
||||||
final override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
final override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
val bool = onCompatCreateOptionsMenu(menu)
|
val bool = onCompatCreateOptionsMenu(menu)
|
||||||
|
|||||||
@@ -183,4 +183,5 @@ object PreferKey {
|
|||||||
const val contentSelectSpeakMod = "contentReadAloudMod"
|
const val contentSelectSpeakMod = "contentReadAloudMod"
|
||||||
|
|
||||||
const val themePref = "themePref"
|
const val themePref = "themePref"
|
||||||
|
const val bookshelfSortOrder = "bookshelfSortOrder"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -539,6 +539,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
appCtx.putPrefInt(PreferKey.bookshelfSort, value)
|
appCtx.putPrefInt(PreferKey.bookshelfSort, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var bookshelfSortOrder: Int
|
||||||
|
get() = appCtx.getPrefInt(PreferKey.bookshelfSortOrder, 0)
|
||||||
|
set(value) {
|
||||||
|
appCtx.putPrefInt(PreferKey.bookshelfSortOrder, value)
|
||||||
|
}
|
||||||
|
|
||||||
fun getBookSortByGroupId(groupId: Long): Int {
|
fun getBookSortByGroupId(groupId: Long): Int {
|
||||||
return appDb.bookGroupDao.getByID(groupId)?.getRealBookSort()
|
return appDb.bookGroupDao.getByID(groupId)?.getRealBookSort()
|
||||||
?: bookshelfSort
|
?: bookshelfSort
|
||||||
|
|||||||
@@ -20,8 +20,9 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
|||||||
|
|
||||||
override val binding by viewBinding(ActivityAboutBinding::inflate)
|
override val binding by viewBinding(ActivityAboutBinding::inflate)
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
//binding.llAbout.background = filletBackground
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
val fTag = "aboutFragment"
|
val fTag = "aboutFragment"
|
||||||
var aboutFragment = supportFragmentManager.findFragmentByTag(fTag)
|
var aboutFragment = supportFragmentManager.findFragmentByTag(fTag)
|
||||||
if (aboutFragment == null) aboutFragment = AboutFragment()
|
if (aboutFragment == null) aboutFragment = AboutFragment()
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
|||||||
|
|
||||||
override val binding by viewBinding(ActivityReadRecordBinding::inflate)
|
override val binding by viewBinding(ActivityReadRecordBinding::inflate)
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
initAllTime()
|
initAllTime()
|
||||||
initData()
|
initData()
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ class FileAssociationActivity :
|
|||||||
buildMainHandler()
|
buildMainHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
binding.rotateLoading.visible()
|
binding.rotateLoading.visible()
|
||||||
viewModel.importBookLiveData.observe(this) { uri ->
|
viewModel.importBookLiveData.observe(this) { uri ->
|
||||||
importBook(uri)
|
importBook(uri)
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ class OnLineImportActivity :
|
|||||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||||
override val viewModel by viewModels<OnLineImportViewModel>()
|
override val viewModel by viewModels<OnLineImportViewModel>()
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
viewModel.successLive.observe(this) {
|
viewModel.successLive.observe(this) {
|
||||||
when (it.first) {
|
when (it.first) {
|
||||||
"bookSource" -> showDialogFragment(
|
"bookSource" -> showDialogFragment(
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ class OpenUrlConfirmActivity :
|
|||||||
|
|
||||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
intent.getStringExtra("uri")?.let {
|
intent.getStringExtra("uri")?.let {
|
||||||
val mimeType = intent.getStringExtra("mimeType")
|
val mimeType = intent.getStringExtra("mimeType")
|
||||||
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ class VerificationCodeActivity :
|
|||||||
|
|
||||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
intent.getStringExtra("imageUrl")?.let {
|
intent.getStringExtra("imageUrl")?.let {
|
||||||
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
||||||
val sourceName = intent.getStringExtra("sourceName")
|
val sourceName = intent.getStringExtra("sourceName")
|
||||||
|
|||||||
@@ -88,7 +88,8 @@ class AudioPlayActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
binding.titleBar.setBackgroundResource(R.color.transparent)
|
binding.titleBar.setBackgroundResource(R.color.transparent)
|
||||||
AudioPlay.register(this)
|
AudioPlay.register(this)
|
||||||
viewModel.titleData.observe(this) {
|
viewModel.titleData.observe(this) {
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
appDb.bookmarkDao.flowAll().catch {
|
appDb.bookmarkDao.flowAll().catch {
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
groupId = intent.getLongExtra("groupId", -1)
|
groupId = intent.getLongExtra("groupId", -1)
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
binding.titleBar.subtitle = withContext(IO) {
|
binding.titleBar.subtitle = withContext(IO) {
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ class ExploreShowActivity : VMBaseActivity<ActivityExploreShowBinding, ExploreSh
|
|||||||
private val adapter by lazy { ExploreShowAdapter(this, this) }
|
private val adapter by lazy { ExploreShowAdapter(this, this) }
|
||||||
private val loadMoreView by lazy { LoadMoreView(this) }
|
private val loadMoreView by lazy { LoadMoreView(this) }
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
binding.titleBar.title = intent.getStringExtra("exploreName")
|
binding.titleBar.title = intent.getStringExtra("exploreName")
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
viewModel.booksData.observe(this) { upData(it) }
|
viewModel.booksData.observe(this) { upData(it) }
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import kotlinx.coroutines.flow.conflate
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入本地书籍界面
|
* 导入本地书籍界面
|
||||||
@@ -58,7 +59,8 @@ class ImportBookActivity : BaseImportBookActivity<ImportBookViewModel>(),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
searchView.queryHint = getString(R.string.screen) + " • " + getString(R.string.local_book)
|
searchView.queryHint = getString(R.string.screen) + " • " + getString(R.string.local_book)
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
onBackPressedDispatcher.addCallback(this) {
|
||||||
if (!goBackDir()) {
|
if (!goBackDir()) {
|
||||||
@@ -166,7 +168,7 @@ class ImportBookActivity : BaseImportBookActivity<ImportBookViewModel>(),
|
|||||||
selectFolder.launch()
|
selectFolder.launch()
|
||||||
} else {
|
} else {
|
||||||
val rootUri = if (lastPath.isUri()) {
|
val rootUri = if (lastPath.isUri()) {
|
||||||
Uri.parse(lastPath)
|
lastPath.toUri()
|
||||||
} else {
|
} else {
|
||||||
Uri.fromFile(File(lastPath))
|
Uri.fromFile(File(lastPath))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import io.legato.kazusa.data.appDb
|
|||||||
import io.legato.kazusa.help.config.AppConfig
|
import io.legato.kazusa.help.config.AppConfig
|
||||||
import io.legato.kazusa.help.config.LocalConfig
|
import io.legato.kazusa.help.config.LocalConfig
|
||||||
import io.legato.kazusa.lib.dialogs.alert
|
import io.legato.kazusa.lib.dialogs.alert
|
||||||
//import io.legado.app.lib.theme.backgroundColor
|
|
||||||
import io.legato.kazusa.model.remote.RemoteBook
|
import io.legato.kazusa.model.remote.RemoteBook
|
||||||
import io.legato.kazusa.ui.about.AppLogDialog
|
import io.legato.kazusa.ui.about.AppLogDialog
|
||||||
import io.legato.kazusa.ui.book.import.BaseImportBookActivity
|
import io.legato.kazusa.ui.book.import.BaseImportBookActivity
|
||||||
@@ -43,7 +42,8 @@ class RemoteBookActivity : BaseImportBookActivity<RemoteBookViewModel>(),
|
|||||||
private val adapter by lazy { RemoteBookAdapter(this, this) }
|
private val adapter by lazy { RemoteBookAdapter(this, this) }
|
||||||
private var groupMenu: SubMenu? = null
|
private var groupMenu: SubMenu? = null
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
searchView.queryHint = getString(R.string.screen) + " • " + getString(R.string.remote_book)
|
searchView.queryHint = getString(R.string.screen) + " • " + getString(R.string.remote_book)
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
onBackPressedDispatcher.addCallback(this) {
|
||||||
if (!goBackDir()) {
|
if (!goBackDir()) {
|
||||||
|
|||||||
@@ -154,7 +154,8 @@ class BookInfoActivity :
|
|||||||
override val viewModel by viewModels<BookInfoViewModel>()
|
override val viewModel by viewModels<BookInfoViewModel>()
|
||||||
|
|
||||||
@SuppressLint("PrivateResource")
|
@SuppressLint("PrivateResource")
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
setSupportActionBar(binding.topBar)
|
setSupportActionBar(binding.topBar)
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ class BookInfoEditActivity :
|
|||||||
override val binding by viewBinding(ActivityBookInfoEditBinding::inflate)
|
override val binding by viewBinding(ActivityBookInfoEditBinding::inflate)
|
||||||
override val viewModel by viewModels<BookInfoEditViewModel>()
|
override val viewModel by viewModels<BookInfoEditViewModel>()
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
viewModel.bookData.observe(this) { upView(it) }
|
viewModel.bookData.observe(this) { upView(it) }
|
||||||
if (viewModel.bookData.value == null) {
|
if (viewModel.bookData.value == null) {
|
||||||
intent.getStringExtra("bookUrl")?.let {
|
intent.getStringExtra("bookUrl")?.let {
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ class BookshelfManageActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
viewModel.groupId = intent.getLongExtra("groupId", -1)
|
viewModel.groupId = intent.getLongExtra("groupId", -1)
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
viewModel.groupName = withContext(IO) {
|
viewModel.groupName = withContext(IO) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.content.Intent
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
|
import android.os.PersistableBundle
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@@ -152,9 +153,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
upLayoutInDisplayCutoutMode()
|
upLayoutInDisplayCutoutMode()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
||||||
ReadManga.register(this)
|
ReadManga.register(this)
|
||||||
upSystemUiVisibility(false)
|
upSystemUiVisibility(false)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
|
|||||||
@@ -90,10 +90,7 @@ abstract class BaseReadBookActivity :
|
|||||||
}
|
}
|
||||||
windowInsets
|
windowInsets
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
||||||
//binding.navigationBar.setBackgroundColor(bottomBackground)
|
|
||||||
viewModel.permissionDenialLiveData.observe(this) {
|
viewModel.permissionDenialLiveData.observe(this) {
|
||||||
selectBookFolderResult.launch {
|
selectBookFolderResult.launch {
|
||||||
mode = HandleFileContract.DIR_SYS
|
mode = HandleFileContract.DIR_SYS
|
||||||
|
|||||||
@@ -257,8 +257,8 @@ class ReadBookActivity : BaseReadBookActivity(),
|
|||||||
private var syncDialog: AlertDialog? = null
|
private var syncDialog: AlertDialog? = null
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
//binding.cursorLeft.setColorFilter(accentColor)
|
//binding.cursorLeft.setColorFilter(accentColor)
|
||||||
//binding.cursorRight.setColorFilter(accentColor)
|
//binding.cursorRight.setColorFilter(accentColor)
|
||||||
binding.cursorLeft.setOnTouchListener(this)
|
binding.cursorLeft.setOnTouchListener(this)
|
||||||
|
|||||||
@@ -83,7 +83,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
|||||||
private var precisionSearchMenuItem: MenuItem? = null
|
private var precisionSearchMenuItem: MenuItem? = null
|
||||||
private var isManualStopSearch = false
|
private var isManualStopSearch = false
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
//binding.llInputHelp.setBackgroundColor(backgroundColor)
|
//binding.llInputHelp.setBackgroundColor(backgroundColor)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ class SearchContentActivity :
|
|||||||
private var searchJob: Job? = null
|
private var searchJob: Job? = null
|
||||||
private var initJob: Job? = null
|
private var initJob: Job? = null
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
// val bbg = bottomBackground
|
// val bbg = bottomBackground
|
||||||
// val btc = getPrimaryTextColor(ColorUtils.isColorLight(bbg))
|
// val btc = getPrimaryTextColor(ColorUtils.isColorLight(bbg))
|
||||||
// binding.llSearchBaseInfo.setBackgroundColor(bbg)
|
// binding.llSearchBaseInfo.setBackgroundColor(bbg)
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ class BookSourceDebugActivity : VMBaseActivity<ActivitySourceDebugBinding, BookS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
viewModel.init(intent.getStringExtra("key")) {
|
viewModel.init(intent.getStringExtra("key")) {
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ class BookSourceEditActivity :
|
|||||||
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
softKeyboardTool.attachToWindow(window)
|
softKeyboardTool.attachToWindow(window)
|
||||||
initView()
|
initView()
|
||||||
viewModel.initData(intent) {
|
viewModel.initData(intent) {
|
||||||
|
|||||||
@@ -145,7 +145,8 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
upBookSource()
|
upBookSource()
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
tabLayout = binding.titleBar.findViewById(R.id.tab_layout)
|
tabLayout = binding.titleBar.findViewById(R.id.tab_layout)
|
||||||
//tabLayout.isTabIndicatorFullWidth = false
|
//tabLayout.isTabIndicatorFullWidth = false
|
||||||
//tabLayout.setSelectedTabIndicatorColor(accentColor)
|
//tabLayout.setSelectedTabIndicatorColor(accentColor)
|
||||||
|
|||||||
@@ -85,7 +85,8 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
initBottomActionBar()
|
initBottomActionBar()
|
||||||
initData()
|
initData()
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading)
|
binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading)
|
||||||
binding.titleBar.subtitle = intent.getStringExtra("sourceName")
|
binding.titleBar.subtitle = intent.getStringExtra("sourceName")
|
||||||
viewModel.initData(intent) {
|
viewModel.initData(intent) {
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ class ConfigActivity : VMBaseActivity<ActivityConfigBinding, ConfigViewModel>()
|
|||||||
override val binding by viewBinding(ActivityConfigBinding::inflate)
|
override val binding by viewBinding(ActivityConfigBinding::inflate)
|
||||||
override val viewModel by viewModels<ConfigViewModel>()
|
override val viewModel by viewModels<ConfigViewModel>()
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
when (val configTag = intent.getStringExtra("configTag")) {
|
when (val configTag = intent.getStringExtra("configTag")) {
|
||||||
ConfigTag.OTHER_CONFIG -> replaceFragment<OtherConfigFragment>(configTag)
|
ConfigTag.OTHER_CONFIG -> replaceFragment<OtherConfigFragment>(configTag)
|
||||||
ConfigTag.THEME_CONFIG -> replaceFragment<ThemeConfigFragment>(configTag)
|
ConfigTag.THEME_CONFIG -> replaceFragment<ThemeConfigFragment>(configTag)
|
||||||
|
|||||||
@@ -86,7 +86,8 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSelectActionView()
|
initSelectActionView()
|
||||||
observeDictRuleData()
|
observeDictRuleData()
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ class FileManageActivity : VMBaseActivity<ActivityFileManageBinding, FileManageV
|
|||||||
}
|
}
|
||||||
private val currentFiles = arrayListOf<File>()
|
private val currentFiles = arrayListOf<File>()
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
viewModel.upFiles(viewModel.rootDoc)
|
viewModel.upFiles(viewModel.rootDoc)
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ class HandleFileActivity :
|
|||||||
} ?: finish()
|
} ?: finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
mode = intent.getIntExtra("mode", 0)
|
mode = intent.getIntExtra("mode", 0)
|
||||||
viewModel.errorLiveData.observe(this) {
|
viewModel.errorLiveData.observe(this) {
|
||||||
toastOnUi(it)
|
toastOnUi(it)
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ class SourceLoginActivity : VMBaseActivity<ActivitySourceLoginBinding, SourceLog
|
|||||||
override val binding by viewBinding(ActivitySourceLoginBinding::inflate)
|
override val binding by viewBinding(ActivitySourceLoginBinding::inflate)
|
||||||
override val viewModel by viewModels<SourceLoginViewModel>()
|
override val viewModel by viewModels<SourceLoginViewModel>()
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
viewModel.initData(intent) { source ->
|
viewModel.initData(intent) { source ->
|
||||||
initView(source)
|
initView(source)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,20 +89,20 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
upBottomMenu()
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
|
||||||
upHomePage()
|
// 绑定返回键逻辑
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
onBackPressedDispatcher.addCallback(this) {
|
||||||
if (pagePosition != 0) {
|
if (pagePosition != 0) {
|
||||||
binding.viewPagerMain.currentItem = 0
|
binding.viewPagerMain.currentItem = 0
|
||||||
return@addCallback
|
return@addCallback
|
||||||
}
|
}
|
||||||
|
|
||||||
(fragmentMap[getFragmentId(0)] as? BookshelfFragment2)?.let {
|
(fragmentMap[getFragmentId(0)] as? BookshelfFragment2)?.let {
|
||||||
if (it.back()) {
|
if (it.back()) return@addCallback
|
||||||
return@addCallback
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (System.currentTimeMillis() - exitTime > 2000) {
|
if (System.currentTimeMillis() - exitTime > 2000) {
|
||||||
toastOnUi(R.string.double_click_exit)
|
toastOnUi(R.string.double_click_exit)
|
||||||
exitTime = System.currentTimeMillis()
|
exitTime = System.currentTimeMillis()
|
||||||
@@ -114,6 +114,11 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 其他初始化逻辑
|
||||||
|
upBottomMenu()
|
||||||
|
initView()
|
||||||
|
upHomePage()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||||
|
|||||||
@@ -1,25 +1,18 @@
|
|||||||
package io.legato.kazusa.ui.main.bookshelf
|
package io.legato.kazusa.ui.main.bookshelf
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.res.Configuration
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
|
||||||
import androidx.core.view.isVisible
|
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import com.google.android.material.chip.Chip
|
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.VMBaseFragment
|
import io.legato.kazusa.base.VMBaseFragment
|
||||||
import io.legato.kazusa.constant.EventBus
|
|
||||||
import io.legato.kazusa.data.appDb
|
import io.legato.kazusa.data.appDb
|
||||||
import io.legato.kazusa.data.entities.Book
|
import io.legato.kazusa.data.entities.Book
|
||||||
import io.legato.kazusa.data.entities.BookGroup
|
import io.legato.kazusa.data.entities.BookGroup
|
||||||
import io.legato.kazusa.databinding.DialogBookshelfConfigBinding
|
|
||||||
import io.legato.kazusa.databinding.DialogEditTextBinding
|
import io.legato.kazusa.databinding.DialogEditTextBinding
|
||||||
import io.legato.kazusa.help.DirectLinkUpload
|
import io.legato.kazusa.help.DirectLinkUpload
|
||||||
import io.legato.kazusa.help.config.AppConfig
|
|
||||||
import io.legato.kazusa.lib.dialogs.alert
|
import io.legato.kazusa.lib.dialogs.alert
|
||||||
import io.legato.kazusa.ui.about.AppLogDialog
|
import io.legato.kazusa.ui.about.AppLogDialog
|
||||||
import io.legato.kazusa.ui.book.cache.CacheActivity
|
import io.legato.kazusa.ui.book.cache.CacheActivity
|
||||||
@@ -33,7 +26,6 @@ import io.legato.kazusa.ui.main.MainFragmentInterface
|
|||||||
import io.legato.kazusa.ui.main.MainViewModel
|
import io.legato.kazusa.ui.main.MainViewModel
|
||||||
import io.legato.kazusa.ui.widget.dialog.WaitDialog
|
import io.legato.kazusa.ui.widget.dialog.WaitDialog
|
||||||
import io.legato.kazusa.utils.isAbsUrl
|
import io.legato.kazusa.utils.isAbsUrl
|
||||||
import io.legato.kazusa.utils.postEvent
|
|
||||||
import io.legato.kazusa.utils.readText
|
import io.legato.kazusa.utils.readText
|
||||||
import io.legato.kazusa.utils.sendToClip
|
import io.legato.kazusa.utils.sendToClip
|
||||||
import io.legato.kazusa.utils.showDialogFragment
|
import io.legato.kazusa.utils.showDialogFragment
|
||||||
@@ -97,7 +89,7 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment<BookshelfVi
|
|||||||
R.id.menu_remote -> startActivity<RemoteBookActivity>()
|
R.id.menu_remote -> startActivity<RemoteBookActivity>()
|
||||||
R.id.menu_search -> startActivity<SearchActivity>()
|
R.id.menu_search -> startActivity<SearchActivity>()
|
||||||
R.id.menu_update_toc -> activityViewModel.upToc(books)
|
R.id.menu_update_toc -> activityViewModel.upToc(books)
|
||||||
R.id.menu_bookshelf_layout -> configBookshelf()
|
R.id.menu_bookshelf_layout -> showDialogFragment<BookshelfConfigBottomSheet>()
|
||||||
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>()
|
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>()
|
||||||
R.id.menu_add_local -> startActivity<ImportBookActivity>()
|
R.id.menu_add_local -> startActivity<ImportBookActivity>()
|
||||||
R.id.menu_add_url -> showAddBookByUrlAlert()
|
R.id.menu_add_url -> showAddBookByUrlAlert()
|
||||||
@@ -163,142 +155,6 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment<BookshelfVi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
|
||||||
fun configBookshelf() {
|
|
||||||
alert {
|
|
||||||
|
|
||||||
val orientation = requireContext().resources.configuration.orientation
|
|
||||||
val bookshelfLayout = if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
||||||
AppConfig.bookshelfLayoutLandscape
|
|
||||||
} else {
|
|
||||||
AppConfig.bookshelfLayoutPortrait
|
|
||||||
}
|
|
||||||
|
|
||||||
val isGrid = bookshelfLayout > 0
|
|
||||||
val columnCount = (bookshelfLayout.takeIf { it > 0 } ?: 1)
|
|
||||||
|
|
||||||
val bookshelfSort = AppConfig.bookshelfSort
|
|
||||||
val alertBinding =
|
|
||||||
DialogBookshelfConfigBinding.inflate(layoutInflater)
|
|
||||||
.apply {
|
|
||||||
|
|
||||||
val groupStyleArray = resources.getStringArray(R.array.group_style)
|
|
||||||
val chipGroupStyle = chipGroupStyle
|
|
||||||
|
|
||||||
groupStyleArray.forEachIndexed { index, label ->
|
|
||||||
val chip = Chip(context).apply {
|
|
||||||
text = label
|
|
||||||
isCheckable = true
|
|
||||||
isClickable = true
|
|
||||||
id = View.generateViewId()
|
|
||||||
}
|
|
||||||
chipGroupStyle.addView(chip)
|
|
||||||
if (index == AppConfig.bookGroupStyle) {
|
|
||||||
chipGroupStyle.check(chip.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val sortArray = resources.getStringArray(R.array.bookshelf_px_array)
|
|
||||||
val chipGroupSort = chipGroupSort
|
|
||||||
|
|
||||||
sortArray.forEachIndexed { index, label ->
|
|
||||||
val chip = Chip(context).apply {
|
|
||||||
text = label
|
|
||||||
isCheckable = true
|
|
||||||
isClickable = true
|
|
||||||
id = View.generateViewId()
|
|
||||||
}
|
|
||||||
chipGroupSort.addView(chip)
|
|
||||||
if (index == AppConfig.bookshelfSort) {
|
|
||||||
chipGroupSort.check(chip.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
swShowUnread.isChecked = AppConfig.showUnread
|
|
||||||
swShowLastUpdateTime.isChecked = AppConfig.showLastUpdateTime
|
|
||||||
swShowWaitUpBooks.isChecked = AppConfig.showWaitUpCount
|
|
||||||
swShowBookshelfFastScroller.isChecked = AppConfig.showBookshelfFastScroller
|
|
||||||
|
|
||||||
chipList.isChecked = !isGrid
|
|
||||||
chipGrid.isChecked = isGrid
|
|
||||||
sliderText.isVisible = isGrid
|
|
||||||
sliderGridCount.isVisible = isGrid
|
|
||||||
sliderGridCount.value = columnCount.toFloat()
|
|
||||||
|
|
||||||
chipGroupLayout.setOnCheckedStateChangeListener { group, checkedIds ->
|
|
||||||
sliderText.isVisible = checkedIds.firstOrNull() == R.id.chip_grid
|
|
||||||
sliderGridCount.isVisible = checkedIds.firstOrNull() == R.id.chip_grid
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
customView { alertBinding.root }
|
|
||||||
|
|
||||||
okButton {
|
|
||||||
alertBinding.apply {
|
|
||||||
var notifyMain = false
|
|
||||||
var recreate = false
|
|
||||||
|
|
||||||
if (AppConfig.bookGroupStyle != chipGroupStyle.checkedChipId) {
|
|
||||||
AppConfig.bookGroupStyle = chipGroupStyle.indexOfChild(chipGroupStyle.findViewById(chipGroupStyle.checkedChipId))
|
|
||||||
notifyMain = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AppConfig.showUnread != swShowUnread.isChecked) {
|
|
||||||
AppConfig.showUnread = swShowUnread.isChecked
|
|
||||||
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
|
||||||
}
|
|
||||||
if (AppConfig.showLastUpdateTime != swShowLastUpdateTime.isChecked) {
|
|
||||||
AppConfig.showLastUpdateTime = swShowLastUpdateTime.isChecked
|
|
||||||
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
|
||||||
}
|
|
||||||
if (AppConfig.showWaitUpCount != swShowWaitUpBooks.isChecked) {
|
|
||||||
AppConfig.showWaitUpCount = swShowWaitUpBooks.isChecked
|
|
||||||
activityViewModel.postUpBooksLiveData(true)
|
|
||||||
}
|
|
||||||
if (AppConfig.showBookshelfFastScroller != swShowBookshelfFastScroller.isChecked) {
|
|
||||||
AppConfig.showBookshelfFastScroller = swShowBookshelfFastScroller.isChecked
|
|
||||||
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
|
||||||
}
|
|
||||||
if (bookshelfSort != chipGroupSort.indexOfChild(chipGroupSort.findViewById(chipGroupSort.checkedChipId))) {
|
|
||||||
AppConfig.bookshelfSort = chipGroupSort.indexOfChild(chipGroupSort.findViewById(chipGroupSort.checkedChipId))
|
|
||||||
upSort()
|
|
||||||
}
|
|
||||||
|
|
||||||
val isNowGrid = alertBinding.chipGrid.isChecked
|
|
||||||
val selectedColumn = alertBinding.sliderGridCount.value.toInt()
|
|
||||||
val newLayout = if (isNowGrid) selectedColumn else 0
|
|
||||||
|
|
||||||
if (bookshelfLayout != newLayout) {
|
|
||||||
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
||||||
AppConfig.bookshelfLayoutLandscape = newLayout
|
|
||||||
if (newLayout == 0) {
|
|
||||||
activityViewModel.booksGridRecycledViewPool.clear()
|
|
||||||
} else {
|
|
||||||
activityViewModel.booksListRecycledViewPool.clear()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
AppConfig.bookshelfLayoutPortrait = newLayout
|
|
||||||
if (newLayout == 0) {
|
|
||||||
activityViewModel.booksGridRecycledViewPool.clear()
|
|
||||||
} else {
|
|
||||||
activityViewModel.booksListRecycledViewPool.clear()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
recreate = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recreate) {
|
|
||||||
postEvent(EventBus.RECREATE, "")
|
|
||||||
} else if (notifyMain) {
|
|
||||||
postEvent(EventBus.NOTIFY_MAIN, false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cancelButton()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun importBookshelfAlert(groupId: Long) {
|
private fun importBookshelfAlert(groupId: Long) {
|
||||||
alert(titleResource = R.string.import_bookshelf) {
|
alert(titleResource = R.string.import_bookshelf) {
|
||||||
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
|
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
|
||||||
|
|||||||
@@ -0,0 +1,170 @@
|
|||||||
|
package io.legato.kazusa.ui.main.bookshelf
|
||||||
|
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.transition.TransitionManager
|
||||||
|
import com.google.android.material.chip.Chip
|
||||||
|
import io.legato.kazusa.R
|
||||||
|
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||||
|
import io.legato.kazusa.constant.EventBus
|
||||||
|
import io.legato.kazusa.databinding.DialogBookshelfConfigBinding
|
||||||
|
import io.legato.kazusa.help.config.AppConfig
|
||||||
|
import io.legato.kazusa.ui.main.MainViewModel
|
||||||
|
import io.legato.kazusa.utils.postEvent
|
||||||
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
|
|
||||||
|
class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog_bookshelf_config) {
|
||||||
|
|
||||||
|
private val binding by viewBinding(DialogBookshelfConfigBinding::bind)
|
||||||
|
private val activityViewModel by activityViewModels<MainViewModel>()
|
||||||
|
|
||||||
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
|
||||||
|
val orientation = requireContext().resources.configuration.orientation
|
||||||
|
|
||||||
|
val bookshelfLayout = if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
|
AppConfig.bookshelfLayoutLandscape
|
||||||
|
} else {
|
||||||
|
AppConfig.bookshelfLayoutPortrait
|
||||||
|
}
|
||||||
|
|
||||||
|
val isGrid = bookshelfLayout > 0
|
||||||
|
val columnCount = bookshelfLayout.takeIf { it > 0 } ?: 1
|
||||||
|
|
||||||
|
val bookshelfSort = AppConfig.bookshelfSort
|
||||||
|
|
||||||
|
binding.apply {
|
||||||
|
|
||||||
|
resources.getStringArray(R.array.group_style).forEachIndexed { index, label ->
|
||||||
|
val chip = Chip(context).apply {
|
||||||
|
text = label
|
||||||
|
isCheckable = true
|
||||||
|
isClickable = true
|
||||||
|
id = View.generateViewId()
|
||||||
|
}
|
||||||
|
chipGroupStyle.addView(chip)
|
||||||
|
if (index == AppConfig.bookGroupStyle) {
|
||||||
|
chipGroupStyle.check(chip.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resources.getStringArray(R.array.bookshelf_px_array).forEachIndexed { index, label ->
|
||||||
|
val chip = Chip(context).apply {
|
||||||
|
text = label
|
||||||
|
isCheckable = true
|
||||||
|
isClickable = true
|
||||||
|
id = View.generateViewId()
|
||||||
|
}
|
||||||
|
chipGroupSort.addView(chip)
|
||||||
|
if (index == AppConfig.bookshelfSort) {
|
||||||
|
chipGroupSort.check(chip.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
swShowUnread.isChecked = AppConfig.showUnread
|
||||||
|
swShowLastUpdateTime.isChecked = AppConfig.showLastUpdateTime
|
||||||
|
swShowWaitUpBooks.isChecked = AppConfig.showWaitUpCount
|
||||||
|
swShowBookshelfFastScroller.isChecked = AppConfig.showBookshelfFastScroller
|
||||||
|
|
||||||
|
chipList.isChecked = !isGrid
|
||||||
|
chipGrid.isChecked = isGrid
|
||||||
|
sliderText.isVisible = isGrid
|
||||||
|
sliderGridCount.isVisible = isGrid
|
||||||
|
sliderGridCount.value = columnCount.toFloat()
|
||||||
|
|
||||||
|
when (AppConfig.bookshelfSortOrder) {
|
||||||
|
0 -> binding.chipGroupOrder.check(binding.chipAsc.id)
|
||||||
|
1 -> binding.chipGroupOrder.check(binding.chipDesc.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
chipGroupLayout.setOnCheckedStateChangeListener { group, checkedIds ->
|
||||||
|
sliderText.isVisible = checkedIds.firstOrNull() == R.id.chip_grid
|
||||||
|
TransitionManager.beginDelayedTransition(root)
|
||||||
|
sliderGridCount.isVisible = checkedIds.firstOrNull() == R.id.chip_grid
|
||||||
|
}
|
||||||
|
|
||||||
|
btnOk.setOnClickListener {
|
||||||
|
var notifyMain = false
|
||||||
|
var recreate = false
|
||||||
|
|
||||||
|
if (AppConfig.bookGroupStyle != chipGroupStyle.checkedChipId) {
|
||||||
|
AppConfig.bookGroupStyle = chipGroupStyle.indexOfChild(chipGroupStyle.findViewById(chipGroupStyle.checkedChipId))
|
||||||
|
notifyMain = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppConfig.showUnread != swShowUnread.isChecked) {
|
||||||
|
AppConfig.showUnread = swShowUnread.isChecked
|
||||||
|
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
||||||
|
}
|
||||||
|
if (AppConfig.showLastUpdateTime != swShowLastUpdateTime.isChecked) {
|
||||||
|
AppConfig.showLastUpdateTime = swShowLastUpdateTime.isChecked
|
||||||
|
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
||||||
|
}
|
||||||
|
if (AppConfig.showWaitUpCount != swShowWaitUpBooks.isChecked) {
|
||||||
|
AppConfig.showWaitUpCount = swShowWaitUpBooks.isChecked
|
||||||
|
activityViewModel.postUpBooksLiveData(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppConfig.showBookshelfFastScroller != swShowBookshelfFastScroller.isChecked) {
|
||||||
|
AppConfig.showBookshelfFastScroller = swShowBookshelfFastScroller.isChecked
|
||||||
|
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bookshelfSort != chipGroupSort.indexOfChild(chipGroupSort.findViewById(chipGroupSort.checkedChipId))) {
|
||||||
|
AppConfig.bookshelfSort = chipGroupSort.indexOfChild(chipGroupSort.findViewById(chipGroupSort.checkedChipId))
|
||||||
|
(requireParentFragment() as? BaseBookshelfFragment)?.upSort()
|
||||||
|
}
|
||||||
|
|
||||||
|
val isNowGrid = chipGrid.isChecked
|
||||||
|
val selectedColumn = sliderGridCount.value.toInt()
|
||||||
|
val newLayout = if (isNowGrid) selectedColumn else 0
|
||||||
|
|
||||||
|
if (bookshelfLayout != newLayout) {
|
||||||
|
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
|
AppConfig.bookshelfLayoutLandscape = newLayout
|
||||||
|
if (newLayout == 0) {
|
||||||
|
activityViewModel.booksGridRecycledViewPool.clear()
|
||||||
|
} else {
|
||||||
|
activityViewModel.booksListRecycledViewPool.clear()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AppConfig.bookshelfLayoutPortrait = newLayout
|
||||||
|
if (newLayout == 0) {
|
||||||
|
activityViewModel.booksGridRecycledViewPool.clear()
|
||||||
|
} else {
|
||||||
|
activityViewModel.booksListRecycledViewPool.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
recreate = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val newOrder = when (binding.chipGroupOrder.checkedChipId) {
|
||||||
|
binding.chipAsc.id -> 0
|
||||||
|
binding.chipDesc.id -> 1
|
||||||
|
else -> 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppConfig.bookshelfSortOrder != newOrder) {
|
||||||
|
AppConfig.bookshelfSortOrder = newOrder
|
||||||
|
(requireParentFragment() as? BaseBookshelfFragment)?.upSort()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recreate) {
|
||||||
|
dismiss()
|
||||||
|
postEvent(EventBus.RECREATE, "")
|
||||||
|
} else if (notifyMain) {
|
||||||
|
dismiss()
|
||||||
|
postEvent(EventBus.NOTIFY_MAIN, false)
|
||||||
|
}
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
|
btnCancel.setOnClickListener {
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,6 +39,7 @@ import kotlinx.coroutines.flow.conflate
|
|||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import java.util.Locale
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -176,27 +177,25 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
appDb.bookDao.flowByGroup(groupId).map { list ->
|
appDb.bookDao.flowByGroup(groupId).map { list ->
|
||||||
|
|
||||||
//排序
|
//排序
|
||||||
|
val isDescending = AppConfig.bookshelfSortOrder == 1
|
||||||
|
|
||||||
when (AppConfig.getBookSortByGroupId(groupId)) {
|
when (AppConfig.getBookSortByGroupId(groupId)) {
|
||||||
1 -> list.sortedByDescending {
|
1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
|
||||||
it.latestChapterTime
|
else list.sortedBy { it.latestChapterTime }
|
||||||
}
|
|
||||||
|
|
||||||
2 -> list.sortedWith { o1, o2 ->
|
2 -> if (isDescending) list.sortedWith(compareByDescending { it.name.cnCompareKey() })
|
||||||
o1.name.cnCompare(o2.name)
|
else list.sortedWith(compareBy { it.name.cnCompareKey() })
|
||||||
}
|
|
||||||
|
|
||||||
3 -> list.sortedBy {
|
3 -> if (isDescending) list.sortedByDescending { it.order }
|
||||||
it.order
|
else list.sortedBy { it.order }
|
||||||
}
|
|
||||||
|
|
||||||
4 -> list.sortedByDescending {
|
4 -> if (isDescending) list.sortedByDescending { max(it.latestChapterTime, it.durChapterTime) }
|
||||||
max(it.latestChapterTime, it.durChapterTime)
|
else list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
|
||||||
}
|
|
||||||
|
|
||||||
else -> list.sortedByDescending {
|
else -> if (isDescending) list.sortedByDescending { it.durChapterTime }
|
||||||
it.durChapterTime
|
else list.sortedBy { it.durChapterTime }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}.flowWithLifecycleAndDatabaseChangeFirst(
|
}.flowWithLifecycleAndDatabaseChangeFirst(
|
||||||
viewLifecycleOwner.lifecycle,
|
viewLifecycleOwner.lifecycle,
|
||||||
Lifecycle.State.RESUMED,
|
Lifecycle.State.RESUMED,
|
||||||
@@ -212,6 +211,10 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.cnCompareKey(): String {
|
||||||
|
return this.trim().lowercase(Locale.getDefault())
|
||||||
|
}
|
||||||
|
|
||||||
fun back(): Boolean {
|
fun back(): Boolean {
|
||||||
if (groupId != BookGroup.IdRoot) {
|
if (groupId != BookGroup.IdRoot) {
|
||||||
groupId = BookGroup.IdRoot
|
groupId = BookGroup.IdRoot
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ class QrCodeActivity : BaseActivity<ActivityQrcodeCaptureBinding>(), ScanResultC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
val fTag = "qrCodeFragment"
|
val fTag = "qrCodeFragment"
|
||||||
val qrCodeFragment = QrCodeFragment()
|
val qrCodeFragment = QrCodeFragment()
|
||||||
supportFragmentManager.beginTransaction()
|
supportFragmentManager.beginTransaction()
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
initSelectActionView()
|
initSelectActionView()
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ class ReplaceEditActivity :
|
|||||||
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
softKeyboardTool.attachToWindow(window)
|
softKeyboardTool.attachToWindow(window)
|
||||||
initView()
|
initView()
|
||||||
viewModel.initData(intent) {
|
viewModel.initData(intent) {
|
||||||
|
|||||||
@@ -5,11 +5,9 @@ package io.legato.kazusa.ui.rss.article
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
@@ -17,7 +15,6 @@ import io.legato.kazusa.R
|
|||||||
import io.legato.kazusa.base.VMBaseActivity
|
import io.legato.kazusa.base.VMBaseActivity
|
||||||
import io.legato.kazusa.databinding.ActivityRssArtivlesBinding
|
import io.legato.kazusa.databinding.ActivityRssArtivlesBinding
|
||||||
import io.legato.kazusa.help.source.sortUrls
|
import io.legato.kazusa.help.source.sortUrls
|
||||||
//import io.legado.app.lib.theme.accentColor
|
|
||||||
import io.legato.kazusa.ui.login.SourceLoginActivity
|
import io.legato.kazusa.ui.login.SourceLoginActivity
|
||||||
import io.legato.kazusa.ui.rss.source.edit.RssSourceEditActivity
|
import io.legato.kazusa.ui.rss.source.edit.RssSourceEditActivity
|
||||||
import io.legato.kazusa.ui.widget.dialog.VariableDialog
|
import io.legato.kazusa.ui.widget.dialog.VariableDialog
|
||||||
@@ -45,7 +42,8 @@ class RssSortActivity : VMBaseActivity<ActivityRssArtivlesBinding, RssSortViewMo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
setSupportActionBar(binding.topBar)
|
setSupportActionBar(binding.topBar)
|
||||||
|
|
||||||
viewModel.titleLiveData.observe(this) {
|
viewModel.titleLiveData.observe(this) {
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
|||||||
private var groupsMenu: SubMenu? = null
|
private var groupsMenu: SubMenu? = null
|
||||||
private var currentGroup = ""
|
private var currentGroup = ""
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
upFragments()
|
upFragments()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,8 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
|||||||
return viewModel.rssSource
|
return viewModel.rssSource
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
viewModel.upStarMenuData.observe(this) { upStarMenu() }
|
viewModel.upStarMenuData.observe(this) { upStarMenu() }
|
||||||
viewModel.upTtsMenuData.observe(this) { upTtsMenu(it) }
|
viewModel.upTtsMenuData.observe(this) { upTtsMenu(it) }
|
||||||
binding.titleBar.title = intent.getStringExtra("title")
|
binding.titleBar.title = intent.getStringExtra("title")
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ class RssSourceDebugActivity : VMBaseActivity<ActivitySourceDebugBinding, RssSou
|
|||||||
|
|
||||||
private val adapter by lazy { RssSourceDebugAdapter(this) }
|
private val adapter by lazy { RssSourceDebugAdapter(this) }
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
viewModel.observe { state, msg ->
|
viewModel.observe { state, msg ->
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ class RssSourceEditActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
softKeyboardTool.attachToWindow(window)
|
softKeyboardTool.attachToWindow(window)
|
||||||
initView()
|
initView()
|
||||||
viewModel.initData(intent) {
|
viewModel.initData(intent) {
|
||||||
|
|||||||
@@ -107,7 +107,8 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initSearchView()
|
initSearchView()
|
||||||
initGroupFlow()
|
initGroupFlow()
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ class RuleSubActivity : BaseActivity<ActivityRuleSubBinding>(),
|
|||||||
override val binding by viewBinding(ActivityRuleSubBinding::inflate)
|
override val binding by viewBinding(ActivityRuleSubBinding::inflate)
|
||||||
private val adapter by lazy { RuleSubAdapter(this, this) }
|
private val adapter by lazy { RuleSubAdapter(this, this) }
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
initView()
|
initView()
|
||||||
initData()
|
initData()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ open class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
|||||||
|
|
||||||
override val binding by viewBinding(ActivityWelcomeBinding::inflate)
|
override val binding by viewBinding(ActivityWelcomeBinding::inflate)
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
// binding.ivBook.setColorFilter(accentColor)
|
// binding.ivBook.setColorFilter(accentColor)
|
||||||
// binding.vwTitleLine.setBackgroundColor(accentColor)
|
// binding.vwTitleLine.setBackgroundColor(accentColor)
|
||||||
// 避免从桌面启动程序后,会重新实例化入口类的activity
|
// 避免从桌面启动程序后,会重新实例化入口类的activity
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<corners android:radius="2dp" />
|
<corners android:radius="2dp" />
|
||||||
<solid android:color="#CCCCCC" />
|
<solid android:color="?attr/colorOnSurfaceVariant" />
|
||||||
</shape>
|
</shape>
|
||||||
|
|||||||
@@ -27,7 +27,8 @@
|
|||||||
android:id="@+id/iv_cover"
|
android:id="@+id/iv_cover"
|
||||||
android:layout_width="90dp"
|
android:layout_width="90dp"
|
||||||
android:layout_height="130dp"
|
android:layout_height="130dp"
|
||||||
android:layout_margin="8dp"
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
android:contentDescription="@string/img_cover"
|
android:contentDescription="@string/img_cover"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:src="?attr/colorSurfaceVariant"
|
android:src="?attr/colorSurfaceVariant"
|
||||||
@@ -74,7 +75,7 @@
|
|||||||
tools:ignore="RtlHardcoded" />
|
tools:ignore="RtlHardcoded" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
android:id="@+id/cb_enable_refresh"
|
android:id="@+id/cb_enable_refresh"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -118,7 +119,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@style/Widget.Material3.Button.TonalButton"
|
style="@style/Widget.Material3.Button.TonalButton"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:text="@string/cancel" />
|
android:text="@string/cancel" />
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
|
|||||||
@@ -1,139 +1,222 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:fillViewport="true">
|
android:fillViewport="true"
|
||||||
|
android:paddingHorizontal="16dp"
|
||||||
|
android:paddingVertical="8dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:animateLayoutChanges="true"
|
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="16dp">
|
android:gravity="center"
|
||||||
|
android:paddingVertical="8dp"
|
||||||
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:background="@drawable/bg_bottom_sheet_handle"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/bottom_sheet_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/bookshelf_layout"
|
android:text="@string/bookshelf_layout"
|
||||||
android:layout_marginVertical="8dp"
|
android:textSize="18sp"
|
||||||
style="@style/ChapterNameText"/>
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<com.google.android.material.materialswitch.MaterialSwitch
|
</LinearLayout>
|
||||||
android:id="@+id/sw_show_unread"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/show_unread"
|
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
|
||||||
|
|
||||||
<com.google.android.material.materialswitch.MaterialSwitch
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
android:id="@+id/sw_show_last_update_time"
|
android:id="@+id/sw_show_unread"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/show_last_update_time"
|
android:text="@string/show_unread"
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<com.google.android.material.materialswitch.MaterialSwitch
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
android:id="@+id/sw_show_wait_up_books"
|
android:id="@+id/sw_show_last_update_time"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/show_wait_up_count"
|
android:text="@string/show_last_update_time"
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<com.google.android.material.materialswitch.MaterialSwitch
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
android:id="@+id/sw_show_bookshelf_fast_scroller"
|
android:id="@+id/sw_show_wait_up_books"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/show_bookshelf_fast_scroller"
|
android:text="@string/show_wait_up_count"
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
|
android:id="@+id/sw_show_bookshelf_fast_scroller"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/show_bookshelf_fast_scroller"
|
||||||
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:text="@string/group_style"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.ChipGroup
|
||||||
|
android:id="@+id/chip_group_style"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checkableBehavior="single"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
app:singleSelection="true"
|
||||||
|
app:selectionRequired="true">
|
||||||
|
</com.google.android.material.chip.ChipGroup>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="8dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="8dp"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/group_style"
|
android:text="排列视图"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<View
|
||||||
android:id="@+id/chip_group_style"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"/>
|
||||||
android:checkableBehavior="single"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
app:singleSelection="true"
|
|
||||||
app:selectionRequired="true">
|
|
||||||
</com.google.android.material.chip.ChipGroup>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="排列视图"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:paddingTop="8dp" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/chip_group_layout"
|
android:id="@+id/chip_group_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:singleSelection="true"
|
app:singleSelection="true"
|
||||||
app:selectionRequired="true"
|
app:selectionRequired="true">
|
||||||
android:paddingBottom="8dp">
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/chip_list"
|
android:id="@+id/chip_list"
|
||||||
style="@style/Widget.Material3.Chip.Filter"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="列表" />
|
android:text="列表" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/chip_grid"
|
android:id="@+id/chip_grid"
|
||||||
style="@style/Widget.Material3.Chip.Filter"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="网格" />
|
android:text="网格" />
|
||||||
</com.google.android.material.chip.ChipGroup>
|
</com.google.android.material.chip.ChipGroup>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/slider_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="每行列数"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:paddingTop="8dp" />
|
||||||
|
|
||||||
|
<com.google.android.material.slider.Slider
|
||||||
|
android:id="@+id/slider_grid_count"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="8dp"
|
||||||
|
android:valueFrom="1"
|
||||||
|
android:valueTo="9"
|
||||||
|
android:stepSize="1"
|
||||||
|
android:value="3" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/slider_text"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="每行列数"
|
android:layout_gravity="center_vertical"
|
||||||
android:textSize="14sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:paddingTop="8dp" />
|
|
||||||
|
|
||||||
<com.google.android.material.slider.Slider
|
|
||||||
android:id="@+id/slider_grid_count"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingVertical="8dp"
|
|
||||||
android:valueFrom="1"
|
|
||||||
android:valueTo="9"
|
|
||||||
android:stepSize="1"
|
|
||||||
android:value="3" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:text="@string/sort"
|
android:text="@string/sort"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/chip_group_sort"
|
android:id="@+id/chipGroupOrder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:singleSelection="true"
|
app:singleSelection="true">
|
||||||
app:selectionRequired="true"
|
|
||||||
android:layout_marginTop="4dp"
|
<com.google.android.material.chip.Chip
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_width="wrap_content"
|
||||||
android:orientation="horizontal" />
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/chip_asc"
|
||||||
|
android:text="升序"
|
||||||
|
android:checkable="true" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/chip_desc"
|
||||||
|
android:text="降序"
|
||||||
|
android:checkable="true" />
|
||||||
|
</com.google.android.material.chip.ChipGroup>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.chip.ChipGroup
|
||||||
|
android:id="@+id/chip_group_sort"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:singleSelection="true"
|
||||||
|
app:selectionRequired="true"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
|
android:orientation="horizontal" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnCancel"
|
||||||
|
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||||
|
android:text="取消"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnOk"
|
||||||
|
style="@style/Widget.Material3.Button"
|
||||||
|
android:text="确定"
|
||||||
|
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
|
||||||
|
</LinearLayout>
|
||||||
|
|||||||
@@ -4,13 +4,19 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:overScrollMode="ifContentScrolls"
|
android:overScrollMode="ifContentScrolls"
|
||||||
android:paddingLeft="16dp"
|
android:paddingVertical="8dp"
|
||||||
android:paddingRight="16dp">
|
android:paddingHorizontal="16dp">
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/edit_view"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content">
|
||||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
||||||
|
android:id="@+id/edit_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingVertical="16dp"
|
||||||
|
android:paddingHorizontal="16dp"
|
||||||
|
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
||||||
<item name="popupMenuBackground">@drawable/popup_background</item>
|
<item name="popupMenuBackground">@drawable/popup_background</item>
|
||||||
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
||||||
|
<item name="chipStyle">@style/Widget.Material3.Chip.Filter</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources >
|
||||||
|
|
||||||
//**************************************************************Theme******************************************************************************//
|
//**************************************************************Theme******************************************************************************//
|
||||||
|
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
||||||
<item name="popupMenuBackground">@drawable/popup_background</item>
|
<item name="popupMenuBackground">@drawable/popup_background</item>
|
||||||
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
||||||
|
<item name="chipStyle">@style/Widget.Material3.Chip.Filter</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Base.Dycolors" parent="Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
<style name="Theme.Base.Dycolors" parent="Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
||||||
|
|||||||
Reference in New Issue
Block a user