kunfei 4 лет назад
Родитель
Сommit
0cbca9551b

+ 19 - 2
app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkActivity.kt

@@ -3,15 +3,19 @@ package io.legado.app.ui.book.bookmark
 import android.os.Bundle
 import androidx.activity.viewModels
 import io.legado.app.base.VMBaseActivity
+import io.legado.app.data.entities.Bookmark
 import io.legado.app.databinding.ActivityAllBookmarkBinding
+import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
-class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>() {
+class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>(),
+    BookmarkAdapter.Callback,
+    BookmarkDialog.Callback {
 
     override val viewModel by viewModels<AllBookmarkViewModel>()
     override val binding by viewBinding(ActivityAllBookmarkBinding::inflate)
     private val adapter by lazy {
-        BookmarkAdapter(this)
+        BookmarkAdapter(this, this)
     }
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
@@ -26,5 +30,18 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
         binding.recyclerView.adapter = adapter
     }
 
+    override fun onItemClick(bookmark: Bookmark, position: Int) {
+        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)
+    }
 }

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

@@ -16,4 +16,10 @@ class AllBookmarkViewModel(application: Application) : BaseViewModel(application
         }
     }
 
+    fun deleteBookmark(bookmark: Bookmark) {
+        execute {
+            appDb.bookmarkDao.delete(bookmark)
+        }
+    }
+
 }

+ 14 - 2
app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkAdapter.kt

@@ -7,8 +7,10 @@ import io.legado.app.base.adapter.RecyclerAdapter
 import io.legado.app.data.entities.Bookmark
 import io.legado.app.databinding.ItemBookmarkBinding
 import io.legado.app.utils.gone
+import splitties.views.onClick
 
-class BookmarkAdapter(context: Context) : RecyclerAdapter<Bookmark, ItemBookmarkBinding>(context) {
+class BookmarkAdapter(context: Context, val callback: Callback) :
+    RecyclerAdapter<Bookmark, ItemBookmarkBinding>(context) {
 
     override fun getViewBinding(parent: ViewGroup): ItemBookmarkBinding {
         return ItemBookmarkBinding.inflate(inflater, parent, false)
@@ -28,7 +30,11 @@ class BookmarkAdapter(context: Context) : RecyclerAdapter<Bookmark, ItemBookmark
     }
 
     override fun registerListener(holder: ItemViewHolder, binding: ItemBookmarkBinding) {
-
+        binding.root.onClick {
+            getItemByLayoutPosition(holder.layoutPosition)?.let {
+                callback.onItemClick(it, holder.layoutPosition)
+            }
+        }
     }
 
     fun getHeaderText(position: Int): String {
@@ -45,4 +51,10 @@ class BookmarkAdapter(context: Context) : RecyclerAdapter<Bookmark, ItemBookmark
             && lastItem?.bookAuthor == curItem?.bookAuthor)
     }
 
+    interface Callback {
+
+        fun onItemClick(bookmark: Bookmark, position: Int)
+
+    }
+
 }

+ 3 - 2
app/src/main/java/io/legado/app/ui/book/toc/BookmarkDialog.kt → app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt

@@ -1,4 +1,4 @@
-package io.legado.app.ui.book.toc
+package io.legado.app.ui.book.bookmark
 
 import android.os.Bundle
 import android.view.View
@@ -76,7 +76,8 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark) {
     }
 
     private fun getCallback(): Callback? {
-        return parentFragment as? Callback
+        return (parentFragment as? Callback)
+            ?: activity as? Callback
     }
 
     interface Callback {

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

@@ -38,6 +38,7 @@ import io.legado.app.model.ReadBook
 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.bookmark.BookmarkDialog
 import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
 import io.legado.app.ui.book.changesource.ChangeChapterSourceDialog
 import io.legado.app.ui.book.read.config.*
@@ -51,7 +52,6 @@ import io.legado.app.ui.book.read.page.provider.TextPageFactory
 import io.legado.app.ui.book.searchContent.SearchContentActivity
 import io.legado.app.ui.book.searchContent.SearchResult
 import io.legado.app.ui.book.source.edit.BookSourceEditActivity
-import io.legado.app.ui.book.toc.BookmarkDialog
 import io.legado.app.ui.book.toc.TocActivityResult
 import io.legado.app.ui.browser.WebViewActivity
 import io.legado.app.ui.dict.DictDialog

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

@@ -11,6 +11,7 @@ import io.legado.app.data.appDb
 import io.legado.app.data.entities.Bookmark
 import io.legado.app.databinding.FragmentBookmarkBinding
 import io.legado.app.lib.theme.primaryColor
+import io.legado.app.ui.book.bookmark.BookmarkDialog
 import io.legado.app.ui.widget.recycler.UpLinearLayoutManager
 import io.legado.app.ui.widget.recycler.VerticalDivider
 import io.legado.app.utils.setEdgeEffectColor