diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f82bca392..ab0489595 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -118,7 +118,6 @@ android:exported="true"> - diff --git a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt index 7fea81159..04c2cde8f 100644 --- a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt +++ b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt @@ -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( observeLiveBus() - onActivityCreated(savedInstanceState) + //onActivityCreated(savedInstanceState) } override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) { @@ -107,7 +97,7 @@ abstract class BaseActivity( // //setupSystemBar() // } - abstract fun onActivityCreated(savedInstanceState: Bundle?) + final override fun onCreateOptionsMenu(menu: Menu): Boolean { val bool = onCompatCreateOptionsMenu(menu) diff --git a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt index e44d01ce9..c117e3120 100644 --- a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt +++ b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt @@ -183,4 +183,5 @@ object PreferKey { const val contentSelectSpeakMod = "contentReadAloudMod" const val themePref = "themePref" + const val bookshelfSortOrder = "bookshelfSortOrder" } diff --git a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt index 3c7a8b132..7200342ed 100644 --- a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt +++ b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt @@ -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 diff --git a/app/src/main/java/io/legato/kazusa/ui/about/AboutActivity.kt b/app/src/main/java/io/legato/kazusa/ui/about/AboutActivity.kt index ac3470717..a6bb0b845 100644 --- a/app/src/main/java/io/legato/kazusa/ui/about/AboutActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/about/AboutActivity.kt @@ -20,8 +20,9 @@ class AboutActivity : BaseActivity() { 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() diff --git a/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt b/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt index d56630dfb..e0ccea883 100644 --- a/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/about/ReadRecordActivity.kt @@ -46,7 +46,8 @@ class ReadRecordActivity : BaseActivity() { override val binding by viewBinding(ActivityReadRecordBinding::inflate) - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) initView() initAllTime() initData() diff --git a/app/src/main/java/io/legato/kazusa/ui/association/FileAssociationActivity.kt b/app/src/main/java/io/legato/kazusa/ui/association/FileAssociationActivity.kt index e19657a80..ce0599ca8 100644 --- a/app/src/main/java/io/legato/kazusa/ui/association/FileAssociationActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/association/FileAssociationActivity.kt @@ -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) diff --git a/app/src/main/java/io/legato/kazusa/ui/association/OnLineImportActivity.kt b/app/src/main/java/io/legato/kazusa/ui/association/OnLineImportActivity.kt index 7370d0fcd..cbfeb1b19 100644 --- a/app/src/main/java/io/legato/kazusa/ui/association/OnLineImportActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/association/OnLineImportActivity.kt @@ -19,7 +19,8 @@ class OnLineImportActivity : override val binding by viewBinding(ActivityTranslucenceBinding::inflate) override val viewModel by viewModels() - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) viewModel.successLive.observe(this) { when (it.first) { "bookSource" -> showDialogFragment( diff --git a/app/src/main/java/io/legato/kazusa/ui/association/OpenUrlConfirmActivity.kt b/app/src/main/java/io/legato/kazusa/ui/association/OpenUrlConfirmActivity.kt index 39d5bdf3e..d3cd0d9d6 100644 --- a/app/src/main/java/io/legato/kazusa/ui/association/OpenUrlConfirmActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/association/OpenUrlConfirmActivity.kt @@ -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") diff --git a/app/src/main/java/io/legato/kazusa/ui/association/VerificationCodeActivity.kt b/app/src/main/java/io/legato/kazusa/ui/association/VerificationCodeActivity.kt index 71923b7bc..977765e54 100644 --- a/app/src/main/java/io/legato/kazusa/ui/association/VerificationCodeActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/association/VerificationCodeActivity.kt @@ -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") diff --git a/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt index 26ac9a324..50f18ad95 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/audio/AudioPlayActivity.kt @@ -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) { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/bookmark/AllBookmarkActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/bookmark/AllBookmarkActivity.kt index deb96629e..42487151c 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/bookmark/AllBookmarkActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/bookmark/AllBookmarkActivity.kt @@ -40,7 +40,8 @@ class AllBookmarkActivity : VMBaseActivity() } } - 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) { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/explore/ExploreShowActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/explore/ExploreShowActivity.kt index f2f1ff9da..5b8eb3dd0 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/explore/ExploreShowActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/explore/ExploreShowActivity.kt @@ -28,7 +28,8 @@ class ExploreShowActivity : VMBaseActivity(), } } - 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(), selectFolder.launch() } else { val rootUri = if (lastPath.isUri()) { - Uri.parse(lastPath) + lastPath.toUri() } else { Uri.fromFile(File(lastPath)) } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/import/remote/RemoteBookActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/import/remote/RemoteBookActivity.kt index 98f0b090a..9899e9e6b 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/import/remote/RemoteBookActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/import/remote/RemoteBookActivity.kt @@ -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(), 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()) { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt index 3c92ab1bc..53134bcba 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt @@ -154,7 +154,8 @@ class BookInfoActivity : override val viewModel by viewModels() @SuppressLint("PrivateResource") - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) setSupportActionBar(binding.topBar) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/edit/BookInfoEditActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/edit/BookInfoEditActivity.kt index fe900ba21..1b372a306 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/edit/BookInfoEditActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/edit/BookInfoEditActivity.kt @@ -46,7 +46,8 @@ class BookInfoEditActivity : override val binding by viewBinding(ActivityBookInfoEditBinding::inflate) override val viewModel by viewModels() - 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 { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manage/BookshelfManageActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/manage/BookshelfManageActivity.kt index b15747f5d..c28cdb3ac 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manage/BookshelfManageActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manage/BookshelfManageActivity.kt @@ -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) { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt index dc29c513e..7c716faff 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt @@ -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(), } } - 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) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/toc/rule/TxtTocRuleActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/toc/rule/TxtTocRuleActivity.kt index dd244bedb..d5ea5e233 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/toc/rule/TxtTocRuleActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/toc/rule/TxtTocRuleActivity.kt @@ -85,7 +85,8 @@ class TxtTocRuleActivity : VMBaseActivity() { } } - 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) { diff --git a/app/src/main/java/io/legato/kazusa/ui/config/ConfigActivity.kt b/app/src/main/java/io/legato/kazusa/ui/config/ConfigActivity.kt index 490b7a329..521e6d4b0 100644 --- a/app/src/main/java/io/legato/kazusa/ui/config/ConfigActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/config/ConfigActivity.kt @@ -15,7 +15,8 @@ class ConfigActivity : VMBaseActivity() override val binding by viewBinding(ActivityConfigBinding::inflate) override val viewModel by viewModels() - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) when (val configTag = intent.getStringExtra("configTag")) { ConfigTag.OTHER_CONFIG -> replaceFragment(configTag) ConfigTag.THEME_CONFIG -> replaceFragment(configTag) diff --git a/app/src/main/java/io/legato/kazusa/ui/dict/rule/DictRuleActivity.kt b/app/src/main/java/io/legato/kazusa/ui/dict/rule/DictRuleActivity.kt index 8e71a4138..727203c69 100644 --- a/app/src/main/java/io/legato/kazusa/ui/dict/rule/DictRuleActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/dict/rule/DictRuleActivity.kt @@ -86,7 +86,8 @@ class DictRuleActivity : VMBaseActivity() - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) initView() initSearchView() viewModel.upFiles(viewModel.rootDoc) diff --git a/app/src/main/java/io/legato/kazusa/ui/file/HandleFileActivity.kt b/app/src/main/java/io/legato/kazusa/ui/file/HandleFileActivity.kt index 7b4dc0321..effece344 100644 --- a/app/src/main/java/io/legato/kazusa/ui/file/HandleFileActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/file/HandleFileActivity.kt @@ -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) diff --git a/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginActivity.kt b/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginActivity.kt index ccb9158bf..996aac0fd 100644 --- a/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/login/SourceLoginActivity.kt @@ -15,7 +15,8 @@ class SourceLoginActivity : VMBaseActivity() - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) viewModel.initData(intent) { source -> initView(source) } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt index 529d74ff6..8c60eed42 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt @@ -89,20 +89,20 @@ class MainActivity : VMBaseActivity(), } - 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(), } } } + + // 其他初始化逻辑 + upBottomMenu() + initView() + upHomePage() } override fun dispatchTouchEvent(ev: MotionEvent): Boolean { diff --git a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BaseBookshelfFragment.kt b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BaseBookshelfFragment.kt index b8fd86bd8..8f8b4f982 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BaseBookshelfFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BaseBookshelfFragment.kt @@ -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 startActivity() R.id.menu_search -> startActivity() R.id.menu_update_toc -> activityViewModel.upToc(books) - R.id.menu_bookshelf_layout -> configBookshelf() + R.id.menu_bookshelf_layout -> showDialogFragment() R.id.menu_group_manage -> showDialogFragment() R.id.menu_add_local -> startActivity() R.id.menu_add_url -> showAddBookByUrlAlert() @@ -163,142 +155,6 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment 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 { diff --git a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BookshelfConfigBottomSheet.kt b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BookshelfConfigBottomSheet.kt new file mode 100644 index 000000000..c8ea23d73 --- /dev/null +++ b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/BookshelfConfigBottomSheet.kt @@ -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() + + 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() + } + } + } +} diff --git a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/style2/BookshelfFragment2.kt b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/style2/BookshelfFragment2.kt index 2d75a2d10..a171938f5 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/style2/BookshelfFragment2.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/bookshelf/style2/BookshelfFragment2.kt @@ -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 diff --git a/app/src/main/java/io/legato/kazusa/ui/qrcode/QrCodeActivity.kt b/app/src/main/java/io/legato/kazusa/ui/qrcode/QrCodeActivity.kt index 336f00f17..35e2fcfe4 100644 --- a/app/src/main/java/io/legato/kazusa/ui/qrcode/QrCodeActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/qrcode/QrCodeActivity.kt @@ -26,7 +26,8 @@ class QrCodeActivity : BaseActivity(), ScanResultC } } - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) val fTag = "qrCodeFragment" val qrCodeFragment = QrCodeFragment() supportFragmentManager.beginTransaction() diff --git a/app/src/main/java/io/legato/kazusa/ui/replace/ReplaceRuleActivity.kt b/app/src/main/java/io/legato/kazusa/ui/replace/ReplaceRuleActivity.kt index fd20c4ef9..0a17ca0c8 100644 --- a/app/src/main/java/io/legato/kazusa/ui/replace/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/replace/ReplaceRuleActivity.kt @@ -117,7 +117,8 @@ class ReplaceRuleActivity : VMBaseActivity() { private var groupsMenu: SubMenu? = null private var currentGroup = "" - override fun onActivityCreated(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) initView() upFragments() } diff --git a/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt index 3bbdd1b73..79d961f2c 100644 --- a/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt @@ -95,7 +95,8 @@ class ReadRssActivity : VMBaseActivity 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") diff --git a/app/src/main/java/io/legato/kazusa/ui/rss/source/debug/RssSourceDebugActivity.kt b/app/src/main/java/io/legato/kazusa/ui/rss/source/debug/RssSourceDebugActivity.kt index 44a44f240..b1cde42b0 100644 --- a/app/src/main/java/io/legato/kazusa/ui/rss/source/debug/RssSourceDebugActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/rss/source/debug/RssSourceDebugActivity.kt @@ -27,7 +27,8 @@ class RssSourceDebugActivity : VMBaseActivity diff --git a/app/src/main/java/io/legato/kazusa/ui/rss/source/edit/RssSourceEditActivity.kt b/app/src/main/java/io/legato/kazusa/ui/rss/source/edit/RssSourceEditActivity.kt index 013d6b6ed..b7503ed1c 100644 --- a/app/src/main/java/io/legato/kazusa/ui/rss/source/edit/RssSourceEditActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/rss/source/edit/RssSourceEditActivity.kt @@ -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) { diff --git a/app/src/main/java/io/legato/kazusa/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legato/kazusa/ui/rss/source/manage/RssSourceActivity.kt index a84564aaa..5d0647f8a 100644 --- a/app/src/main/java/io/legato/kazusa/ui/rss/source/manage/RssSourceActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/rss/source/manage/RssSourceActivity.kt @@ -107,7 +107,8 @@ class RssSourceActivity : VMBaseActivity(), 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() } diff --git a/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt b/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt index ba628f389..5227b349d 100644 --- a/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/welcome/WelcomeActivity.kt @@ -20,7 +20,8 @@ open class WelcomeActivity : BaseActivity() { 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 diff --git a/app/src/main/res/drawable/bg_bottom_sheet_handle.xml b/app/src/main/res/drawable/bg_bottom_sheet_handle.xml index 4a3321990..f4b6103a6 100644 --- a/app/src/main/res/drawable/bg_bottom_sheet_handle.xml +++ b/app/src/main/res/drawable/bg_bottom_sheet_handle.xml @@ -2,5 +2,5 @@ - + diff --git a/app/src/main/res/layout/dialog_book_group_edit.xml b/app/src/main/res/layout/dialog_book_group_edit.xml index b44a2fcd5..bea1373fd 100644 --- a/app/src/main/res/layout/dialog_book_group_edit.xml +++ b/app/src/main/res/layout/dialog_book_group_edit.xml @@ -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" /> - - + android:fillViewport="true" + android:paddingHorizontal="16dp" + android:paddingVertical="8dp" + android:orientation="vertical"> + android:gravity="center" + android:paddingVertical="8dp" + android:paddingHorizontal="16dp"> + + + android:textSize="18sp" + android:textStyle="bold" /> - + - + - + - + + + + + + + + + + - - - - + + app:selectionRequired="true"> + + + + + + + + - - - - + + + app:singleSelection="true"> + + + + + + + + + + + + + + + + - + + diff --git a/app/src/main/res/layout/dialog_edit_text.xml b/app/src/main/res/layout/dialog_edit_text.xml index 8808b1e8f..4561bd1ce 100644 --- a/app/src/main/res/layout/dialog_edit_text.xml +++ b/app/src/main/res/layout/dialog_edit_text.xml @@ -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"> - + android:layout_height="wrap_content"> + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index c52f87714..6f4f60dad 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -7,6 +7,7 @@ @style/Widget.App.TabLayout @drawable/popup_background @style/AppTheme.AlertDialog + @style/Widget.Material3.Chip.Filter \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 309c682d4..43ff69707 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,4 @@ - + //**************************************************************Theme******************************************************************************// @@ -19,6 +19,7 @@ @style/Widget.App.TabLayout @drawable/popup_background @style/AppTheme.AlertDialog + @style/Widget.Material3.Chip.Filter