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"