diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index fb7f4a8..61a9130 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 23a89bb..2c7e034 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,7 +4,7 @@
-
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 860da66..e2af10a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,14 @@
-
+
+
+
+
+
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 797acea..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 2dd2f09..7970e9f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -43,8 +43,8 @@ android {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
- implementation 'androidx.core:core-ktx:1.3.2'
- implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.core:core-ktx:1.5.0'
+ implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
diff --git a/app/src/main/java/top/fumiama/simpledict/MainActivity.kt b/app/src/main/java/top/fumiama/simpledict/MainActivity.kt
index c4c6abb..4cb0e09 100644
--- a/app/src/main/java/top/fumiama/simpledict/MainActivity.kt
+++ b/app/src/main/java/top/fumiama/simpledict/MainActivity.kt
@@ -30,7 +30,6 @@ import kotlinx.android.synthetic.main.dialog_input.view.*
import kotlinx.android.synthetic.main.line_word.view.*
import kotlinx.android.synthetic.main.line_word.view.tb
import kotlinx.android.synthetic.main.line_word.view.tn
-import java.io.File
import java.io.FileNotFoundException
import java.lang.Exception
@@ -44,6 +43,8 @@ class MainActivity : AppCompatActivity() {
private var cm: ClipboardManager? = null
private var ad: LikeViewHolder.RecyclerViewAdapter? = null
private var lastLikeLine: View? = null
+ private var end = 0
+ private var start = 0
@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
@@ -113,7 +114,7 @@ class MainActivity : AppCompatActivity() {
override fun onQueryTextSubmit(query: CharSequence): Boolean {
if(query.isNotEmpty()) {
- val key = query.toString().trim().replace(Regex("[\\uFF00-\\uFF5E]")) { (it.value[0] - 0xFEE0).toString() }
+ val key = query.toString()
val data = dict?.get(key)
showDictAlert(key, data, recyclerView.children.toList().let {
val i = it.map { it.ta.text }.indexOf(key)
@@ -204,7 +205,8 @@ class MainActivity : AppCompatActivity() {
}*/
private fun updateSize() = runOnUiThread {
- lastLikeLine?.fftc?.text = dict?.size?.toString()?:"0"
+ lastLikeLine?.fftt?.text = "${dict?.size?.toString()?:"0"} syez rjimj"
+ lastLikeLine?.fftc?.text = "${start}-${end}"
}
private fun fetchThread(doWhenFinish: (()->Unit)? = null) {
@@ -221,6 +223,7 @@ class MainActivity : AppCompatActivity() {
runOnUiThread {
ffsw.isRefreshing = false
ad?.capacity = 5
+ ad?.offset = 0
ad?.refresh()
doWhenFinish?.apply { this() }
}
@@ -244,7 +247,8 @@ class MainActivity : AppCompatActivity() {
.setPositiveButton(android.R.string.ok) { _, _ ->
val newText = t.diet.text.toString().trim().replace(Regex("[\\uFF00-\\uFF5E]")) { (it.value[0] - 0xFEE0).toString() }
if (t.diet.text.isNotEmpty() && newText != data) Thread {
- if(dict?.set(key, newText) == true) {
+ val k = key.trim().replace(Regex("[\\uFF00-\\uFF5E]")) { (it.value[0] - 0xFEE0).toString() }
+ if(dict?.set(k, newText) == true) {
line?.tb?.text = newText
updateSize()
} else runOnUiThread {
@@ -258,7 +262,7 @@ class MainActivity : AppCompatActivity() {
}
.setNeutralButton("删除") { _, _ ->
Thread{
- if(dict?.del(key) == true) line?.apply {
+ if(dict?.send_del(key) == true) line?.apply {
val delKey = SpannableString(key)
val delData = SpannableString(data)
delKey.setSpan(StrikethroughSpan(), 0, key.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
@@ -297,14 +301,23 @@ class MainActivity : AppCompatActivity() {
inner class LikeViewHolder(itemView: View) : ListViewHolder(itemView) {
inner class RecyclerViewAdapter: ListViewHolder.RecyclerViewAdapter(true){
var capacity = 5
+ var offset = 0
override fun loadMore() {
- capacity += 5
- refresh()
+ if(offset+5=5) {
+ offset -= 5
+ refresh()
+ }
}
override fun getKeys(filterText: CharSequence?) = getSharedPreferences("dict", MODE_PRIVATE).all.keys.toTypedArray().let{
dict?.let { d ->
- val end = d.latestKeys.size
- val start = if(end > capacity) end - capacity else 0
+ end = d.latestKeys.size - offset
+ start = if(end > capacity) end - capacity else 0
(it + d.latestKeys.copyOfRange(start, end).reversedArray()).toList()
}?: emptyList()
}
@@ -319,6 +332,7 @@ class MainActivity : AppCompatActivity() {
open fun getKeys(filterText: CharSequence? = null): List? = null
open fun getValue(key: String): String? = null
open fun loadMore() {}
+ open fun loadLess() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
return ListViewHolder(
LayoutInflater.from(parent.context)
@@ -376,11 +390,15 @@ class MainActivity : AppCompatActivity() {
ta.visibility = View.GONE
lwclast.visibility = View.VISIBLE
tn.text = "motkyep..."
- tb.text = "加载更多..."
+ tb.text = "加载更多(长按返回上页)..."
updateSize()
setOnClickListener {
loadMore()
}
+ setOnLongClickListener {
+ loadLess()
+ return@setOnLongClickListener true
+ }
}
}
}
diff --git a/app/src/main/java/top/fumiama/simpledict/SimpleDict.kt b/app/src/main/java/top/fumiama/simpledict/SimpleDict.kt
index fc16a1f..cbeb737 100644
--- a/app/src/main/java/top/fumiama/simpledict/SimpleDict.kt
+++ b/app/src/main/java/top/fumiama/simpledict/SimpleDict.kt
@@ -75,8 +75,19 @@ class SimpleDict(private val client: Client, private val pwd: String, private va
SimpleProtobuf.getDictArray(datas).forEach { d ->
d?.apply {
val k = key.decodeToString()
- dict[k] = data.decodeToString()
- latestKeys += k
+ if(saveDict) {
+ if(k.toByteArray().contentEquals(key)) {
+ dict[k] = data.decodeToString()
+ latestKeys += k
+ } else {
+ send_del(key) // 去错
+ }
+ } else if(!dict.containsKey(k)){
+ dict[k] = data.decodeToString()
+ latestKeys += k
+ } else {
+ send_del(key) // 去重
+ }
}
}
if(saveDict) saveDict(datas)
@@ -97,7 +108,7 @@ class SimpleDict(private val client: Client, private val pwd: String, private va
doCommon?.let { it() }
}
- fun del(key: String): Boolean {
+ fun send_del(key: String): Boolean {
if(spwd == null) return false
else if(initDict()) {
val delPass = "del$spwd"
@@ -122,12 +133,26 @@ class SimpleDict(private val client: Client, private val pwd: String, private va
return false
}
+ private fun send_del(key: ByteArray): Boolean {
+ if(spwd == null) return false
+ else if(initDict()) {
+ val delPass = "del$spwd"
+ client.sendMessage(delPass)
+ client.receiveRawMessage(delPass.length)
+ client.sendMessage(key)
+ if(client.receiveMessage(4) == "succ") {
+ return closeDict()
+ } else closeDict()
+ }
+ return false
+ }
+
operator fun get(key: String) = dict[key]
fun set(key: String, value: String): Boolean {
//if(spwd == null) return false
val contain = dict.containsKey(key)
- if((contain && del(key)) || !contain) {
+ if((contain && send_del(key)) || !contain) {
if(initDict()) {
val setPass = "set$spwd"
client.sendMessage(setPass)
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index bf3941f..eacb639 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,7 +1,6 @@
diff --git a/app/src/main/res/layout/line_word.xml b/app/src/main/res/layout/line_word.xml
index dd4e71c..33404aa 100644
--- a/app/src/main/res/layout/line_word.xml
+++ b/app/src/main/res/layout/line_word.xml
@@ -23,6 +23,8 @@
android:id="@+id/fftc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:layout_marginBottom="8dp"
android:fontFamily="@font/nisi"
android:text="0"
android:textSize="18sp"
@@ -33,6 +35,7 @@
android:id="@+id/fftt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
android:fontFamily="@font/nisi"
android:text="hv#st"
android:textSize="18sp"
diff --git a/build.gradle b/build.gradle
index bcb9fa5..aec97cf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.4.32'
+ ext.kotlin_version = '1.5.20'
repositories {
google()
jcenter()