Horis 1 год назад
Родитель
Сommit
f999ce7e83

+ 2 - 6
app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt

@@ -19,15 +19,13 @@ import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.LocalConfig
 import io.legado.app.lib.dialogs.alert
 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.utils.applyNavigationBarPadding
 import io.legado.app.utils.applyTint
 import io.legado.app.utils.cnCompare
 import io.legado.app.utils.getInt
 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 kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.launch
@@ -193,9 +191,7 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
                         if (book == null) {
                             SearchActivity.start(this@ReadRecordActivity, item.bookName)
                         } else {
-                            startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) {
-                                putExtra("bookUrl", book.bookUrl)
-                            }
+                            startActivityForBook(book)
                         }
                     }
                 }

+ 11 - 9
app/src/main/java/io/legado/app/ui/association/FileAssociationActivity.kt

@@ -15,8 +15,6 @@ import io.legado.app.help.config.AppConfig
 import io.legado.app.lib.dialogs.alert
 import io.legado.app.lib.permission.Permissions
 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.utils.FileUtils
 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.showDialogFragment
 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.viewbindingdelegate.viewBinding
 import kotlinx.coroutines.Dispatchers.IO
@@ -92,9 +90,7 @@ class FileAssociationActivity :
         }
         viewModel.openBookLiveData.observe(this) {
             binding.rotateLoading.gone()
-            startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(it) {
-                putExtra("bookUrl", it.bookUrl)
-            }
+            startActivityForBook(it)
             finish()
         }
         viewModel.notSupportedLiveData.observe(this) { data ->
@@ -159,7 +155,9 @@ class FileAssociationActivity :
                         val treeDoc =
                             DocumentFile.fromTreeUri(this@FileAssociationActivity, treeUri)
                         if (!treeDoc!!.checkWrite()) {
-                            throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial")
+                            throw InvalidBooksDirException(
+                                "请重新设置书籍保存位置\nPermission Denial"
+                            )
                         }
                         readUri(uri) { fileDoc, inputStream ->
                             val name = fileDoc.name
@@ -167,7 +165,9 @@ class FileAssociationActivity :
                             if (doc == null || fileDoc.lastModified > doc.lastModified()) {
                                 if (doc == null) {
                                     doc = treeDoc.createFile(FileUtils.getMimeType(name), name)
-                                        ?: throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial")
+                                        ?: throw InvalidBooksDirException(
+                                            "请重新设置书籍保存位置\nPermission Denial"
+                                        )
                                 }
                                 contentResolver.openOutputStream(doc.uri)!!.use { oStream ->
                                     inputStream.copyTo(oStream)
@@ -179,7 +179,9 @@ class FileAssociationActivity :
                     } else {
                         val treeFile = File(treeUri.path ?: treeUri.toString())
                         if (!treeFile.checkWrite()) {
-                            throw InvalidBooksDirException("请重新设置书籍保存位置\nPermission Denial")
+                            throw InvalidBooksDirException(
+                                "请重新设置书籍保存位置\nPermission Denial"
+                            )
                         }
                         readUri(uri) { fileDoc, inputStream ->
                             val name = fileDoc.name

+ 2 - 6
app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt

@@ -31,8 +31,6 @@ import io.legado.app.model.BookCover
 import io.legado.app.service.AudioPlayService
 import io.legado.app.ui.about.AppLogDialog
 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.toc.TocActivityResult
 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.showDialogFragment
 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.visible
 import kotlinx.coroutines.Dispatchers.IO
@@ -220,9 +218,7 @@ class AudioPlayActivity :
                     AudioPlay.book?.delete()
                     appDb.bookDao.insert(book)
                 }
-                startReadOrMangaActivity<ReadBookActivity,ReadMangaActivity>(book) {
-                    putExtra("bookUrl", book.bookUrl)
-                }
+                startActivityForBook(book)
                 finish()
             }
         }

+ 2 - 6
app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt

@@ -15,15 +15,13 @@ import io.legado.app.lib.dialogs.alert
 import io.legado.app.lib.dialogs.selector
 import io.legado.app.lib.theme.primaryTextColor
 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.utils.ArchiveUtils
 import io.legado.app.utils.FileDoc
 import io.legado.app.utils.applyTint
 import io.legado.app.utils.hideSoftInput
 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.viewbindingdelegate.viewBinding
 import kotlin.coroutines.resume
@@ -99,9 +97,7 @@ abstract class BaseImportBookActivity<VM : ViewModel> : VMBaseActivity<ActivityI
     abstract fun onSearchTextChange(newText: String?)
 
     protected fun startReadBook(book: Book) {
-        startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) {
-            putExtra("bookUrl", book.bookUrl)
-        }
+        startActivityForBook(book)
     }
 
     protected fun onArchiveFileClick(fileDoc: FileDoc) {

+ 2 - 4
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -67,7 +67,6 @@ import io.legado.app.receiver.NetworkChangedListener
 import io.legado.app.receiver.TimeBatteryReceiver
 import io.legado.app.service.BaseReadAloudService
 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.changesource.ChangeBookSourceDialog
 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.showHelp
 import io.legado.app.utils.startActivity
+import io.legado.app.utils.startActivityForBook
 import io.legado.app.utils.sysScreenOffTime
 import io.legado.app.utils.throttle
 import io.legado.app.utils.toastOnUi
@@ -1091,9 +1091,7 @@ class ReadBookActivity : BaseReadBookActivity(),
                     ReadBook.book?.delete()
                     appDb.bookDao.insert(book)
                 }
-                startActivity<AudioPlayActivity> {
-                    putExtra("bookUrl", book.bookUrl)
-                }
+                startActivityForBook(book)
                 finish()
             }
         }

