kunfei 3 лет назад
Родитель
Сommit
188366d803

+ 4 - 0
app/src/main/java/io/legado/app/data/dao/BookmarkDao.kt

@@ -2,6 +2,7 @@ package io.legado.app.data.dao
 
 import androidx.room.*
 import io.legado.app.data.entities.Bookmark
+import kotlinx.coroutines.flow.Flow
 
 
 @Dao
@@ -14,6 +15,9 @@ interface BookmarkDao {
     )
     val all: List<Bookmark>
 
+    @Query("select * from bookmarks order by bookName collate localized, bookAuthor collate localized, chapterIndex, chapterPos")
+    fun flowAll(): Flow<List<Bookmark>>
+
     @Query(
         """select * from bookmarks 
         where bookName = :bookName and bookAuthor = :bookAuthor 

+ 7 - 15
app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt

@@ -6,16 +6,17 @@ import android.view.MenuItem
 import androidx.activity.viewModels
 import io.legado.app.R
 import io.legado.app.base.VMBaseActivity
+import io.legado.app.data.appDb
 import io.legado.app.data.entities.Bookmark
 import io.legado.app.databinding.ActivityAllBookmarkBinding
 import io.legado.app.ui.document.HandleFileContract
 import io.legado.app.utils.launch
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import kotlinx.coroutines.launch
 
 class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>(),
-    BookmarkAdapter.Callback,
-    BookmarkDialog.Callback {
+    BookmarkAdapter.Callback {
 
     override val viewModel by viewModels<AllBookmarkViewModel>()
     override val binding by viewBinding(ActivityAllBookmarkBinding::inflate)
@@ -30,8 +31,10 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         initView()
-        viewModel.initData {
-            adapter.setItems(it)
+        launch {
+            appDb.bookmarkDao.flowAll().collect {
+                adapter.setItems(it)
+            }
         }
     }
 
@@ -56,15 +59,4 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
         showDialogFragment(BookmarkDialog(bookmark, position))
     }
 
-    override fun upBookmark(pos: Int, bookmark: Bookmark) {
-        adapter.setItem(pos, bookmark)
-    }
-
-    override fun deleteBookmark(pos: Int) {
-        adapter.getItem(pos)?.let {
-            viewModel.deleteBookmark(it)
-        }
-        adapter.removeItem(pos)
-    }
-
 }

+ 0 - 15
app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkViewModel.kt

@@ -6,7 +6,6 @@ import android.net.Uri
 import androidx.documentfile.provider.DocumentFile
 import io.legado.app.base.BaseViewModel
 import io.legado.app.data.appDb
-import io.legado.app.data.entities.Bookmark
 import io.legado.app.utils.*
 import java.io.File
 import java.io.FileOutputStream
@@ -16,20 +15,6 @@ import java.util.*
 class AllBookmarkViewModel(application: Application) : BaseViewModel(application) {
 
 
-    fun initData(onSuccess: (bookmarks: List<Bookmark>) -> Unit) {
-        execute {
-            appDb.bookmarkDao.all
-        }.onSuccess {
-            onSuccess.invoke(it)
-        }
-    }
-
-    fun deleteBookmark(bookmark: Bookmark) {
-        execute {
-            appDb.bookmarkDao.delete(bookmark)
-        }
-    }
-
     @Suppress("BlockingMethodInNonBlockingContext")
     @SuppressLint("SimpleDateFormat")
     fun saveToFile(treeUri: Uri) {

+ 0 - 15
app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt

@@ -61,7 +61,6 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
                     withContext(IO) {
                         appDb.bookmarkDao.insert(bookmark)
                     }
-                    getCallback()?.upBookmark(editPos, bookmark)
                     dismiss()
                 }
             }
@@ -70,24 +69,10 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
                     withContext(IO) {
                         appDb.bookmarkDao.delete(bookmark)
                     }
-                    getCallback()?.deleteBookmark(editPos)
                     dismiss()
                 }
             }
         }
     }
 
-    private fun getCallback(): Callback? {
-        return (parentFragment as? Callback)
-            ?: activity as? Callback
-    }
-
-    interface Callback {
-
-        fun upBookmark(pos: Int, bookmark: Bookmark)
-
-        fun deleteBookmark(pos: Int)
-
-    }
-
 }

+ 0 - 8
app/src/main/java/io/legado/app/ui/book/toc/BookmarkFragment.kt

@@ -25,7 +25,6 @@ import kotlinx.coroutines.withContext
 
 class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark),
     BookmarkAdapter.Callback,
-    BookmarkDialog.Callback,
     TocViewModel.BookmarkCallBack {
     override val viewModel by activityViewModels<TocViewModel>()
     private val binding by viewBinding(FragmentBookmarkBinding::bind)
@@ -88,11 +87,4 @@ class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark
         showDialogFragment(BookmarkDialog(bookmark, pos))
     }
 
-    override fun upBookmark(pos: Int, bookmark: Bookmark) {
-        adapter.setItem(pos, bookmark)
-    }
-
-    override fun deleteBookmark(pos: Int) {
-        adapter.removeItem(pos)
-    }
 }