From 0ce96c1f0d55d88b60ff946bf92ac9a09af9305c Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Wed, 14 Jan 2026 01:27:56 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E5=9C=A8=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E5=B8=83=E5=B1=80=E8=BF=9B=E5=85=A5=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E6=97=B6=EF=BC=8C=E4=B8=BA=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=8C=89=E9=92=AE=EF=BC=8C=E4=BB=A5=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=9F=90=E4=BA=9B=E8=AE=BE=E5=A4=87=E4=B8=8A=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E8=BF=94=E5=9B=9E=E8=87=B3=E9=A1=B6=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/main/MainActivity.kt | 46 ++++++++++++++++--- .../bookshelf/books/BookshelfFragment2.kt | 13 ++++-- gradle/libs.versions.toml | 2 +- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 97f165200..67a889854 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -9,7 +9,6 @@ import android.os.Bundle import android.text.format.DateUtils import android.view.Gravity import android.view.MenuItem -import android.view.MotionEvent import android.widget.FrameLayout import android.widget.ImageView import androidx.activity.OnBackPressedCallback @@ -33,6 +32,7 @@ import io.legado.app.base.VMBaseActivity import io.legado.app.constant.AppConst.appInfo import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey +import io.legado.app.data.entities.BookGroup import io.legado.app.databinding.ActivityMainBinding import io.legado.app.help.AppWebDav import io.legado.app.help.book.BookHelp @@ -58,10 +58,8 @@ import io.legado.app.ui.welcome.WelcomeActivity import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.utils.getPrefBoolean import io.legado.app.utils.gone -import io.legado.app.utils.hideSoftInput import io.legado.app.utils.observeEvent import io.legado.app.utils.setNavigationBarColorAuto -import io.legado.app.utils.shouldHideSoftInput import io.legado.app.utils.showDialogFragment import io.legado.app.utils.startActivity import io.legado.app.utils.themeColor @@ -183,10 +181,15 @@ open class MainActivity : VMBaseActivity(), override fun onNavigationItemReselected(item: MenuItem) { when (item.itemId) { R.id.menu_bookshelf -> { - if (System.currentTimeMillis() - bookshelfReselected > 300) { - bookshelfReselected = System.currentTimeMillis() + val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2 + if (fragment != null && fragment.groupId != BookGroup.IdRoot) { + fragment.back() } else { - (fragmentMap[getFragmentId(0)] as? BaseBookshelfFragment)?.gotoTop() + if (System.currentTimeMillis() - bookshelfReselected > 300) { + bookshelfReselected = System.currentTimeMillis() + } else { + fragment?.gotoTop() + } } } @@ -341,6 +344,7 @@ open class MainActivity : VMBaseActivity(), observeEvent(EventBus.NOTIFY_MAIN) { binding.apply { upBottomMenu() + updateBookshelfIcon(true) if (it) { viewPagerMain.setCurrentItem(bottomMenuCount - 1, false) } @@ -474,6 +478,22 @@ open class MainActivity : VMBaseActivity(), } + private fun updateBookshelfIcon(isRoot: Boolean) { + val navView = getNavigationBarView() + val bookshelfMenuItem = navView.menu.findItem(R.id.menu_bookshelf) ?: return + + if (isRoot) { + bookshelfMenuItem.setIcon(R.drawable.ic_bottom_books) + } else { + val currentFragment = fragmentMap[getFragmentId(0)] + if (currentFragment is BookshelfFragment2) { + bookshelfMenuItem.setIcon(R.drawable.ic_arrow_back) + } else { + bookshelfMenuItem.setIcon(R.drawable.ic_bottom_books) + } + } + } + private fun upHomePage() { when (AppConfig.defaultHomePage) { "bookshelf" -> {} @@ -515,6 +535,12 @@ open class MainActivity : VMBaseActivity(), idMy -> R.id.menu_my_config else -> R.id.menu_bookshelf } + if (position == 0) { + val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2 + updateBookshelfIcon(fragment?.groupId == BookGroup.IdRoot) + } else { + updateBookshelfIcon(true) + } updateBackCallbackState() } } @@ -532,7 +558,13 @@ open class MainActivity : VMBaseActivity(), override fun createFragment(position: Int): Fragment { val fragment = when (getFragmentId(position)) { idBookshelf1 -> BookshelfFragment1(position) - idBookshelf2 -> BookshelfFragment2(position) + idBookshelf2 -> BookshelfFragment2(position).apply { + this.onGroupIdChangedListener = { isRoot -> + if (pagePosition == 0) { + updateBookshelfIcon(isRoot) + } + } + } idBookshelf3 -> BookshelfFragment3(position) idBookshelf4 -> BookshelfFragment4(position) idExplore -> ExploreFragment(position) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt index 0a0b86f50..50a677779 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt @@ -54,7 +54,6 @@ import io.legado.app.utils.startActivityForBook import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.flowOn @@ -111,6 +110,8 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) } } + var onGroupIdChangedListener: ((isRoot: Boolean) -> Unit)? = null + private var bookGroups: List = emptyList() private var booksFlowJob: Job? = null override var groupId = BookGroup.Companion.IdRoot @@ -138,9 +139,15 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback) } + override fun onDestroyView() { + onGroupIdChangedListener?.invoke(true) + super.onDestroyView() + } + private fun updateBackCallbackState() { - //每次进出书架时,判断是否启用回调 - backCallback.isEnabled = groupId != BookGroup.IdRoot + val isRoot = groupId == BookGroup.IdRoot + backCallback.isEnabled = !isRoot + onGroupIdChangedListener?.invoke(isRoot) } @Suppress("UNCHECKED_CAST") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 09107c315..bc48df348 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ datastorePreferences = "1.2.0" foundation = "1.10.0" kotlin = "2.3.0" kotlinxCoroutinesAndroid = "1.10.2" -ksp = "2.2.21-2.0.4" +ksp = "2.3.4" agp = "8.13.2" appcompat = "1.7.1" colorpicker = "1.1.0"