diff --git a/app/src/main/java/com/osfans/trime/data/db/CollectionHelper.kt b/app/src/main/java/com/osfans/trime/data/db/CollectionHelper.kt index 553d5a4860..23036301b8 100644 --- a/app/src/main/java/com/osfans/trime/data/db/CollectionHelper.kt +++ b/app/src/main/java/com/osfans/trime/data/db/CollectionHelper.kt @@ -28,5 +28,10 @@ object CollectionHelper : CoroutineScope by CoroutineScope(SupervisorJob() + Dis suspend fun delete(id: Int) = cltDao.delete(id) - suspend fun deleteAll() = cltDao.deleteAll() + suspend fun deleteAll(skipPinned: Boolean = true) { + if (skipPinned) + cltDao.deleteAllUnpinned() + else + cltDao.deleteAll() + } } diff --git a/app/src/main/java/com/osfans/trime/ime/symbol/FlexibleAdapter.kt b/app/src/main/java/com/osfans/trime/ime/symbol/FlexibleAdapter.kt index e986f651fe..2a1707ea06 100644 --- a/app/src/main/java/com/osfans/trime/ime/symbol/FlexibleAdapter.kt +++ b/app/src/main/java/com/osfans/trime/ime/symbol/FlexibleAdapter.kt @@ -33,7 +33,7 @@ class FlexibleAdapter( b1.pinned && !b2.pinned -> -1 // 如果 b1 没置顶而 b2 置顶,则 b1 比 b2 大,排后面 !b1.pinned && b2.pinned -> 1 - // 如果都置顶了或都没置顶,则比较 id,id 小的排前面 + // 如果都置顶了或都没置顶,则比较 id,id 大的排前面 else -> b2.id.compareTo(b1.id) } } @@ -138,6 +138,17 @@ class FlexibleAdapter( true } } + if (beans.isNotEmpty()) { + add(R.string.delete_all).apply { + setIcon(R.drawable.ic_baseline_delete_sweep_24) + setOnMenuItemClickListener { + scope.launch { + listener.onDeleteAll() + } + true + } + } + } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { menu.setForceShowIcon(true) @@ -174,6 +185,8 @@ class FlexibleAdapter( suspend fun onUnpin(bean: DatabaseBean) suspend fun onDelete(bean: DatabaseBean) + suspend fun onDeleteAll() + val showCollectButton: Boolean } diff --git a/app/src/main/java/com/osfans/trime/ime/symbol/LiquidKeyboard.kt b/app/src/main/java/com/osfans/trime/ime/symbol/LiquidKeyboard.kt index b965111ab9..92feddef35 100644 --- a/app/src/main/java/com/osfans/trime/ime/symbol/LiquidKeyboard.kt +++ b/app/src/main/java/com/osfans/trime/ime/symbol/LiquidKeyboard.kt @@ -1,5 +1,6 @@ package com.osfans.trime.ime.symbol +import android.annotation.SuppressLint import android.content.Context import android.view.View import androidx.core.view.setPadding @@ -256,6 +257,39 @@ class LiquidKeyboard(private val context: Context) { } } + // FIXME: 这个方法可能实现得比较粗糙,需要日后改进 + @SuppressLint("NotifyDataSetChanged") + override suspend fun onDeleteAll() { + if (beans.all { it.pinned }) { + // 如果没有未置顶的条目,则删除所有已置顶的条目 + when (type) { + SymbolKeyboardType.CLIPBOARD -> ClipboardHelper.deleteAll(false) + SymbolKeyboardType.COLLECTION -> CollectionHelper.deleteAll(false) + SymbolKeyboardType.DRAFT -> DraftHelper.deleteAll(false) + else -> return + } + updateBeans(emptyList()) + } else { + // 如果有已置顶的条目,则删除所有未置顶的条目 + when (type) { + SymbolKeyboardType.CLIPBOARD -> { + ClipboardHelper.deleteAll() + updateBeans(ClipboardHelper.getAll()) + } + SymbolKeyboardType.COLLECTION -> { + CollectionHelper.deleteAll() + updateBeans(CollectionHelper.getAll()) + } + SymbolKeyboardType.DRAFT -> { + DraftHelper.deleteAll() + updateBeans(DraftHelper.getAll()) + } + else -> return + } + } + notifyDataSetChanged() + } + override val showCollectButton: Boolean = type != SymbolKeyboardType.COLLECTION }) } diff --git a/app/src/main/res/drawable/ic_baseline_delete_sweep_24.xml b/app/src/main/res/drawable/ic_baseline_delete_sweep_24.xml new file mode 100644 index 0000000000..aeca0fec9c --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_delete_sweep_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 083fb5237e..b6b2b580f6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -258,4 +258,5 @@ 收藏夹 取消置顶 置顶 + 删除全部 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7689c38d2a..ed57cf1183 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -259,4 +259,5 @@ 收藏夾 取消置頂 置頂 + 刪除全部 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f3c790221a..cb221ab1cb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -262,4 +262,5 @@ Collection Unpin Pin + Delete all