详情页添加登录菜单

pull/995/head
gedoor 4 years ago
parent 9c0da1de98
commit 3a9d9c6eae
  1. 2
      app/src/main/AndroidManifest.xml
  2. 14
      app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt
  3. 16
      app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt
  4. 2
      app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt
  5. 5
      app/src/main/res/menu/book_info.xml

@ -286,7 +286,7 @@
android:launchMode="singleTop" /> android:launchMode="singleTop" />
<!-- 书源登录 --> <!-- 书源登录 -->
<activity <activity
android:name=".ui.login.SourceLogin" android:name=".ui.login.SourceLoginActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true" /> android:hardwareAccelerated="true" />
<!-- 阅读记录 --> <!-- 阅读记录 -->

@ -105,6 +105,14 @@ class BookInfoActivity :
return super.onCompatCreateOptionsMenu(menu) return super.onCompatCreateOptionsMenu(menu)
} }
override fun onMenuOpened(featureId: Int, menu: Menu): Boolean {
menu.findItem(R.id.menu_can_update)?.isChecked =
viewModel.bookData.value?.canUpdate ?: true
menu.findItem(R.id.menu_login)?.isVisible =
!viewModel.bookSource?.loginUrl.isNullOrBlank()
return super.onMenuOpened(featureId, menu)
}
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.menu_edit -> { R.id.menu_edit -> {
@ -156,12 +164,6 @@ class BookInfoActivity :
return super.onCompatOptionsItemSelected(item) return super.onCompatOptionsItemSelected(item)
} }
override fun onMenuOpened(featureId: Int, menu: Menu): Boolean {
menu.findItem(R.id.menu_can_update)?.isChecked =
viewModel.bookData.value?.canUpdate ?: true
return super.onMenuOpened(featureId, menu)
}
private fun showBook(book: Book) = with(binding) { private fun showBook(book: Book) = with(binding) {
showCover(book) showCover(book)
tvName.text = book.name tvName.text = book.name

@ -8,6 +8,7 @@ import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.BookSource
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
@ -19,6 +20,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
val chapterListData = MutableLiveData<List<BookChapter>>() val chapterListData = MutableLiveData<List<BookChapter>>()
var durChapterIndex = 0 var durChapterIndex = 0
var inBookshelf = false var inBookshelf = false
var bookSource: BookSource? = null
fun initData(intent: Intent) { fun initData(intent: Intent) {
execute { execute {
@ -36,6 +38,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
private fun setBook(book: Book) { private fun setBook(book: Book) {
durChapterIndex = book.durChapterIndex durChapterIndex = book.durChapterIndex
bookData.postValue(book) bookData.postValue(book)
initBookSource(book)
if (book.tocUrl.isEmpty()) { if (book.tocUrl.isEmpty()) {
loadBookInfo(book) loadBookInfo(book)
} else { } else {
@ -48,6 +51,14 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
} }
} }
private fun initBookSource(book: Book) {
bookSource = if (book.isLocalBook()) {
null
} else {
appDb.bookSourceDao.getBookSource(book.origin)
}
}
fun loadBookInfo( fun loadBookInfo(
book: Book, canReName: Boolean = true, book: Book, canReName: Boolean = true,
changeDruChapterIndex: ((chapters: List<BookChapter>) -> Unit)? = null, changeDruChapterIndex: ((chapters: List<BookChapter>) -> Unit)? = null,
@ -56,7 +67,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
if (book.isLocalBook()) { if (book.isLocalBook()) {
loadChapter(book, changeDruChapterIndex) loadChapter(book, changeDruChapterIndex)
} else { } else {
appDb.bookSourceDao.getBookSource(book.origin)?.let { bookSource -> bookSource?.let { bookSource ->
WebBook(bookSource).getBookInfo(this, book, canReName = canReName) WebBook(bookSource).getBookInfo(this, book, canReName = canReName)
.onSuccess(IO) { .onSuccess(IO) {
bookData.postValue(book) bookData.postValue(book)
@ -87,7 +98,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
chapterListData.postValue(it) chapterListData.postValue(it)
} }
} else { } else {
appDb.bookSourceDao.getBookSource(book.origin)?.let { bookSource -> bookSource?.let { bookSource ->
WebBook(bookSource).getChapterList(this, book) WebBook(bookSource).getChapterList(this, book)
.onSuccess(IO) { .onSuccess(IO) {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
@ -135,6 +146,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
} }
} }
bookData.postValue(newBook) bookData.postValue(newBook)
initBookSource(newBook)
if (newBook.tocUrl.isEmpty()) { if (newBook.tocUrl.isEmpty()) {
loadBookInfo(newBook, false) { loadBookInfo(newBook, false) {
upChangeDurChapterIndex(newBook, oldTocSize, it) upChangeDurChapterIndex(newBook, oldTocSize, it)

@ -15,7 +15,7 @@ import io.legado.app.help.http.CookieStore
import io.legado.app.utils.snackbar import io.legado.app.utils.snackbar
class SourceLogin : BaseActivity<ActivitySourceLoginBinding>() { class SourceLoginActivity : BaseActivity<ActivitySourceLoginBinding>() {
var sourceUrl: String? = null var sourceUrl: String? = null
var loginUrl: String? = null var loginUrl: String? = null

@ -19,6 +19,11 @@
android:title="@string/refresh" android:title="@string/refresh"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_login"
android:title="@string/login"
app:showAsAction="never" />
<item <item
android:id="@+id/menu_copy_book_url" android:id="@+id/menu_copy_book_url"
android:title="@string/copy_book_url" android:title="@string/copy_book_url"

Loading…
Cancel
Save