修复BUG,添加代码表搜索功能

This commit is contained in:
muqing 2024-07-20 11:19:57 +08:00
parent 913cc1a4d7
commit baf8b01582
5 changed files with 322 additions and 224 deletions

View File

@ -10,18 +10,19 @@ import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.Toast
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.coldmint.rust.core.database.code.CodeDataBase import com.coldmint.rust.core.database.code.CodeDataBase
import com.coldmint.rust.core.database.code.CodeInfo import com.coldmint.rust.core.database.code.CodeInfo
import com.coldmint.rust.core.database.code.SectionInfo import com.coldmint.rust.core.database.code.SectionInfo
import com.coldmint.rust.pro.adapters.CodeTableAdapter import com.coldmint.rust.pro.adapters.CodeTableAdapter
import com.coldmint.rust.pro.adapters.CodeTableItemAdapter
import com.coldmint.rust.pro.base.BaseActivity import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityCodeTableBinding import com.coldmint.rust.pro.databinding.ActivityCodeTableBinding
import com.google.rpc.Code
import com.muqing.gj
import java.util.concurrent.Executors import java.util.concurrent.Executors
class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() { class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
@ -34,20 +35,42 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
setReturnButton() setReturnButton()
loadData() loadData()
//设置上下选择按钮
viewBinding.listTop.setOnClickListener {
if (--CodeTableAdapter.pick < 0) {
CodeTableAdapter.pick = 0
}
val get = CodeTableAdapter.picklist[CodeTableAdapter.pick]
(viewBinding.codeRecyclerB.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(get, 0)
adapter.item?.notifyDataSetChanged()
}
viewBinding.listButtom.setOnClickListener {
val size = CodeTableAdapter.picklist.size
if (++CodeTableAdapter.pick == size - 1) {
CodeTableAdapter.pick = 0
}
val get = CodeTableAdapter.picklist[CodeTableAdapter.pick]
(viewBinding.codeRecyclerB.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(get,
0)
adapter.item?.notifyDataSetChanged()
}
viewBinding.edittext.addTextChangedListener(object : TextWatcher { viewBinding.edittext.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(a: CharSequence?, p1: Int, p2: Int, p3: Int) { override fun beforeTextChanged(a: CharSequence?, p1: Int, p2: Int, p3: Int) {
} }
override fun onTextChanged(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() loadData()
return return
} }
loadData(a.toString())*/ loadData(a.toString())*/
if (a.isNullOrEmpty()) { if (a.isNullOrEmpty()) {
viewBinding.searchPick.isVisible = false viewBinding.searchPick.isVisible = false
loadData() // loadData()
} }
} }
override fun afterTextChanged(a: Editable?) { override fun afterTextChanged(a: Editable?) {
} }
}) })
@ -55,12 +78,12 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
if (p1 == EditorInfo.IME_ACTION_SEARCH) { if (p1 == EditorInfo.IME_ACTION_SEARCH) {
if (v?.text.isNullOrEmpty()) { if (v?.text.isNullOrEmpty()) {
loadData() loadData()
}else{ } else {
var toString = v?.text.toString() var toString = v?.text.toString()
if (toString.startsWith("/")) { if (toString.startsWith("/")) {
toString = toString.substring(1) toString = toString.substring(1)
loadData(toString) loadData(toString)
}else{ } else {
viewBinding.searchPick.isVisible = true viewBinding.searchPick.isVisible = true
adapter.item?.search(toString) adapter.item?.search(toString)
} }
@ -137,7 +160,7 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
codeDataBase.getCodeDao().findCodeBySection(section.code) codeDataBase.getCodeDao().findCodeBySection(section.code)
} else { } else {
codeDataBase.getCodeDao() codeDataBase.getCodeDao()
.findCodeByCodeOrTranslateFromSection(key, section.code) .findCodeByCodeOrTranslateFromSection(key, section.code)
} }
if (list.isNullOrEmpty()) { if (list.isNullOrEmpty()) {
group.remove(section) group.remove(section)
@ -147,25 +170,33 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
} }
if (group.isNotEmpty()) { if (group.isNotEmpty()) {
adapter = CodeTableAdapter(this, group, item, viewBinding.codeRecyclerB) adapter = CodeTableAdapter(this, group, item, viewBinding)
adapter.setVersionMap(versionMap) adapter.setVersionMap(versionMap)
adapter.setTypeNameMap(typeNameMap) adapter.setTypeNameMap(typeNameMap)
adapter.setSectionMap(sectionMap) adapter.setSectionMap(sectionMap)
if (adapter.item == null) {
adapter.item = CodeTableItemAdapter(viewBinding.codeRecyclerB, item[0])
adapter.item!!.versionMap = versionMap
adapter.item!!.typeNameMap = typeNameMap
adapter.item!!.sectionMap = sectionMap
CodeTableAdapter.i = group[0].translate
}
runOnUiThread { runOnUiThread {
/* adapter.labelFunction = { _, _, string -> viewBinding.codeRecyclerB.adapter = adapter.item
// section = string /* adapter.labelFunction = { _, _, string ->
if (string.isEmpty()) { // section = string
loadData() if (string.isEmpty()) {
} loadData()
loadData(string) }
}*/ loadData(string)
}*/
viewBinding.displayView.isVisible = false viewBinding.displayView.isVisible = false
viewBinding.progressBar.isVisible = false viewBinding.progressBar.isVisible = false
viewBinding.expandableListView.isVisible = true viewBinding.expandableListView.isVisible = true
viewBinding.expandableListView.layoutManager = LinearLayoutManager(this) viewBinding.expandableListView.layoutManager = LinearLayoutManager(this)
viewBinding.expandableListView.setAdapter(adapter) viewBinding.expandableListView.adapter = adapter
// viewBinding.expandableListView.swapAdapter(adapter, true) // viewBinding.expandableListView.swapAdapter(adapter, true)
} }
} else { } else {
notFindKey(key) notFindKey(key)
@ -174,6 +205,7 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
} }
lateinit var adapter: CodeTableAdapter lateinit var adapter: CodeTableAdapter
/** /**
* 没有找到节 * 没有找到节
* @param key String? * @param key String?
@ -186,11 +218,11 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
val spannableString = SpannableString(tip) val spannableString = SpannableString(tip)
if (start > -1) { if (start > -1) {
spannableString.setSpan( spannableString.setSpan(
object : ClickableSpan() { object : ClickableSpan() {
override fun onClick(p0: View) { override fun onClick(p0: View) {
loadData() loadData()
} }
}, start, start + action.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE }, start, start + action.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
) )
} }
viewBinding.displayView.movementMethod = LinkMovementMethod.getInstance() viewBinding.displayView.movementMethod = LinkMovementMethod.getInstance()
@ -202,6 +234,7 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
viewBinding.expandableListView.isVisible = false viewBinding.expandableListView.isVisible = false
viewBinding.progressBar.isVisible = false viewBinding.progressBar.isVisible = false
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_code_table, menu) menuInflater.inflate(R.menu.menu_code_table, menu)
return true return true
@ -212,6 +245,7 @@ class CodeTableActivity : BaseActivity<ActivityCodeTableBinding>() {
moveTaskToBack(true); moveTaskToBack(true);
// ifNeedFinish() // ifNeedFinish()
} }
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityCodeTableBinding { override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityCodeTableBinding {
return ActivityCodeTableBinding.inflate(layoutInflater) return ActivityCodeTableBinding.inflate(layoutInflater)
} }

View File

@ -3,56 +3,40 @@ package com.coldmint.rust.pro.adapters
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.Color 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.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
import com.coldmint.rust.core.database.code.CodeDataBase
import com.coldmint.rust.core.database.code.CodeInfo import com.coldmint.rust.core.database.code.CodeInfo
import com.coldmint.rust.core.database.code.SectionInfo import com.coldmint.rust.core.database.code.SectionInfo
import com.coldmint.rust.core.tool.LineParser import com.coldmint.rust.core.tool.LineParser
import com.coldmint.rust.pro.R import com.coldmint.rust.pro.R
import com.coldmint.rust.pro.databinding.CodeTableItemBinding import com.coldmint.rust.pro.databinding.ActivityCodeTableBinding
import com.coldmint.rust.pro.databinding.ItemCodetableBinding 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.gms.common.internal.Objects
import com.google.android.material.chip.Chip
import com.muqing.VH import com.muqing.VH
import java.util.concurrent.Executors
class CodeTableAdapter( class CodeTableAdapter(
val context: Context, val context: Context,
private val group: List<SectionInfo>, private val group: List<SectionInfo>,
private val itemList: List<List<CodeInfo>>, private val itemList: List<List<CodeInfo>>,
val recyclerView: RecyclerView private val binding: ActivityCodeTableBinding
) : RecyclerView.Adapter<VH<ItemCodetableBinding>>() { ) : RecyclerView.Adapter<VH<ItemCodetableBinding>>() {
private var versionMap: HashMap<Int, String>? = null private var versionMap: HashMap<Int, String>? = null
private var typeNameMap: HashMap<String, String>? = null private var typeNameMap: HashMap<String, String>? = null
private var sectionMap: HashMap<String, String>? = null private var sectionMap: HashMap<String, String>? = null
private val executorService by lazy {
Executors.newSingleThreadExecutor() /* private val executorService by lazy {
} Executors.newSingleThreadExecutor()
}*/
private val lineParser = LineParser() private val lineParser = LineParser()
//Label点击事件 //Label点击事件
var labelFunction: ((Int, View, String) -> Unit)? = null // var labelFunction: ((Int, View, String) -> Unit)? = null
private val developerMode by lazy { /* private val developerMode by lazy {
AppSettings AppSettings
.getValue(AppSettings.Setting.DeveloperMode, false) .getValue(AppSettings.Setting.DeveloperMode, false)
} }*/
/** /**
* 节名映射 * 节名映射
@ -207,15 +191,17 @@ class CodeTableAdapter(
return group.size return group.size
} }
init {
lineParser.symbol = ","
}
companion object { companion object {
var i: String = null.toString() var i: String = null.toString()
var pick: Int = -1 var pick: Int = 0
var pickString: String = "" var pickString: String = ""
var picklist: MutableList<Int> = mutableListOf()
}
var item: CodeTableItemAdapter? = null
init {
lineParser.symbol = ","
} }
@SuppressLint("StringFormatInvalid") @SuppressLint("StringFormatInvalid")
@ -228,9 +214,14 @@ class CodeTableAdapter(
holder.binging.message.text = format holder.binging.message.text = format
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
i = group[position].translate i = group[position].translate
item = ITEM(itemList[position]) if (item != null) {
recyclerView.adapter = item item!!.list = itemList[position]
notifyDataSetChanged() binding.codeRecyclerB.adapter = item
notifyDataSetChanged()
}
if (!binding.edittext.text.isNullOrEmpty())
binding.edittext.setText("")
// notifyItemChanged(p) // notifyItemChanged(p)
} }
if (Objects.equal(group[position].translate, i)) { if (Objects.equal(group[position].translate, i)) {
@ -242,167 +233,4 @@ class CodeTableAdapter(
} }
} }
var item: ITEM? = null
inner class ITEM(val list: List<CodeInfo>) : RecyclerView.Adapter<VH<CodeTableItemBinding>>() {
//在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<CodeTableItemBinding> {
return VH(CodeTableItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
override fun getItemCount(): Int {
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<CodeTableItemBinding>, position: Int) {
val resultView: CodeTableItemBinding = holder.binging
val codeInfo = list[position]
contains(codeInfo.description, resultView.descriptionView)
resultView.descriptionView.setOnClickListener {
GlobalMethod.copyText(it.context, codeInfo.description, it)
}
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 materialBottomDialog = MaterialBottomDialog(it.context)
materialBottomDialog.setTitle(R.string.code_demo)
materialBottomDialog.setMessage(demo)
materialBottomDialog.show()
}
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 ->
isNotEmpty = true
val text = sectionMap?.get(lineData) ?: lineData
val chip = Chip(context)
chip.text = text
chip.setOnClickListener {
labelFunction?.invoke(lineNum, it, text)
}
// resultView.chipGroup.addView(chip)
true
}
// resultView.chipGroup.isVisible = isNotEmpty
resultView.valueTypeView.setOnClickListener {
val handler = Handler(Looper.getMainLooper())
executorService.submit {
val codeDataBase = CodeDataBase.getInstance(context)
val typeInfo = codeDataBase.getValueTypeDao().findTypeByType(codeInfo.type)
if (typeInfo == null) {
handler.post {
handler.post {
MaterialDialog(context).show {
title(text = codeInfo.type).message(
text = String.format(
context.getString(
R.string.unknown_type
), codeInfo.type
)
)
.positiveButton(R.string.dialog_ok)
}
}
}
} else {
if (developerMode) {
val stringBuilder = StringBuilder()
stringBuilder.append("介绍:")
stringBuilder.append(typeInfo.describe)
stringBuilder.append("\n附加信息:")
stringBuilder.append(typeInfo.external)
stringBuilder.append("\n关联的自动提示:")
stringBuilder.append(typeInfo.list)
stringBuilder.append("\n光标偏差:")
stringBuilder.append(typeInfo.offset)
stringBuilder.append("\n标签:")
stringBuilder.append(typeInfo.tag)
stringBuilder.append("\n数据规则:")
stringBuilder.append(typeInfo.rule)
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name + "(开发者模式)").message(text = stringBuilder.toString())
.positiveButton(R.string.dialog_ok)
}
}
} else {
if (typeInfo.describe == "@search(code)") {
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name).message(text = codeInfo.description)
.positiveButton(R.string.dialog_ok)
}
}
} else {
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name).message(text = typeInfo.describe)
.positiveButton(R.string.dialog_ok)
}
}
}
}
}
}
}
resultView.versionView.text =
versionMap?.get(codeInfo.addVersion) ?: codeInfo.addVersion.toString()
}
}
} }

View File

@ -0,0 +1,223 @@
package com.coldmint.rust.pro.adapters
import android.annotation.SuppressLint
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.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
import com.coldmint.rust.core.database.code.CodeInfo
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.dialog.MaterialBottomDialog
import com.coldmint.rust.pro.tool.AppSettings
import com.coldmint.rust.pro.tool.GlobalMethod
import com.google.android.material.chip.Chip
import com.muqing.VH
import java.util.concurrent.Executors
class CodeTableItemAdapter(val recyclerView: RecyclerView,
var list: List<CodeInfo>) : RecyclerView.Adapter<VH<CodeTableItemBinding>>() {
private val lineParser = LineParser()
init {
lineParser.symbol = ","
}
var labelFunction: ((Int, View, String) -> Unit)? = null
var versionMap: HashMap<Int, String>? = null
var typeNameMap: HashMap<String, String>? = null
var sectionMap: HashMap<String, String>? = null
private val executorService by lazy {
Executors.newSingleThreadExecutor()
}
private val developerMode by lazy {
AppSettings
.getValue(AppSettings.Setting.DeveloperMode, false)
}
//在list查找是否有这个关键字
fun search(keyword: String) {
CodeTableAdapter.pickString = keyword
for (i in list.indices) {
if (list[i].translate.contains(keyword) || list[i].description.contains(keyword) || list[i].code.contains(keyword)) {
CodeTableAdapter.picklist.add(i)
}
}
(recyclerView.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(CodeTableAdapter.pick, 0)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH<CodeTableItemBinding> {
return VH(CodeTableItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
override fun getItemCount(): Int {
return list.size
}
private fun contains(string: String, textView: TextView) {
if (string.contains(CodeTableAdapter.pickString)) {
val spannableText = SpannableStringBuilder(string)
val highlightWord = CodeTableAdapter.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
}
}
private fun containsB(string: String, textView: TextView) {
if (string.contains(CodeTableAdapter.pickString)) {
val spannableText = SpannableStringBuilder(string)
val highlightWord = CodeTableAdapter.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.BLUE)
spannableText.setSpan(backgroundSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
}
textView.text = spannableText
} else {
textView.text = string
}
}
@SuppressLint("StringFormatInvalid")
override fun onBindViewHolder(holder: VH<CodeTableItemBinding>, position: Int) {
val context = holder.itemView.context
val resultView: CodeTableItemBinding = holder.binging
val codeInfo = list[position]
contains(codeInfo.description, resultView.descriptionView)
resultView.descriptionView.setOnClickListener {
GlobalMethod.copyText(it.context, codeInfo.description, it)
}
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 materialBottomDialog = MaterialBottomDialog(it.context)
materialBottomDialog.setTitle(R.string.code_demo)
materialBottomDialog.setMessage(demo)
materialBottomDialog.show()
}
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
var isNotEmpty = false
lineParser.analyse { lineNum, lineData, isEnd ->
isNotEmpty = true
val text = sectionMap?.get(lineData) ?: lineData
val chip = Chip(context)
chip.text = text
chip.setOnClickListener {
labelFunction?.invoke(lineNum, it, text)
}
// resultView.chipGroup.addView(chip)
true
}
// resultView.chipGroup.isVisible = isNotEmpty
resultView.valueTypeView.setOnClickListener {
val handler = Handler(Looper.getMainLooper())
executorService.submit {
val codeDataBase = CodeDataBase.getInstance(context)
val typeInfo = codeDataBase.getValueTypeDao().findTypeByType(codeInfo.type)
if (typeInfo == null) {
handler.post {
handler.post {
MaterialDialog(context).show {
title(text = codeInfo.type).message(
text = String.format(
context.getString(
R.string.unknown_type
), codeInfo.type
)
)
.positiveButton(R.string.dialog_ok)
}
}
}
} else {
if (developerMode) {
val stringBuilder = StringBuilder()
stringBuilder.append("介绍:")
stringBuilder.append(typeInfo.describe)
stringBuilder.append("\n附加信息:")
stringBuilder.append(typeInfo.external)
stringBuilder.append("\n关联的自动提示:")
stringBuilder.append(typeInfo.list)
stringBuilder.append("\n光标偏差:")
stringBuilder.append(typeInfo.offset)
stringBuilder.append("\n标签:")
stringBuilder.append(typeInfo.tag)
stringBuilder.append("\n数据规则:")
stringBuilder.append(typeInfo.rule)
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name + "(开发者模式)").message(text = stringBuilder.toString())
.positiveButton(R.string.dialog_ok)
}
}
} else {
if (typeInfo.describe == "@search(code)") {
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name).message(text = codeInfo.description)
.positiveButton(R.string.dialog_ok)
}
}
} else {
handler.post {
MaterialDialog(context).show {
title(text = typeInfo.name).message(text = typeInfo.describe)
.positiveButton(R.string.dialog_ok)
}
}
}
}
}
}
}
resultView.versionView.text =
versionMap?.get(codeInfo.addVersion) ?: codeInfo.addVersion.toString()
}
}

View File

@ -0,0 +1,9 @@
package com.coldmint.rust.pro.databean
data class LocaTion(var i: Int, var p: Int,
var text: List<String>){
lateinit var listInt : List<Int>
}

View File

@ -68,15 +68,19 @@
tools:visibility="visible"> tools:visibility="visible">
<ImageView <ImageView
android:id="@+id/listTop"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="3dp" android:layout_marginEnd="3dp"
android:padding="9dp" android:padding="9dp"
android:background="?selectableItemBackground"
android:src="@drawable/animator_expand_on" /> android:src="@drawable/animator_expand_on" />
<ImageView <ImageView
android:id="@+id/listButtom"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:padding="9dp" android:padding="9dp"
android:src="@drawable/animator_expand_off" /> android:src="@drawable/animator_expand_off" />
</LinearLayout> </LinearLayout>