[修复] 在文件夹布局进入文件夹时,为底部图标添加一个返回按钮,以解决某些设备上无法正确返回至顶的问题
This commit is contained in:
@@ -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<ActivityMainBinding, MainViewModel>(),
|
||||
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<ActivityMainBinding, MainViewModel>(),
|
||||
observeEvent<Boolean>(EventBus.NOTIFY_MAIN) {
|
||||
binding.apply {
|
||||
upBottomMenu()
|
||||
updateBookshelfIcon(true)
|
||||
if (it) {
|
||||
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() {
|
||||
when (AppConfig.defaultHomePage) {
|
||||
"bookshelf" -> {}
|
||||
@@ -515,6 +535,12 @@ open class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
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<ActivityMainBinding, MainViewModel>(),
|
||||
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)
|
||||
|
||||
@@ -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<BookGroup> = 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")
|
||||
|
||||
Reference in New Issue
Block a user