From a2c71a5e157dfdcfb95bcd80e2864ac640010add Mon Sep 17 00:00:00 2001
From: muqing <1966944300@qq.com>
Date: Wed, 10 Jul 2024 12:33:26 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 13 ++-
.../coldmint/rust/pro/CodeTableActivity.kt | 78 ++++------------
.../com/coldmint/rust/pro/MainActivity.kt | 35 +++++++-
.../rust/pro/adapters/CodeTableAdapter.kt | 90 +++++++++++++++----
.../rust/pro/adapters/DesignAdapter.kt | 7 +-
.../rust/pro/dialog/MaterialBottomDialog.kt | 29 ++++++
.../main/res/layout/activity_code_table.xml | 87 ++++++++++++------
app/src/main/res/layout/dialog_bottom.xml | 42 +++++++++
app/src/main/res/layout/item_tab.xml | 2 +-
app/src/main/res/xml-v25/shortcuts.xml | 16 ++++
.../com/coldmint/dialog/BaseBottomDialog.kt | 1 -
11 files changed, 282 insertions(+), 118 deletions(-)
create mode 100644 app/src/main/java/com/coldmint/rust/pro/dialog/MaterialBottomDialog.kt
create mode 100644 app/src/main/res/layout/dialog_bottom.xml
create mode 100644 app/src/main/res/xml-v25/shortcuts.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5386758..bbf055d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -25,17 +25,14 @@
android:supportsRtl="true"
android:theme="@style/Theme.rust.Concept"
android:usesCleartextTraffic="true"
- android:screenOrientation="portrait"
tools:targetApi="tiramisu">
+
+ android:launchMode="singleTask"
+ android:icon="@drawable/table"
+ android:taskAffinity="@string/code_table"
+ android:documentLaunchMode="intoExisting"
+ android:exported="false">
+
diff --git a/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt b/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt
index cc8154a..b94560e 100644
--- a/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt
+++ b/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt
@@ -13,6 +13,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.inputmethod.EditorInfo
+import android.widget.Toast
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import com.coldmint.rust.core.database.code.CodeDataBase
@@ -21,7 +22,6 @@ import com.coldmint.rust.core.database.code.SectionInfo
import com.coldmint.rust.pro.adapters.CodeTableAdapter
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityCodeTableBinding
-import com.muqing.gj
import java.util.concurrent.Executors
class CodeTableActivity : BaseActivity() {
@@ -38,11 +38,15 @@ class CodeTableActivity : BaseActivity() {
override fun beforeTextChanged(a: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(a: CharSequence?, p1: Int, p2: Int, p3: Int) {
- if (a.isNullOrEmpty()) {
+/* if (a.isNullOrEmpty()) {
loadData()
return
}
- loadData(a.toString())
+ loadData(a.toString())*/
+ if (a.isNullOrEmpty()) {
+ viewBinding.searchPick.isVisible = false
+ loadData()
+ }
}
override fun afterTextChanged(a: Editable?) {
}
@@ -51,8 +55,16 @@ class CodeTableActivity : BaseActivity() {
if (p1 == EditorInfo.IME_ACTION_SEARCH) {
if (v?.text.isNullOrEmpty()) {
loadData()
- }else
- loadData(v?.text.toString())
+ }else{
+ var toString = v?.text.toString()
+ if (toString.startsWith("/")) {
+ toString = toString.substring(1)
+ loadData(toString)
+ }else{
+ viewBinding.searchPick.isVisible = true
+ adapter.item?.search(toString)
+ }
+ }
}
false
}
@@ -86,6 +98,7 @@ class CodeTableActivity : BaseActivity() {
* @param section String? 节
*/
fun loadData(key: String? = null, section: String? = null) {
+ //如果 key start 有 / 则取后的string
executorService.submit {
filterMode = key != null || section != null
val sectionMap = HashMap()
@@ -175,7 +188,6 @@ class CodeTableActivity : BaseActivity() {
spannableString.setSpan(
object : ClickableSpan() {
override fun onClick(p0: View) {
- editisVisible(false)
loadData()
}
}, start, start + action.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
@@ -195,63 +207,9 @@ class CodeTableActivity : BaseActivity() {
return true
}
-
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- when (item.itemId) {
- R.id.filter_units -> {
- if (viewBinding.edittext.isVisible) {
- if (viewBinding.edittext.text.isNullOrEmpty()) {
- loadData()
- } else {
- loadData(viewBinding.edittext.text.toString())
- }
- } else {
- editisVisible(true)
- }
- /*
- InputDialog(this).setTitle(R.string.filter).setMessage(R.string.filter_tip)
- .setInputCanBeEmpty(false).setMaxNumber(20)
- .setPositiveButton(R.string.dialog_ok) { text ->
- var key = text
- if (key.length > 20) {
- key = key.substring(0, 20)
- }
- loadData(key)
- true
- }.setNegativeButton(R.string.dialog_close) {
-
- }.show()*/
- }
-
- android.R.id.home -> {
- if (viewBinding.edittext.isVisible) {
- editisVisible(false)
- return true
- }
- ifNeedFinish()
- return true
- }
- }
- return super.onOptionsItemSelected(item)
- }
-
- private fun editisVisible(b: Boolean) {
- }
-
- @Deprecated("Deprecated in Java")
override fun onBackPressed() {
- if (viewBinding.expandableListView.adapter !is CodeTableAdapter) {
- viewBinding.expandableListView.adapter = adapter
- return
- }
- if (viewBinding.edittext.text.isNotEmpty()) {
- viewBinding.edittext.setText("")
- gj.ycjp(viewBinding.edittext)
- } else {
- gj.tcjp(viewBinding.edittext)
finish()
// ifNeedFinish()
- }
}
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityCodeTableBinding {
return ActivityCodeTableBinding.inflate(layoutInflater)
diff --git a/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt b/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt
index 286504b..5c6fa72 100644
--- a/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt
+++ b/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt
@@ -1,8 +1,13 @@
package com.coldmint.rust.pro
+import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
+import android.content.pm.ShortcutInfo
+import android.content.pm.ShortcutManager
+import android.graphics.drawable.Icon
+import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@@ -42,6 +47,7 @@ import com.google.android.material.snackbar.Snackbar
import com.google.gson.Gson
import org.json.JSONObject
import java.io.File
+import java.util.Arrays
import java.util.concurrent.Executors
import java.util.zip.ZipEntry
@@ -300,7 +306,34 @@ class MainActivity : BaseActivity() {
}*/
codeTable.setOnMenuItemClickListener {
- startActivity(Intent(this@MainActivity, CodeTableActivity::class.java))
+/* // 获取上下文,通常是Activity的this或者Application的getApplicationContext()
+ val context: Context = this@MainActivity // 假设在Activity内部
+// 创建Intent,指定目标Activity
+ val shortcutIntent = Intent(context, CodeTableActivity::class.java)
+ shortcutIntent.setAction("com.coldmint.rust.pro.ACTION_CODE_TABLE") // 自定义Action,可选
+ shortcutIntent.putExtra("extra", "value") // 可选的额外数据
+// 添加标志,确保快捷方式启动新任务
+ shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
+ shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
+// 构建ShortcutInfo
+ val info = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
+ ShortcutInfo.Builder(context, "code_table_shortcut_id")
+ .setShortLabel(context.getString(com.coldmint.rust.pro.R.string.code_table))
+ .setLongLabel(context.getString(com.coldmint.rust.pro.R.string.code_table))
+ .setIcon(Icon.createWithResource(context, com.coldmint.rust.pro.R.drawable.table))
+ .setIntent(shortcutIntent)
+ .build()
+ } else {
+ TODO("VERSION.SDK_INT < N_MR1")
+ }
+// 获取ShortcutManager
+ val shortcutManager: ShortcutManager = context.getSystemService(ShortcutManager::class.java)
+// 添加动态快捷方式
+ shortcutManager.addDynamicShortcuts(listOf(info))*/
+ val intent = Intent(this@MainActivity, CodeTableActivity::class.java)
+/* intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)*/
+ startActivity(intent)
false
}
/*重要部分
diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableAdapter.kt
index bb22d71..c329f57 100644
--- a/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableAdapter.kt
+++ b/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableAdapter.kt
@@ -5,11 +5,17 @@ import android.content.Context
import android.graphics.Color
import android.os.Handler
import android.os.Looper
+import android.text.SpannableStringBuilder
+import android.text.Spanned
+import android.text.style.BackgroundColorSpan
+import android.text.style.ForegroundColorSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
+import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
import com.coldmint.rust.core.database.code.CodeDataBase
@@ -19,10 +25,11 @@ import com.coldmint.rust.core.tool.LineParser
import com.coldmint.rust.pro.R
import com.coldmint.rust.pro.databinding.CodeTableItemBinding
import com.coldmint.rust.pro.databinding.ItemCodetableBinding
+import com.coldmint.rust.pro.dialog.MaterialBottomDialog
import com.coldmint.rust.pro.tool.AppSettings
import com.coldmint.rust.pro.tool.GlobalMethod
+import com.google.android.gms.common.internal.Objects
import com.google.android.material.chip.Chip
-import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.muqing.VH
import java.util.concurrent.Executors
@@ -204,7 +211,13 @@ class CodeTableAdapter(
lineParser.symbol = ","
}
- var i: Int = -1
+ companion object {
+ var i: String = null.toString()
+ var pick: Int = -1
+ var pickString: String = ""
+
+ }
+
@SuppressLint("StringFormatInvalid")
override fun onBindViewHolder(holder: VH, position: Int) {
holder.binging.title.text = group[position].translate
@@ -214,19 +227,14 @@ class CodeTableAdapter(
)
holder.binging.message.text = format
holder.itemView.setOnClickListener {
- val p: Int = holder.absoluteAdapterPosition
- i = if (i == p) {
- -1
- } else {
- p
- }
- recyclerView.adapter = ITEM(itemList[position])
+ i = group[position].translate
+ item = ITEM(itemList[position])
+ recyclerView.adapter = item
notifyDataSetChanged()
// notifyItemChanged(p)
}
- if (i == position) {
+ if (Objects.equal(group[position].translate, i)) {
//背景高亮
-//
holder.binging.root.setCardBackgroundColor(ContextCompat.getColor(context, R.color.md_theme_dark_onSecondaryContainer))
} else {
//背景恢复
@@ -234,8 +242,26 @@ class CodeTableAdapter(
}
}
+
+ var item: ITEM? = null
+
inner class ITEM(val list: List) : RecyclerView.Adapter>() {
+ //在list查找是否有这个关键字
+ fun search(keyword: String) {
+ pickString = keyword
+ for (i in list.indices) {
+ if (list[i].translate.contains(keyword) || list[i].description.contains(keyword) || list[i].code.contains(keyword)) {
+ //找到后列表定位 到顶部
+ pick = i
+ (recyclerView.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(i, 0)
+ notifyDataSetChanged()
+ break
+ }
+ }
+
+ }
+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
return VH(CodeTableItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
@@ -244,34 +270,57 @@ class CodeTableAdapter(
return list.size
}
+ private fun contains(string: String, textView: TextView) {
+ if (string.contains(pickString)) {
+ val spannableText = SpannableStringBuilder(string)
+ val highlightWord = pickString
+ val start = string.indexOf(highlightWord)
+ val end = start + highlightWord.length
+ if (start != -1) {
+ // 设置文字颜色
+ val colorSpan = ForegroundColorSpan(Color.RED)
+ spannableText.setSpan(colorSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ // 设置背景颜色
+ val backgroundSpan = BackgroundColorSpan(Color.YELLOW)
+ spannableText.setSpan(backgroundSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ }
+ textView.text = spannableText
+ } else {
+ textView.text = string
+ }
+ com.muqing.gj.sc(pickString)
+ }
+
@SuppressLint("StringFormatInvalid")
override fun onBindViewHolder(holder: VH, position: Int) {
val resultView: CodeTableItemBinding = holder.binging
val codeInfo = list[position]
- resultView.descriptionView.text = codeInfo.description
+
+ contains(codeInfo.description, resultView.descriptionView)
resultView.descriptionView.setOnClickListener {
GlobalMethod.copyText(it.context, codeInfo.description, it)
}
- resultView.titleView.text = codeInfo.translate
+
+ contains(codeInfo.translate, resultView.titleView)
resultView.titleView.setOnClickListener {
GlobalMethod.copyText(it.context, codeInfo.translate, it)
}
val demo = codeInfo.demo
resultView.imageView.isVisible = demo.isNotBlank()
resultView.imageView.setOnClickListener {
- val dialog = MaterialAlertDialogBuilder(it.context)
- dialog.setTitle(R.string.code_demo)
- dialog.setMessage(demo)
- dialog.setPositiveButton(R.string.dialog_ok, null)
- dialog.show()
+ val materialBottomDialog = MaterialBottomDialog(it.context)
+ materialBottomDialog.setTitle(R.string.code_demo)
+ materialBottomDialog.setMessage(demo)
+ materialBottomDialog.show()
}
- resultView.subTitleView.text = codeInfo.code
+ contains(codeInfo.code, resultView.subTitleView)
resultView.subTitleView.setOnClickListener {
GlobalMethod.copyText(it.context, codeInfo.code, it)
}
resultView.valueTypeView.text = typeNameMap?.get(codeInfo.type) ?: codeInfo.type
lineParser.text = codeInfo.section
+
// resultView.chipGroup.removeAllViews()
var isNotEmpty = false
lineParser.analyse { lineNum, lineData, isEnd ->
@@ -292,6 +341,7 @@ class CodeTableAdapter(
executorService.submit {
val codeDataBase = CodeDataBase.getInstance(context)
val typeInfo = codeDataBase.getValueTypeDao().findTypeByType(codeInfo.type)
+
if (typeInfo == null) {
handler.post {
handler.post {
@@ -350,6 +400,8 @@ class CodeTableAdapter(
}
resultView.versionView.text =
versionMap?.get(codeInfo.addVersion) ?: codeInfo.addVersion.toString()
+
+
}
}
diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/DesignAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/DesignAdapter.kt
index e6e8ad2..23b968c 100644
--- a/app/src/main/java/com/coldmint/rust/pro/adapters/DesignAdapter.kt
+++ b/app/src/main/java/com/coldmint/rust/pro/adapters/DesignAdapter.kt
@@ -37,14 +37,13 @@ class DesignAdapter(private val onclick: Click) : RecyclerView.Adapter(R.id.message)
+ findViewById?.text = string
+ }
+ fun setTitle(string: String) {
+ val findViewById = findViewById(R.id.title)
+ findViewById?.text = string
+ }
+
+ override fun setTitle(titleId: Int) {
+ super.setTitle(titleId)
+ val string = context.getString(titleId)
+ delegate.setTitle(string)
+ val findViewById = findViewById(R.id.title)
+ findViewById?.text = string
+ }
+}
diff --git a/app/src/main/res/layout/activity_code_table.xml b/app/src/main/res/layout/activity_code_table.xml
index ba4e394..ae3a98b 100644
--- a/app/src/main/res/layout/activity_code_table.xml
+++ b/app/src/main/res/layout/activity_code_table.xml
@@ -14,44 +14,74 @@
+ android:layout_margin="12dp">
+ android:orientation="vertical">
-
+ android:layout_marginHorizontal="6dp"
+ android:gravity="center">
-
+
+
+
+
+
+ android:layout_marginHorizontal="6dp"
+ android:gravity="end"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ tools:visibility="visible">
+
+
+
+
+
+
@@ -103,7 +133,8 @@
+ android:layout_marginHorizontal="3dp"
+ android:layout_marginVertical="3dp" />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_tab.xml b/app/src/main/res/layout/item_tab.xml
index c60de41..27039b6 100644
--- a/app/src/main/res/layout/item_tab.xml
+++ b/app/src/main/res/layout/item_tab.xml
@@ -27,7 +27,7 @@
android:id="@+id/imageview"
android:layout_width="24dp"
android:layout_height="24dp"
- android:layout_marginStart="6dp"
+ android:layout_marginStart="16dp"
android:src="@drawable/visibility" />
\ No newline at end of file
diff --git a/app/src/main/res/xml-v25/shortcuts.xml b/app/src/main/res/xml-v25/shortcuts.xml
new file mode 100644
index 0000000..f37f981
--- /dev/null
+++ b/app/src/main/res/xml-v25/shortcuts.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/dialog/src/main/java/com/coldmint/dialog/BaseBottomDialog.kt b/dialog/src/main/java/com/coldmint/dialog/BaseBottomDialog.kt
index 7254ebc..edd6512 100644
--- a/dialog/src/main/java/com/coldmint/dialog/BaseBottomDialog.kt
+++ b/dialog/src/main/java/com/coldmint/dialog/BaseBottomDialog.kt
@@ -18,7 +18,6 @@ abstract class BaseBottomDialog(val context: Cont
protected val bottomSheetDialog: BottomSheetDialog by lazy {
BottomSheetDialog(context)
-
}
protected val layoutInflater by lazy {