From a793c066b264903053704c48c7c001650c94d1bc Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 28 Jan 2022 20:34:27 +0100 Subject: [PATCH] implement clip deleting from the activity --- .../ManageClipboardItemsActivity.kt | 9 +++- .../keyboard/adapters/ClipsActivityAdapter.kt | 42 +++++++++++++++---- .../keyboard/interfaces/ClipsDao.kt | 3 ++ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/ManageClipboardItemsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/ManageClipboardItemsActivity.kt index d891ebd..082c236 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/ManageClipboardItemsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/ManageClipboardItemsActivity.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.underlineText import com.simplemobiletools.commons.extensions.updateTextColors import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.adapters.ClipsActivityAdapter import com.simplemobiletools.keyboard.dialogs.AddClipDialog @@ -15,7 +16,7 @@ import com.simplemobiletools.keyboard.extensions.clipsDB import com.simplemobiletools.keyboard.models.Clip import kotlinx.android.synthetic.main.activity_manage_clipboard_items.* -class ManageClipboardItemsActivity : SimpleActivity() { +class ManageClipboardItemsActivity : SimpleActivity(), RefreshRecyclerViewListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -52,7 +53,7 @@ class ManageClipboardItemsActivity : SimpleActivity() { ensureBackgroundThread { val clips = clipsDB.getClips().toMutableList() as ArrayList runOnUiThread { - ClipsActivityAdapter(this, clips, clipboard_items_list) { + ClipsActivityAdapter(this, clips, clipboard_items_list, this) { }.apply { clipboard_items_list.adapter = this } @@ -69,4 +70,8 @@ class ManageClipboardItemsActivity : SimpleActivity() { updateClips() } } + + override fun refreshItems() { + updateClips() + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsActivityAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsActivityAdapter.kt index aa66270..5ea0bf4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsActivityAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsActivityAdapter.kt @@ -6,18 +6,22 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.dialogs.ConfirmationDialog +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.interfaces.ItemMoveCallback import com.simplemobiletools.commons.interfaces.ItemTouchHelperContract +import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.commons.interfaces.StartReorderDragListener import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.bottomactionmenu.BottomActionMenuView import com.simplemobiletools.keyboard.R +import com.simplemobiletools.keyboard.extensions.clipsDB import com.simplemobiletools.keyboard.models.Clip import kotlinx.android.synthetic.main.item_clip_in_activity.view.* import java.util.* class ClipsActivityAdapter( - activity: BaseSimpleActivity, var items: ArrayList, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit + activity: BaseSimpleActivity, var items: ArrayList, recyclerView: MyRecyclerView, val listener: RefreshRecyclerViewListener, itemClick: (Any) -> Unit ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), ItemTouchHelperContract { private var touchHelper: ItemTouchHelper? = null @@ -46,7 +50,7 @@ class ClipsActivityAdapter( } when (id) { - R.id.cab_delete -> deleteSelection() + R.id.cab_delete -> askConfirmDelete() } } @@ -56,11 +60,9 @@ class ClipsActivityAdapter( override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() - override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id == key.toLong() } + override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id?.toInt() == key } - override fun onActionModeDestroyed() { - notifyDataSetChanged() - } + override fun onActionModeDestroyed() {} override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_clip_in_activity, parent) @@ -74,9 +76,33 @@ class ClipsActivityAdapter( override fun getItemCount() = items.size - private fun deleteSelection() {} + private fun askConfirmDelete() { + ConfirmationDialog(activity, "", R.string.proceed_with_deletion, R.string.yes, R.string.cancel) { + deleteSelection() + } + } - private fun getItemWithKey(key: Int): Clip? = items.firstOrNull { it.id == key.toLong() } + private fun deleteSelection() { + val deleteClips = ArrayList(selectedKeys.size) + val positions = getSelectedItemPositions() + + getSelectedItems().forEach { + deleteClips.add(it) + } + + items.removeAll(deleteClips) + removeSelectedItems(positions) + + ensureBackgroundThread { + deleteClips.forEach { clip -> + activity.clipsDB.delete(clip.id!!.toLong()) + } + + if (items.isEmpty()) { + listener.refreshItems() + } + } + } private fun getSelectedItems() = items.filter { selectedKeys.contains(it.id!!.toInt()) } as ArrayList diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/interfaces/ClipsDao.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/interfaces/ClipsDao.kt index 93df313..68c028b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/interfaces/ClipsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/interfaces/ClipsDao.kt @@ -13,4 +13,7 @@ interface ClipsDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrUpdate(clip: Clip): Long + + @Query("DELETE FROM clips WHERE id = :id") + fun delete(id: Long) }