[修复] 在文件夹布局进入文件夹时,为底部图标添加一个返回按钮,以解决某些设备上无法正确返回至顶的问题
This commit is contained in:
3 files changed
+50
-11
No files matched your search
@@ -9,7 +9,6 @@ import android.os.Bundle
|
|||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.MotionEvent
|
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.activity.OnBackPressedCallback
|
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.AppConst.appInfo
|
||||||
import io.legado.app.constant.EventBus
|
import io.legado.app.constant.EventBus
|
||||||
import io.legado.app.constant.PreferKey
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.data.entities.BookGroup
|
||||||
import io.legado.app.databinding.ActivityMainBinding
|
import io.legado.app.databinding.ActivityMainBinding
|
||||||
import io.legado.app.help.AppWebDav
|
import io.legado.app.help.AppWebDav
|
||||||
import io.legado.app.help.book.BookHelp
|
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.ui.widget.dialog.TextDialog
|
||||||
import io.legado.app.utils.getPrefBoolean
|
import io.legado.app.utils.getPrefBoolean
|
||||||
import io.legado.app.utils.gone
|
import io.legado.app.utils.gone
|
||||||
import io.legado.app.utils.hideSoftInput
|
|
||||||
import io.legado.app.utils.observeEvent
|
import io.legado.app.utils.observeEvent
|
||||||
import io.legado.app.utils.setNavigationBarColorAuto
|
import io.legado.app.utils.setNavigationBarColorAuto
|
||||||
import io.legado.app.utils.shouldHideSoftInput
|
|
||||||
import io.legado.app.utils.showDialogFragment
|
import io.legado.app.utils.showDialogFragment
|
||||||
import io.legado.app.utils.startActivity
|
import io.legado.app.utils.startActivity
|
||||||
import io.legado.app.utils.themeColor
|
import io.legado.app.utils.themeColor
|
||||||
@@ -183,10 +181,15 @@ open class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
override fun onNavigationItemReselected(item: MenuItem) {
|
override fun onNavigationItemReselected(item: MenuItem) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.menu_bookshelf -> {
|
R.id.menu_bookshelf -> {
|
||||||
if (System.currentTimeMillis() - bookshelfReselected > 300) {
|
val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2
|
||||||
bookshelfReselected = System.currentTimeMillis()
|
if (fragment != null && fragment.groupId != BookGroup.IdRoot) {
|
||||||
|
fragment.back()
|
||||||
} else {
|
} 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<ActivityMainBinding, MainViewModel>(),
|
|||||||
observeEvent<Boolean>(EventBus.NOTIFY_MAIN) {
|
observeEvent<Boolean>(EventBus.NOTIFY_MAIN) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
upBottomMenu()
|
upBottomMenu()
|
||||||
|
updateBookshelfIcon(true)
|
||||||
if (it) {
|
if (it) {
|
||||||
viewPagerMain.setCurrentItem(bottomMenuCount - 1, false)
|
viewPagerMain.setCurrentItem(bottomMenuCount - 1, false)
|
||||||
}
|
}
|
||||||
@@ -474,6 +478,22 @@ open class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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() {
|
private fun upHomePage() {
|
||||||
when (AppConfig.defaultHomePage) {
|
when (AppConfig.defaultHomePage) {
|
||||||
"bookshelf" -> {}
|
"bookshelf" -> {}
|
||||||
@@ -515,6 +535,12 @@ open class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
idMy -> R.id.menu_my_config
|
idMy -> R.id.menu_my_config
|
||||||
else -> R.id.menu_bookshelf
|
else -> R.id.menu_bookshelf
|
||||||
}
|
}
|
||||||
|
if (position == 0) {
|
||||||
|
val fragment = fragmentMap[getFragmentId(0)] as? BookshelfFragment2
|
||||||
|
updateBookshelfIcon(fragment?.groupId == BookGroup.IdRoot)
|
||||||
|
} else {
|
||||||
|
updateBookshelfIcon(true)
|
||||||
|
}
|
||||||
updateBackCallbackState()
|
updateBackCallbackState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -532,7 +558,13 @@ open class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
|||||||
override fun createFragment(position: Int): Fragment {
|
override fun createFragment(position: Int): Fragment {
|
||||||
val fragment = when (getFragmentId(position)) {
|
val fragment = when (getFragmentId(position)) {
|
||||||
idBookshelf1 -> BookshelfFragment1(position)
|
idBookshelf1 -> BookshelfFragment1(position)
|
||||||
idBookshelf2 -> BookshelfFragment2(position)
|
idBookshelf2 -> BookshelfFragment2(position).apply {
|
||||||
|
this.onGroupIdChangedListener = { isRoot ->
|
||||||
|
if (pagePosition == 0) {
|
||||||
|
updateBookshelfIcon(isRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
idBookshelf3 -> BookshelfFragment3(position)
|
idBookshelf3 -> BookshelfFragment3(position)
|
||||||
idBookshelf4 -> BookshelfFragment4(position)
|
idBookshelf4 -> BookshelfFragment4(position)
|
||||||
idExplore -> ExploreFragment(position)
|
idExplore -> ExploreFragment(position)
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ import io.legado.app.utils.startActivityForBook
|
|||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
import kotlinx.coroutines.flow.flowOn
|
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<BookGroup> = emptyList()
|
private var bookGroups: List<BookGroup> = emptyList()
|
||||||
private var booksFlowJob: Job? = null
|
private var booksFlowJob: Job? = null
|
||||||
override var groupId = BookGroup.Companion.IdRoot
|
override var groupId = BookGroup.Companion.IdRoot
|
||||||
@@ -138,9 +139,15 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback)
|
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
onGroupIdChangedListener?.invoke(true)
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateBackCallbackState() {
|
private fun updateBackCallbackState() {
|
||||||
//每次进出书架时,判断是否启用回调
|
val isRoot = groupId == BookGroup.IdRoot
|
||||||
backCallback.isEnabled = groupId != BookGroup.IdRoot
|
backCallback.isEnabled = !isRoot
|
||||||
|
onGroupIdChangedListener?.invoke(isRoot)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ datastorePreferences = "1.2.0"
|
|||||||
foundation = "1.10.0"
|
foundation = "1.10.0"
|
||||||
kotlin = "2.3.0"
|
kotlin = "2.3.0"
|
||||||
kotlinxCoroutinesAndroid = "1.10.2"
|
kotlinxCoroutinesAndroid = "1.10.2"
|
||||||
ksp = "2.2.21-2.0.4"
|
ksp = "2.3.4"
|
||||||
agp = "8.13.2"
|
agp = "8.13.2"
|
||||||
appcompat = "1.7.1"
|
appcompat = "1.7.1"
|
||||||
colorpicker = "1.1.0"
|
colorpicker = "1.1.0"
|
||||||
|
|||||||
Reference in new issue
Block a user