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