mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
修复UI的bug,修改添加网址的order
This commit is contained in:
@@ -147,6 +147,7 @@
|
||||
<!-- 主界面 -->
|
||||
<activity
|
||||
android:name=".ui.main.MainActivity"
|
||||
android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|uiMode"
|
||||
android:alwaysRetainTaskState="true"
|
||||
android:launchMode="singleTask" />
|
||||
<!-- 阅读界面 -->
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.legado.app
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.os.Build
|
||||
import androidx.multidex.MultiDexApplication
|
||||
@@ -28,8 +29,11 @@ import java.util.concurrent.TimeUnit
|
||||
|
||||
class App : MultiDexApplication() {
|
||||
|
||||
private lateinit var oldConfig: Configuration
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
oldConfig = Configuration(resources.configuration)
|
||||
CrashHandler(this)
|
||||
//预下载Cronet so
|
||||
CronetLoader.preDownload()
|
||||
@@ -69,10 +73,11 @@ class App : MultiDexApplication() {
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
when (newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
|
||||
Configuration.UI_MODE_NIGHT_YES,
|
||||
Configuration.UI_MODE_NIGHT_NO -> applyDayNight(this)
|
||||
val diff = newConfig.diff(oldConfig)
|
||||
if ((diff and ActivityInfo.CONFIG_UI_MODE) != 0) {
|
||||
applyDayNight(this)
|
||||
}
|
||||
oldConfig = Configuration(newConfig)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,7 +50,7 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application)
|
||||
)
|
||||
WebBook.getBookInfo(this, bookSource, book)
|
||||
.onSuccess(IO) {
|
||||
it.order = appDb.bookDao.maxOrder + 1
|
||||
it.order = appDb.bookDao.minOrder - 1
|
||||
it.save()
|
||||
successCount++
|
||||
}.onError {
|
||||
|
||||
@@ -59,10 +59,12 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
}
|
||||
}
|
||||
private var booksFlowJob: Job? = null
|
||||
private var savedInstanceState: Bundle? = null
|
||||
private var position = 0
|
||||
private var groupId = -1L
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
this.savedInstanceState = savedInstanceState
|
||||
arguments?.let {
|
||||
position = it.getInt("position", 0)
|
||||
groupId = it.getLong("groupId", -1)
|
||||
@@ -126,11 +128,25 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
}.conflate().collect { list ->
|
||||
binding.tvEmptyMsg.isGone = list.isNotEmpty()
|
||||
booksAdapter.setItems(list)
|
||||
recoverPositionState()
|
||||
delay(100)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun recoverPositionState() {
|
||||
// 恢复书架位置状态
|
||||
if (savedInstanceState?.getBoolean("needRecoverState") == true) {
|
||||
val layoutManager = binding.rvBookshelf.layoutManager
|
||||
if (layoutManager is LinearLayoutManager) {
|
||||
val leavePosition = savedInstanceState!!.getInt("leavePosition")
|
||||
val leaveOffset = savedInstanceState!!.getInt("leaveOffset")
|
||||
layoutManager.scrollToPositionWithOffset(leavePosition, leaveOffset)
|
||||
}
|
||||
savedInstanceState!!.putBoolean("needRecoverState", false)
|
||||
}
|
||||
}
|
||||
|
||||
fun getBooks(): List<Book> {
|
||||
return booksAdapter.getItems()
|
||||
}
|
||||
@@ -147,6 +163,28 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
return booksAdapter.itemCount
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
// 保存书架位置状态
|
||||
val layoutManager = binding.rvBookshelf.layoutManager
|
||||
if (layoutManager is LinearLayoutManager) {
|
||||
val itemPosition = layoutManager.findFirstVisibleItemPosition()
|
||||
val currentView = layoutManager.findViewByPosition(itemPosition)
|
||||
val viewOffset = currentView?.top
|
||||
if (viewOffset != null) {
|
||||
outState.putInt("leavePosition", itemPosition)
|
||||
outState.putInt("leaveOffset", viewOffset)
|
||||
outState.putBoolean("needRecoverState", true)
|
||||
} else if (savedInstanceState != null) {
|
||||
val leavePosition = savedInstanceState!!.getInt("leavePosition")
|
||||
val leaveOffset = savedInstanceState!!.getInt("leaveOffset")
|
||||
outState.putInt("leavePosition", leavePosition)
|
||||
outState.putInt("leaveOffset", leaveOffset)
|
||||
outState.putBoolean("needRecoverState", true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun open(book: Book) {
|
||||
when (book.type) {
|
||||
BookType.audio ->
|
||||
|
||||
Reference in New Issue
Block a user