+ 2 - 15
app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt

@@ -22,21 +22,17 @@ import io.legado.app.data.appDb
 import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookGroup
 import io.legado.app.databinding.FragmentBooksBinding
-import io.legado.app.help.book.isAudio
 import io.legado.app.help.config.AppConfig
 import io.legado.app.lib.theme.accentColor
 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.manga.ReadMangaActivity
-import io.legado.app.ui.book.read.ReadBookActivity
 import io.legado.app.ui.main.MainViewModel
 import io.legado.app.utils.cnCompare
 import io.legado.app.utils.flowWithLifecycleAndDatabaseChangeFirst
 import io.legado.app.utils.observeEvent
 import io.legado.app.utils.setEdgeEffectColor
 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 kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
@@ -243,16 +239,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
     }
 
     override fun open(book: Book) {
-        when {
-            book.isAudio ->
-                startActivity<AudioPlayActivity> {
-                    putExtra("bookUrl", book.bookUrl)
-                }
-
-            else -> startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(book) {
-                putExtra("bookUrl", book.bookUrl)
-            }
-        }
+        startActivityForBook(book)
     }
 
     override fun openBookInfo(book: Book) {

+ 2 - 15
app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BookshelfFragment2.kt

@@ -18,15 +18,11 @@ import io.legado.app.data.appDb
 import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookGroup
 import io.legado.app.databinding.FragmentBookshelf2Binding
-import io.legado.app.help.book.isAudio
 import io.legado.app.help.config.AppConfig
 import io.legado.app.lib.theme.accentColor
 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.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.main.bookshelf.BaseBookshelfFragment
 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.showDialogFragment
 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 kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
@@ -213,16 +209,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
 
     override fun onItemClick(item: Any) {
         when (item) {
-            is Book -> when {
-                item.isAudio ->
-                    startActivity<AudioPlayActivity> {
-                        putExtra("bookUrl", item.bookUrl)
-                    }
-
-                else -> startReadOrMangaActivity<ReadBookActivity, ReadMangaActivity>(item) {
-                    putExtra("bookUrl", item.bookUrl)
-                }
-            }
+            is Book -> startActivityForBook(item)
 
             is BookGroup -> {
                 groupId = item.groupId

+ 12 - 3
app/src/main/java/io/legado/app/utils/ContextExtensions.kt

@@ -40,8 +40,12 @@ import io.legado.app.R
 import io.legado.app.constant.AppConst
 import io.legado.app.data.entities.Book
 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.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.connectivityManager
 import splitties.systemservices.uiModeManager
@@ -56,13 +60,18 @@ inline fun <reified A : Activity> Context.startActivity(configIntent: Intent.()
     startActivity(intent)
 }
 
-inline fun <reified A : Activity, reified M : Activity> Context.startReadOrMangaActivity(
+fun Context.startActivityForBook(
     book: Book,
     configIntent: Intent.() -> Unit = {},
 ) {
-    val intent =
-        Intent(this, if (book.isImage && AppConfig.showMangaUi) M::class.java else A::class.java)
+    val cls = when {
+        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.putExtra("bookUrl", book.bookUrl)
     intent.apply(configIntent)
     startActivity(intent)
 }

+ 12 - 5
app/src/main/java/io/legado/app/utils/FragmentExtensions.kt

@@ -15,8 +15,12 @@ import androidx.fragment.app.Fragment
 import androidx.lifecycle.Lifecycle
 import io.legado.app.R
 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.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
 
 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))
 }
 
-inline fun <reified A : Activity, reified M : Activity> Fragment.startReadOrMangaActivity(
+fun Fragment.startActivityForBook(
     book: Book,
     configIntent: Intent.() -> Unit = {},
 ) {
-    val intent = Intent(
-        requireActivity(),
-        if (book.isImage && AppConfig.showMangaUi) M::class.java else A::class.java
-    )
+    val cls = when {
+        book.isAudio -> AudioPlayActivity::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.putExtra("bookUrl", book.bookUrl)
     intent.apply(configIntent)
     startActivity(intent)
 }