更新界面
This commit is contained in:
@@ -118,7 +118,6 @@
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
@@ -3,36 +3,26 @@ package io.legato.kazusa.base
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.constant.AppConst
|
||||
import io.legato.kazusa.constant.AppLog
|
||||
import io.legato.kazusa.constant.EventBus
|
||||
import io.legato.kazusa.constant.PreferKey
|
||||
import io.legato.kazusa.constant.Theme
|
||||
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.applyTint
|
||||
import io.legato.kazusa.utils.disableAutoFill
|
||||
import io.legato.kazusa.utils.getPrefBoolean
|
||||
import io.legato.kazusa.utils.getPrefString
|
||||
import io.legato.kazusa.utils.hideSoftInput
|
||||
import io.legato.kazusa.utils.observeEvent
|
||||
@@ -88,7 +78,7 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
|
||||
|
||||
observeLiveBus()
|
||||
onActivityCreated(savedInstanceState)
|
||||
//onActivityCreated(savedInstanceState)
|
||||
}
|
||||
|
||||
override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) {
|
||||
@@ -107,7 +97,7 @@ abstract class BaseActivity<VB : ViewBinding>(
|
||||
// //setupSystemBar()
|
||||
// }
|
||||
|
||||
abstract fun onActivityCreated(savedInstanceState: Bundle?)
|
||||
|
||||
|
||||
final override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
val bool = onCompatCreateOptionsMenu(menu)
|
||||
|
||||
@@ -183,4 +183,5 @@ object PreferKey {
|
||||
const val contentSelectSpeakMod = "contentReadAloudMod"
|
||||
|
||||
const val themePref = "themePref"
|
||||
const val bookshelfSortOrder = "bookshelfSortOrder"
|
||||
}
|
||||
|
||||
@@ -539,6 +539,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
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 {
|
||||
return appDb.bookGroupDao.getByID(groupId)?.getRealBookSort()
|
||||
?: bookshelfSort
|
||||
|
||||
@@ -20,8 +20,9 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
||||
|
||||
override val binding by viewBinding(ActivityAboutBinding::inflate)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
//binding.llAbout.background = filletBackground
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val fTag = "aboutFragment"
|
||||
var aboutFragment = supportFragmentManager.findFragmentByTag(fTag)
|
||||
if (aboutFragment == null) aboutFragment = AboutFragment()
|
||||
|
||||
@@ -46,7 +46,8 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||
|
||||
override val binding by viewBinding(ActivityReadRecordBinding::inflate)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
initView()
|
||||
initAllTime()
|
||||
initData()
|
||||
|
||||
@@ -59,7 +59,8 @@ class FileAssociationActivity :
|
||||
buildMainHandler()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding.rotateLoading.visible()
|
||||
viewModel.importBookLiveData.observe(this) { uri ->
|
||||
importBook(uri)
|
||||
|
||||
@@ -19,7 +19,8 @@ class OnLineImportActivity :
|
||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||
override val viewModel by viewModels<OnLineImportViewModel>()
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel.successLive.observe(this) {
|
||||
when (it.first) {
|
||||
"bookSource" -> showDialogFragment(
|
||||
|
||||
@@ -12,7 +12,8 @@ class OpenUrlConfirmActivity :
|
||||
|
||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
intent.getStringExtra("uri")?.let {
|
||||
val mimeType = intent.getStringExtra("mimeType")
|
||||
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
||||
|
||||
@@ -15,7 +15,8 @@ class VerificationCodeActivity :
|
||||
|
||||
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
intent.getStringExtra("imageUrl")?.let {
|
||||
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
||||
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)
|
||||
AudioPlay.register(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()
|
||||
lifecycleScope.launch {
|
||||
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)
|
||||
lifecycleScope.launch {
|
||||
binding.titleBar.subtitle = withContext(IO) {
|
||||
|
||||
@@ -28,7 +28,8 @@ class ExploreShowActivity : VMBaseActivity<ActivityExploreShowBinding, ExploreSh
|
||||
private val adapter by lazy { ExploreShowAdapter(this, 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")
|
||||
initRecyclerView()
|
||||
viewModel.booksData.observe(this) { upData(it) }
|
||||
|
||||
@@ -38,6 +38,7 @@ import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
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)
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
if (!goBackDir()) {
|
||||
@@ -166,7 +168,7 @@ class ImportBookActivity : BaseImportBookActivity<ImportBookViewModel>(),
|
||||
selectFolder.launch()
|
||||
} else {
|
||||
val rootUri = if (lastPath.isUri()) {
|
||||
Uri.parse(lastPath)
|
||||
lastPath.toUri()
|
||||
} else {
|
||||
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.LocalConfig
|
||||
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.ui.about.AppLogDialog
|
||||
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 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)
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
if (!goBackDir()) {
|
||||
|
||||
@@ -154,7 +154,8 @@ class BookInfoActivity :
|
||||
override val viewModel by viewModels<BookInfoViewModel>()
|
||||
|
||||
@SuppressLint("PrivateResource")
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setSupportActionBar(binding.topBar)
|
||||
|
||||
|
||||
@@ -46,7 +46,8 @@ class BookInfoEditActivity :
|
||||
override val binding by viewBinding(ActivityBookInfoEditBinding::inflate)
|
||||
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) }
|
||||
if (viewModel.bookData.value == null) {
|
||||
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)
|
||||
lifecycleScope.launch {
|
||||
viewModel.groupName = withContext(IO) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Looper
|
||||
import android.os.PersistableBundle
|
||||
import android.view.KeyEvent
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
@@ -152,9 +153,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
upLayoutInDisplayCutoutMode()
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
ReadManga.register(this)
|
||||
upSystemUiVisibility(false)
|
||||
initRecyclerView()
|
||||
|
||||
@@ -90,10 +90,7 @@ abstract class BaseReadBookActivity :
|
||||
}
|
||||
windowInsets
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
//binding.navigationBar.setBackgroundColor(bottomBackground)
|
||||
viewModel.permissionDenialLiveData.observe(this) {
|
||||
selectBookFolderResult.launch {
|
||||
mode = HandleFileContract.DIR_SYS
|
||||
|
||||
@@ -257,8 +257,8 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
private var syncDialog: AlertDialog? = null
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
//binding.cursorLeft.setColorFilter(accentColor)
|
||||
//binding.cursorRight.setColorFilter(accentColor)
|
||||
binding.cursorLeft.setOnTouchListener(this)
|
||||
|
||||
@@ -83,7 +83,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
||||
private var precisionSearchMenuItem: MenuItem? = null
|
||||
private var isManualStopSearch = false
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
//binding.llInputHelp.setBackgroundColor(backgroundColor)
|
||||
initRecyclerView()
|
||||
initSearchView()
|
||||
|
||||
@@ -58,7 +58,8 @@ class SearchContentActivity :
|
||||
private var searchJob: Job? = null
|
||||
private var initJob: Job? = null
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
// val bbg = bottomBackground
|
||||
// val btc = getPrimaryTextColor(ColorUtils.isColorLight(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()
|
||||
initSearchView()
|
||||
viewModel.init(intent.getStringExtra("key")) {
|
||||
|
||||
@@ -93,7 +93,8 @@ class BookSourceEditActivity :
|
||||
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
softKeyboardTool.attachToWindow(window)
|
||||
initView()
|
||||
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()
|
||||
initSearchView()
|
||||
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.isTabIndicatorFullWidth = false
|
||||
//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()
|
||||
initBottomActionBar()
|
||||
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.subtitle = intent.getStringExtra("sourceName")
|
||||
viewModel.initData(intent) {
|
||||
|
||||
@@ -15,7 +15,8 @@ class ConfigActivity : VMBaseActivity<ActivityConfigBinding, ConfigViewModel>()
|
||||
override val binding by viewBinding(ActivityConfigBinding::inflate)
|
||||
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")) {
|
||||
ConfigTag.OTHER_CONFIG -> replaceFragment<OtherConfigFragment>(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()
|
||||
initSelectActionView()
|
||||
observeDictRuleData()
|
||||
|
||||
@@ -44,7 +44,8 @@ class FileManageActivity : VMBaseActivity<ActivityFileManageBinding, FileManageV
|
||||
}
|
||||
private val currentFiles = arrayListOf<File>()
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
initView()
|
||||
initSearchView()
|
||||
viewModel.upFiles(viewModel.rootDoc)
|
||||
|
||||
@@ -59,7 +59,8 @@ class HandleFileActivity :
|
||||
} ?: finish()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mode = intent.getIntExtra("mode", 0)
|
||||
viewModel.errorLiveData.observe(this) {
|
||||
toastOnUi(it)
|
||||
|
||||
@@ -15,7 +15,8 @@ class SourceLoginActivity : VMBaseActivity<ActivitySourceLoginBinding, SourceLog
|
||||
override val binding by viewBinding(ActivitySourceLoginBinding::inflate)
|
||||
override val viewModel by viewModels<SourceLoginViewModel>()
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel.initData(intent) { source ->
|
||||
initView(source)
|
||||
}
|
||||
|
||||
@@ -89,20 +89,20 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
upBottomMenu()
|
||||
initView()
|
||||
upHomePage()
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
// 绑定返回键逻辑
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
if (pagePosition != 0) {
|
||||
binding.viewPagerMain.currentItem = 0
|
||||
return@addCallback
|
||||
}
|
||||
|
||||
(fragmentMap[getFragmentId(0)] as? BookshelfFragment2)?.let {
|
||||
if (it.back()) {
|
||||
return@addCallback
|
||||
}
|
||||
if (it.back()) return@addCallback
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() - exitTime > 2000) {
|
||||
toastOnUi(R.string.double_click_exit)
|
||||
exitTime = System.currentTimeMillis()
|
||||
@@ -114,6 +114,11 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 其他初始化逻辑
|
||||
upBottomMenu()
|
||||
initView()
|
||||
upHomePage()
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||
|
||||
@@ -1,25 +1,18 @@
|
||||
package io.legato.kazusa.ui.main.bookshelf
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.res.Configuration
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.google.android.material.chip.Chip
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.VMBaseFragment
|
||||
import io.legato.kazusa.constant.EventBus
|
||||
import io.legato.kazusa.data.appDb
|
||||
import io.legato.kazusa.data.entities.Book
|
||||
import io.legato.kazusa.data.entities.BookGroup
|
||||
import io.legato.kazusa.databinding.DialogBookshelfConfigBinding
|
||||
import io.legato.kazusa.databinding.DialogEditTextBinding
|
||||
import io.legato.kazusa.help.DirectLinkUpload
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.lib.dialogs.alert
|
||||
import io.legato.kazusa.ui.about.AppLogDialog
|
||||
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.widget.dialog.WaitDialog
|
||||
import io.legato.kazusa.utils.isAbsUrl
|
||||
import io.legato.kazusa.utils.postEvent
|
||||
import io.legato.kazusa.utils.readText
|
||||
import io.legato.kazusa.utils.sendToClip
|
||||
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_search -> startActivity<SearchActivity>()
|
||||
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_add_local -> startActivity<ImportBookActivity>()
|
||||
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) {
|
||||
alert(titleResource = R.string.import_bookshelf) {
|
||||
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.map
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Locale
|
||||
import kotlin.math.max
|
||||
|
||||
/**
|
||||
@@ -176,27 +177,25 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
appDb.bookDao.flowByGroup(groupId).map { list ->
|
||||
|
||||
//排序
|
||||
val isDescending = AppConfig.bookshelfSortOrder == 1
|
||||
|
||||
when (AppConfig.getBookSortByGroupId(groupId)) {
|
||||
1 -> list.sortedByDescending {
|
||||
it.latestChapterTime
|
||||
}
|
||||
1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
|
||||
else list.sortedBy { it.latestChapterTime }
|
||||
|
||||
2 -> list.sortedWith { o1, o2 ->
|
||||
o1.name.cnCompare(o2.name)
|
||||
}
|
||||
2 -> if (isDescending) list.sortedWith(compareByDescending { it.name.cnCompareKey() })
|
||||
else list.sortedWith(compareBy { it.name.cnCompareKey() })
|
||||
|
||||
3 -> list.sortedBy {
|
||||
it.order
|
||||
}
|
||||
3 -> if (isDescending) list.sortedByDescending { it.order }
|
||||
else list.sortedBy { it.order }
|
||||
|
||||
4 -> list.sortedByDescending {
|
||||
max(it.latestChapterTime, it.durChapterTime)
|
||||
}
|
||||
4 -> if (isDescending) list.sortedByDescending { max(it.latestChapterTime, it.durChapterTime) }
|
||||
else list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
|
||||
|
||||
else -> list.sortedByDescending {
|
||||
it.durChapterTime
|
||||
}
|
||||
else -> if (isDescending) list.sortedByDescending { it.durChapterTime }
|
||||
else list.sortedBy { it.durChapterTime }
|
||||
}
|
||||
|
||||
}.flowWithLifecycleAndDatabaseChangeFirst(
|
||||
viewLifecycleOwner.lifecycle,
|
||||
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 {
|
||||
if (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 qrCodeFragment = QrCodeFragment()
|
||||
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()
|
||||
initSearchView()
|
||||
initSelectActionView()
|
||||
|
||||
@@ -54,7 +54,8 @@ class ReplaceEditActivity :
|
||||
KeyboardToolPop(this, lifecycleScope, binding.root, this)
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
softKeyboardTool.attachToWindow(window)
|
||||
initView()
|
||||
viewModel.initData(intent) {
|
||||
|
||||
@@ -5,11 +5,9 @@ package io.legato.kazusa.ui.rss.article
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.viewModels
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
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.databinding.ActivityRssArtivlesBinding
|
||||
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.rss.source.edit.RssSourceEditActivity
|
||||
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)
|
||||
|
||||
viewModel.titleLiveData.observe(this) {
|
||||
|
||||
@@ -38,7 +38,8 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
||||
private var groupsMenu: SubMenu? = null
|
||||
private var currentGroup = ""
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
initView()
|
||||
upFragments()
|
||||
}
|
||||
|
||||
@@ -95,7 +95,8 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
||||
return viewModel.rssSource
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel.upStarMenuData.observe(this) { upStarMenu() }
|
||||
viewModel.upTtsMenuData.observe(this) { upTtsMenu(it) }
|
||||
binding.titleBar.title = intent.getStringExtra("title")
|
||||
|
||||
@@ -27,7 +27,8 @@ class RssSourceDebugActivity : VMBaseActivity<ActivitySourceDebugBinding, RssSou
|
||||
|
||||
private val adapter by lazy { RssSourceDebugAdapter(this) }
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
initRecyclerView()
|
||||
initSearchView()
|
||||
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)
|
||||
initView()
|
||||
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()
|
||||
initSearchView()
|
||||
initGroupFlow()
|
||||
|
||||
@@ -38,7 +38,8 @@ class RuleSubActivity : BaseActivity<ActivityRuleSubBinding>(),
|
||||
override val binding by viewBinding(ActivityRuleSubBinding::inflate)
|
||||
private val adapter by lazy { RuleSubAdapter(this, this) }
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
initView()
|
||||
initData()
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ open class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||
|
||||
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.vwTitleLine.setBackgroundColor(accentColor)
|
||||
// 避免从桌面启动程序后,会重新实例化入口类的activity
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="2dp" />
|
||||
<solid android:color="#CCCCCC" />
|
||||
<solid android:color="?attr/colorOnSurfaceVariant" />
|
||||
</shape>
|
||||
|
||||
@@ -27,7 +27,8 @@
|
||||
android:id="@+id/iv_cover"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="130dp"
|
||||
android:layout_margin="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:contentDescription="@string/img_cover"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="?attr/colorSurfaceVariant"
|
||||
@@ -74,7 +75,7 @@
|
||||
tools:ignore="RtlHardcoded" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/cb_enable_refresh"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -118,7 +119,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:text="@string/cancel" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -1,139 +1,222 @@
|
||||
<?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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
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
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:animateLayoutChanges="true"
|
||||
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
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/bottom_sheet_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/bookshelf_layout"
|
||||
android:layout_marginVertical="8dp"
|
||||
style="@style/ChapterNameText"/>
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw_show_unread"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_unread"
|
||||
tools:ignore="TouchTargetSizeCheck" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw_show_last_update_time"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_last_update_time"
|
||||
tools:ignore="TouchTargetSizeCheck" />
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
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
|
||||
android:id="@+id/sw_show_wait_up_books"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_wait_up_count"
|
||||
tools:ignore="TouchTargetSizeCheck" />
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw_show_last_update_time"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_last_update_time"
|
||||
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" />
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw_show_wait_up_books"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_wait_up_count"
|
||||
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
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp"
|
||||
android:text="@string/group_style"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="排列视图"
|
||||
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>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="排列视图"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold"
|
||||
android:paddingTop="8dp" />
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<com.google.android.material.chip.ChipGroup
|
||||
android:id="@+id/chip_group_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:singleSelection="true"
|
||||
app:selectionRequired="true"
|
||||
android:paddingBottom="8dp">
|
||||
app:selectionRequired="true">
|
||||
|
||||
<com.google.android.material.chip.Chip
|
||||
android:id="@+id/chip_list"
|
||||
style="@style/Widget.Material3.Chip.Filter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="列表" />
|
||||
|
||||
<com.google.android.material.chip.Chip
|
||||
android:id="@+id/chip_grid"
|
||||
style="@style/Widget.Material3.Chip.Filter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="网格" />
|
||||
</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
|
||||
android:id="@+id/slider_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
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" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="@string/sort"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<com.google.android.material.chip.ChipGroup
|
||||
android:id="@+id/chip_group_sort"
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/chipGroupOrder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:singleSelection="true"
|
||||
app:selectionRequired="true"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:orientation="horizontal" />
|
||||
app:singleSelection="true">
|
||||
|
||||
<com.google.android.material.chip.Chip
|
||||
android:layout_width="wrap_content"
|
||||
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>
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -4,13 +4,19 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="ifContentScrolls"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp">
|
||||
android:paddingVertical="8dp"
|
||||
android:paddingHorizontal="16dp">
|
||||
|
||||
<io.legato.kazusa.ui.widget.text.AutoCompleteTextView
|
||||
android:id="@+id/edit_view"
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||
android:layout_height="wrap_content">
|
||||
<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>
|
||||
@@ -7,6 +7,7 @@
|
||||
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
||||
<item name="popupMenuBackground">@drawable/popup_background</item>
|
||||
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
||||
<item name="chipStyle">@style/Widget.Material3.Chip.Filter</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -1,4 +1,4 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources >
|
||||
|
||||
//**************************************************************Theme******************************************************************************//
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
<item name="tabStyle">@style/Widget.App.TabLayout</item>
|
||||
<item name="popupMenuBackground">@drawable/popup_background</item>
|
||||
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
|
||||
<item name="chipStyle">@style/Widget.Material3.Chip.Filter</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Base.Dycolors" parent="Theme.Material3.DynamicColors.DayNight.NoActionBar">
|
||||
|
||||
Reference in New Issue
Block a user