This commit is contained in:
Horis
2025-04-12 17:53:55 +08:00
parent bd2f84432c
commit ce46b3c868
9 changed files with 47 additions and 69 deletions
@@ -19,15 +19,13 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryTextColor import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.utils.applyNavigationBarPadding import io.legado.app.utils.applyNavigationBarPadding
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare import io.legado.app.utils.cnCompare
import io.legado.app.utils.getInt import io.legado.app.utils.getInt
import io.legado.app.utils.putInt import io.legado.app.utils.putInt
import io.legado.app.utils.startReadOrMangaActivity import io.legado.app.utils.startActivityForBook
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -193,9 +191,7 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
if (book == null) { if (book == null) {
SearchActivity.start(this@ReadRecordActivity, item.bookName) SearchActivity.start(this@ReadRecordActivity, item.bookName)
} else { } else {
startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) { startActivityForBook(book)
putExtra("bookUrl", book.bookUrl)
}
} }
} }
} }
@@ -15,8 +15,6 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.Permissions
import io.legado.app.lib.permission.PermissionsCompat import io.legado.app.lib.permission.PermissionsCompat
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
import io.legado.app.utils.buildMainHandler import io.legado.app.utils.buildMainHandler
@@ -27,7 +25,7 @@ import io.legado.app.utils.isContentScheme
import io.legado.app.utils.readUri import io.legado.app.utils.readUri
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.startReadOrMangaActivity import io.legado.app.utils.startActivityForBook
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -92,9 +90,7 @@ class FileAssociationActivity :
} }
viewModel.openBookLiveData.observe(this) { viewModel.openBookLiveData.observe(this) {
binding.rotateLoading.gone() binding.rotateLoading.gone()
startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(it) { startActivityForBook(it)
putExtra("bookUrl", it.bookUrl)
}
finish() finish()
} }
viewModel.notSupportedLiveData.observe(this) { data -> viewModel.notSupportedLiveData.observe(this) { data ->
@@ -159,7 +155,9 @@ class FileAssociationActivity :
val treeDoc = val treeDoc =
DocumentFile.fromTreeUri(this@FileAssociationActivity, treeUri) DocumentFile.fromTreeUri(this@FileAssociationActivity, treeUri)
if (!treeDoc!!.checkWrite()) { if (!treeDoc!!.checkWrite()) {
throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial") throw InvalidBooksDirException(
"请重新设置书籍保存位置\nPermission Denial"
)
} }
readUri(uri) { fileDoc, inputStream -> readUri(uri) { fileDoc, inputStream ->
val name = fileDoc.name val name = fileDoc.name
@@ -167,7 +165,9 @@ class FileAssociationActivity :
if (doc == null || fileDoc.lastModified > doc.lastModified()) { if (doc == null || fileDoc.lastModified > doc.lastModified()) {
if (doc == null) { if (doc == null) {
doc = treeDoc.createFile(FileUtils.getMimeType(name), name) doc = treeDoc.createFile(FileUtils.getMimeType(name), name)
?: throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial") ?: throw InvalidBooksDirException(
"请重新设置书籍保存位置\nPermission Denial"
)
} }
contentResolver.openOutputStream(doc.uri)!!.use { oStream -> contentResolver.openOutputStream(doc.uri)!!.use { oStream ->
inputStream.copyTo(oStream) inputStream.copyTo(oStream)
@@ -179,7 +179,9 @@ class FileAssociationActivity :
} else { } else {
val treeFile = File(treeUri.path ?: treeUri.toString()) val treeFile = File(treeUri.path ?: treeUri.toString())
if (!treeFile.checkWrite()) { if (!treeFile.checkWrite()) {
throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial") throw InvalidBooksDirException(
"请重新设置书籍保存位置\nPermission Denial"
)
} }
readUri(uri) { fileDoc, inputStream -> readUri(uri) { fileDoc, inputStream ->
val name = fileDoc.name val name = fileDoc.name
@@ -31,8 +31,6 @@ import io.legado.app.model.BookCover
import io.legado.app.service.AudioPlayService import io.legado.app.service.AudioPlayService
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.changesource.ChangeBookSourceDialog import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.book.toc.TocActivityResult
import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.login.SourceLoginActivity
@@ -46,7 +44,7 @@ import io.legado.app.utils.observeEventSticky
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
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.startReadOrMangaActivity import io.legado.app.utils.startActivityForBook
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible import io.legado.app.utils.visible
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -220,9 +218,7 @@ class AudioPlayActivity :
AudioPlay.book?.delete() AudioPlay.book?.delete()
appDb.bookDao.insert(book) appDb.bookDao.insert(book)
} }
startReadOrMangaActivity<ReadBookActivity,ReadMangaActivity>(book) { startActivityForBook(book)
putExtra("bookUrl", book.bookUrl)
}
finish() finish()
} }
} }
@@ -15,15 +15,13 @@ import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.primaryTextColor import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.utils.ArchiveUtils import io.legado.app.utils.ArchiveUtils
import io.legado.app.utils.FileDoc import io.legado.app.utils.FileDoc
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.hideSoftInput import io.legado.app.utils.hideSoftInput
import io.legado.app.utils.shouldHideSoftInput import io.legado.app.utils.shouldHideSoftInput
import io.legado.app.utils.startReadOrMangaActivity import io.legado.app.utils.startActivityForBook
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlin.coroutines.resume import kotlin.coroutines.resume
@@ -99,9 +97,7 @@ abstract class BaseImportBookActivity<VM : ViewModel> : VMBaseActivity<ActivityI
abstract fun onSearchTextChange(newText: String?) abstract fun onSearchTextChange(newText: String?)
protected fun startReadBook(book: Book) { protected fun startReadBook(book: Book) {
startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) { startActivityForBook(book)
putExtra("bookUrl", book.bookUrl)
}
} }
protected fun onArchiveFileClick(fileDoc: FileDoc) { protected fun onArchiveFileClick(fileDoc: FileDoc) {
@@ -67,7 +67,6 @@ import io.legado.app.receiver.NetworkChangedListener
import io.legado.app.receiver.TimeBatteryReceiver import io.legado.app.receiver.TimeBatteryReceiver
import io.legado.app.service.BaseReadAloudService import io.legado.app.service.BaseReadAloudService
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.bookmark.BookmarkDialog import io.legado.app.ui.book.bookmark.BookmarkDialog
import io.legado.app.ui.book.changesource.ChangeBookSourceDialog import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
import io.legado.app.ui.book.changesource.ChangeChapterSourceDialog import io.legado.app.ui.book.changesource.ChangeChapterSourceDialog
@@ -121,6 +120,7 @@ import io.legado.app.utils.postEvent
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.startActivityForBook
import io.legado.app.utils.sysScreenOffTime import io.legado.app.utils.sysScreenOffTime
import io.legado.app.utils.throttle import io.legado.app.utils.throttle
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
@@ -1091,9 +1091,7 @@ class ReadBookActivity : BaseReadBookActivity(),
ReadBook.book?.delete() ReadBook.book?.delete()
appDb.bookDao.insert(book) appDb.bookDao.insert(book)
} }
startActivity<AudioPlayActivity> { startActivityForBook(book)
putExtra("bookUrl", book.bookUrl)
}
finish() finish()
} }
} }
@@ -22,21 +22,17 @@ 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.BookGroup import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.FragmentBooksBinding import io.legado.app.databinding.FragmentBooksBinding
import io.legado.app.help.book.isAudio
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.info.BookInfoActivity import io.legado.app.ui.book.info.BookInfoActivity
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.main.MainViewModel import io.legado.app.ui.main.MainViewModel
import io.legado.app.utils.cnCompare import io.legado.app.utils.cnCompare
import io.legado.app.utils.flowWithLifecycleAndDatabaseChangeFirst import io.legado.app.utils.flowWithLifecycleAndDatabaseChangeFirst
import io.legado.app.utils.observeEvent import io.legado.app.utils.observeEvent
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.startReadOrMangaActivity 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
@@ -243,16 +239,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
} }
override fun open(book: Book) { override fun open(book: Book) {
when { startActivityForBook(book)
book.isAudio ->
startActivity<AudioPlayActivity> {
putExtra("bookUrl", book.bookUrl)
}
else -> startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) {
putExtra("bookUrl", book.bookUrl)
}
}
} }
override fun openBookInfo(book: Book) { override fun openBookInfo(book: Book) {
@@ -18,15 +18,11 @@ 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.BookGroup import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.FragmentBookshelf2Binding import io.legado.app.databinding.FragmentBookshelf2Binding
import io.legado.app.help.book.isAudio
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.group.GroupEditDialog import io.legado.app.ui.book.group.GroupEditDialog
import io.legado.app.ui.book.info.BookInfoActivity import io.legado.app.ui.book.info.BookInfoActivity
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment
import io.legado.app.utils.cnCompare import io.legado.app.utils.cnCompare
@@ -35,7 +31,7 @@ import io.legado.app.utils.observeEvent
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
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.startReadOrMangaActivity 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
@@ -213,16 +209,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
override fun onItemClick(item: Any) { override fun onItemClick(item: Any) {
when (item) { when (item) {
is Book -> when { is Book -> startActivityForBook(item)
item.isAudio ->
startActivity<AudioPlayActivity> {
putExtra("bookUrl", item.bookUrl)
}
else -> startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(item) {
putExtra("bookUrl", item.bookUrl)
}
}
is BookGroup -> { is BookGroup -> {
groupId = item.groupId groupId = item.groupId
@@ -40,8 +40,12 @@ import io.legado.app.R
import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.help.IntentHelp import io.legado.app.help.IntentHelp
import io.legado.app.help.book.isAudio
import io.legado.app.help.book.isImage import io.legado.app.help.book.isImage
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import splitties.systemservices.clipboardManager import splitties.systemservices.clipboardManager
import splitties.systemservices.connectivityManager import splitties.systemservices.connectivityManager
import splitties.systemservices.uiModeManager import splitties.systemservices.uiModeManager
@@ -56,13 +60,18 @@ inline fun <reified A : Activity> Context.startActivity(configIntent: Intent.()
startActivity(intent) startActivity(intent)
} }
inline fun <reified A : Activity, reified M : Activity> Context.startReadOrMangaActivity( fun Context.startActivityForBook(
book: Book, book: Book,
configIntent: Intent.() -> Unit = {}, configIntent: Intent.() -> Unit = {},
) { ) {
val intent = val cls = when {
Intent(this, if (book.isImage && AppConfig.showMangaUi) M::class.java else A::class.java) book.isAudio -> AudioPlayActivity::class.java
book.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java
else -> ReadBookActivity::class.java
}
val intent = Intent(this, cls)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("bookUrl", book.bookUrl)
intent.apply(configIntent) intent.apply(configIntent)
startActivity(intent) startActivity(intent)
} }
@@ -15,8 +15,12 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import io.legado.app.R import io.legado.app.R
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.help.book.isAudio
import io.legado.app.help.book.isImage import io.legado.app.help.book.isImage
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.manga.ReadMangaActivity
import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
inline fun <reified T : DialogFragment> Fragment.showDialogFragment( inline fun <reified T : DialogFragment> Fragment.showDialogFragment(
@@ -84,15 +88,18 @@ inline fun <reified T : Activity> Fragment.startActivity(
startActivity(Intent(requireContext(), T::class.java).apply(configIntent)) startActivity(Intent(requireContext(), T::class.java).apply(configIntent))
} }
inline fun <reified A : Activity, reified M : Activity> Fragment.startReadOrMangaActivity( fun Fragment.startActivityForBook(
book: Book, book: Book,
configIntent: Intent.() -> Unit = {}, configIntent: Intent.() -> Unit = {},
) { ) {
val intent = Intent( val cls = when {
requireActivity(), book.isAudio -> AudioPlayActivity::class.java
if (book.isImage && AppConfig.showMangaUi) M::class.java else A::class.java book.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java
) else -> ReadBookActivity::class.java
}
val intent = Intent(requireActivity(), cls)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("bookUrl", book.bookUrl)
intent.apply(configIntent) intent.apply(configIntent)
startActivity(intent) startActivity(intent)
} }