From 5d4b9c7d2948eae1bfec18e6b389fa5f7462b280 Mon Sep 17 00:00:00 2001 From: Cold-Mint Date: Sun, 9 Feb 2025 10:17:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app):=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A1=A8=E9=A1=B5=E9=9D=A2=E5=B8=83=E5=B1=80=E5=92=8C?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 activity_code_table.xml 布局,简化结构并添加工具栏 - 重写 CodeTableAdapter,改为使用 BaseExpandableListAdapter -移除 CodeTableItemAdapter,直接在 CodeTableAdapter 中处理条目布局 - 更新代码表项布局,使用新的 code_table_group.xml 文件 - 优化搜索和过滤功能,使用 InputDialog 替代原有的搜索框 - 改进代码示例展示方式,使用 MaterialAlertDialog 替代底部对话框 - 优化类型信息展示,根据开发者模式显示不同内容 --- .../coldmint/rust/pro/CodeTableActivity.kt | 180 ++++-------- .../rust/pro/adapters/CodeTableAdapter.kt | 259 +++++++++++++----- .../rust/pro/adapters/CodeTableItemAdapter.kt | 225 --------------- .../main/res/layout/activity_code_table.xml | 135 ++------- app/src/main/res/layout/code_table_group.xml | 22 ++ app/src/main/res/layout/code_table_item.xml | 5 +- 6 files changed, 296 insertions(+), 530 deletions(-) delete mode 100644 app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableItemAdapter.kt create mode 100644 app/src/main/res/layout/code_table_group.xml 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 9fcecb5..4b54382 100644 --- a/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/CodeTableActivity.kt @@ -1,25 +1,18 @@ package com.coldmint.rust.pro -import android.annotation.SuppressLint import android.graphics.Color import android.os.Bundle -import android.text.Editable import android.text.Spannable import android.text.SpannableString -import android.text.TextWatcher import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan -import android.view.LayoutInflater -import android.view.Menu -import android.view.View -import android.view.inputmethod.EditorInfo +import android.view.* import androidx.core.view.isVisible -import androidx.recyclerview.widget.LinearLayoutManager +import com.coldmint.dialog.InputDialog import com.coldmint.rust.core.database.code.CodeDataBase import com.coldmint.rust.core.database.code.CodeInfo import com.coldmint.rust.core.database.code.SectionInfo 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.databinding.ActivityCodeTableBinding import java.util.concurrent.Executors @@ -30,94 +23,35 @@ class CodeTableActivity : BaseActivity() { override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) { if (canUseView) { title = getString(R.string.code_table) - viewBinding.edittext.hint = title - setReturnButton() loadData() - //设置上下选择按钮 - viewBinding.listTop.setOnClickListener { - if (CodeTableAdapter.picklist.isEmpty()) { - return@setOnClickListener - } - - if (--CodeTableAdapter.pick < 0) { - CodeTableAdapter.pick = 0 - } - val get = CodeTableAdapter.picklist[CodeTableAdapter.pick] - (viewBinding.codeRecyclerB.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(get, 0) - } - viewBinding.listButtom.setOnClickListener { - if (CodeTableAdapter.picklist.isEmpty()) { - return@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) - } - viewBinding.edittext.addTextChangedListener(object : TextWatcher { - 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()) { - loadData() - return - } - loadData(a.toString())*/ - if (a.isNullOrEmpty()) { - viewBinding.searchPick.isVisible = false - loadData() - } - } - - override fun afterTextChanged(a: Editable?) { - } - }) - viewBinding.edittext.setOnEditorActionListener { v, p1, _ -> - if (p1 == EditorInfo.IME_ACTION_SEARCH) { - if (v?.text.isNullOrEmpty()) { - loadData() - } 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 - } - viewBinding.back.setOnClickListener { moveTaskToBack(true) } } } - /* - override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { - if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) { - ifNeedFinish() - return true - } - return super.onKeyDown(keyCode, event) + override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) { + ifNeedFinish() + return true } - */ + return super.onKeyDown(keyCode, event) + } + fun ifNeedFinish() { + if (filterMode) { + loadData() + } else { + finish() + } + } + /** * 加载数据 * @param key String? 键 * @param section String? 节 */ fun loadData(key: String? = null, section: String? = null) { - //如果 key start 有 / 则取后的string executorService.submit { filterMode = key != null || section != null val sectionMap = HashMap() @@ -156,9 +90,9 @@ class CodeTableActivity : BaseActivity() { codeDataBase.getCodeDao().findCodeBySection(section.code) } else { codeDataBase.getCodeDao() - .findCodeByCodeOrTranslateFromSection(key, section.code) + .findCodeByCodeOrTranslateFromSection(key, section.code) } - if (list.isNullOrEmpty()) { + if (list == null || list.isEmpty()) { group.remove(section) } else { item.add(list) @@ -166,33 +100,18 @@ class CodeTableActivity : BaseActivity() { } if (group.isNotEmpty()) { - adapter = CodeTableAdapter(this, group, item, viewBinding) + val adapter = CodeTableAdapter(this, group, item) adapter.setVersionMap(versionMap) adapter.setTypeNameMap(typeNameMap) 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 { - viewBinding.codeRecyclerB.adapter = adapter.item - /* adapter.labelFunction = { _, _, string -> - // section = string - if (string.isEmpty()) { - loadData() - } - loadData(string) - }*/ + adapter.labelFunction = { index, view, string -> + loadData(section = string) + } viewBinding.displayView.isVisible = false viewBinding.progressBar.isVisible = false viewBinding.expandableListView.isVisible = true - viewBinding.expandableListView.layoutManager = LinearLayoutManager(this) - viewBinding.expandableListView.adapter = adapter -// viewBinding.expandableListView.swapAdapter(adapter, true) + viewBinding.expandableListView.setAdapter(adapter) } } else { notFindKey(key) @@ -200,30 +119,27 @@ class CodeTableActivity : BaseActivity() { } } - lateinit var adapter: CodeTableAdapter - /** * 没有找到节 * @param key String? */ - @SuppressLint("StringFormatInvalid") - private fun notFindKey(key: String?) { - if (!key.isNullOrBlank()) { + fun notFindKey(key: String?) { + if (key != null && key.isNotBlank()) { val tip = String.format(getString(R.string.not_find_code_name), key) val action = getString(R.string.not_find_units_action) val start = tip.indexOf(action) val spannableString = SpannableString(tip) if (start > -1) { spannableString.setSpan( - object : ClickableSpan() { - override fun onClick(p0: View) { - loadData() - } - }, start, start + action.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + object : ClickableSpan() { + override fun onClick(p0: View) { + loadData() + } + }, start, start + action.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) } - viewBinding.displayView.movementMethod = LinkMovementMethod.getInstance() - viewBinding.displayView.highlightColor = Color.parseColor("#36969696") + viewBinding.displayView.movementMethod = LinkMovementMethod.getInstance(); + viewBinding.displayView.highlightColor = Color.parseColor("#36969696"); viewBinding.displayView.text = spannableString } @@ -232,16 +148,36 @@ class CodeTableActivity : BaseActivity() { viewBinding.progressBar.isVisible = false } + override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_code_table, menu) + val inflater = menuInflater + inflater.inflate(R.menu.menu_code_table, menu) return true } - @Deprecated("Deprecated in Java", ReplaceWith("moveTaskToBack(true)")) - override fun onBackPressed() { - //显示桌面 - moveTaskToBack(true) -// ifNeedFinish() + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.filter_units -> { + 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 -> { + ifNeedFinish() + return true + } + } + return super.onOptionsItemSelected(item) } override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityCodeTableBinding { 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 b85e465..6d8c2d6 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 @@ -1,30 +1,55 @@ package com.coldmint.rust.pro.adapters -import android.annotation.SuppressLint import android.content.Context +import android.os.Handler +import android.os.Looper import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView +import android.widget.BaseExpandableListAdapter +import androidx.core.view.isVisible +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.SectionInfo import com.coldmint.rust.core.tool.LineParser import com.coldmint.rust.pro.R -import com.coldmint.rust.pro.base.BaseVh -import com.coldmint.rust.pro.databinding.ActivityCodeTableBinding -import com.coldmint.rust.pro.databinding.ItemCodetableBinding +import com.coldmint.rust.pro.databinding.CodeTableGroupBinding +import com.coldmint.rust.pro.databinding.CodeTableItemBinding +import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.GlobalMethod +import com.google.android.material.chip.Chip +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import java.util.concurrent.Executors class CodeTableAdapter( val context: Context, private val group: List, - private val itemList: List>, - private val binding: ActivityCodeTableBinding -) : RecyclerView.Adapter>() { + private val itemList: List> +) : BaseExpandableListAdapter() { + + private val layoutInflater = LayoutInflater.from(context) + private var versionMap: HashMap? = null private var typeNameMap: HashMap? = null private var sectionMap: HashMap? = null + private val executorService by lazy { + Executors.newSingleThreadExecutor() + } private val lineParser = LineParser() + //Label点击事件 + var labelFunction: ((Int, View, String) -> Unit)? = null + private val developerMode by lazy { + AppSettings + .getValue(AppSettings.Setting.DeveloperMode, false) + } + + init { + lineParser.symbol = "," + } + + /** * 节名映射 * @param sectionMap HashMap @@ -33,6 +58,7 @@ class CodeTableAdapter( this.sectionMap = sectionMap } + /** * 设置类型名称映射 * @param typeNameMap HashMap? @@ -49,73 +75,174 @@ class CodeTableAdapter( this.versionMap = versionMap } - override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int - ): BaseVh { - return BaseVh( - ItemCodetableBinding.inflate( - LayoutInflater.from(parent.context), - parent, - false - ) - ) - } - - override fun getItemCount(): Int { + override fun getGroupCount(): Int { return group.size } - companion object { - var i: String = null.toString() - var pick: Int = 0 - var pickString: String = "" - var picklist: MutableList = mutableListOf() + override fun getChildrenCount(groupPosition: Int): Int { + return itemList[groupPosition].size } - var item: CodeTableItemAdapter? = null - - init { - lineParser.symbol = "," + override fun getGroup(groupPosition: Int): Any { + return group[groupPosition] } - @SuppressLint("NotifyDataSetChanged", "StringFormatInvalid") - override fun onBindViewHolder(holder: BaseVh, position: Int) { - holder.binging.title.text = group[position].translate - val format = String.format( - context.getString(R.string.filenum), - itemList[position].size - ) - holder.binging.message.text = format - holder.itemView.setOnClickListener { - val finalPosition = holder.layoutPosition - i = group[finalPosition].translate - pick = 0 - pickString = "" - picklist.clear() - if (item != null) { - item!!.list = itemList[position] - binding.codeRecyclerB.adapter = item + override fun getChild(groupPosition: Int, childPosition: Int): Any { + return itemList[groupPosition][childPosition] + } + + override fun getGroupId(groupPosition: Int): Long { + return groupPosition.toLong() + } + + override fun getChildId(groupPosition: Int, childPosition: Int): Long { + return childPosition.toLong() + } + + override fun hasStableIds(): Boolean { + return false + } + + override fun getGroupView( + groupPosition: Int, + isExpanded: Boolean, + convertView: View?, + parent: ViewGroup + ): View { + val resultView: CodeTableGroupBinding = + CodeTableGroupBinding.inflate(layoutInflater, parent, false) + val info = + String.format( + context.getString(R.string.filenum), + itemList[groupPosition].size + ) + resultView.nameView.text = group[groupPosition].translate + resultView.numView.text = info + return resultView.root + } + + override fun getChildView( + groupPosition: Int, + childPosition: Int, + isLastChild: Boolean, + convertView: View?, + parent: ViewGroup + ): View { + val resultView: CodeTableItemBinding = + CodeTableItemBinding.inflate(layoutInflater, parent, false) + val codeInfo = itemList[groupPosition][childPosition] + +// resultView.belongStackLabelView.onLabelClickListener = OnLabelClickListener { index, v, s -> +// } + resultView.descriptionView.text = codeInfo.description + resultView.descriptionView.setOnClickListener { + GlobalMethod.copyText(context, codeInfo.description, it) + } + resultView.titleView.text = codeInfo.translate + resultView.titleView.setOnClickListener { + GlobalMethod.copyText(context, codeInfo.translate, it) + } + + val demo = codeInfo.demo + resultView.imageView.isVisible = demo.isNotBlank() + resultView.imageView.setOnClickListener { + val dialog = MaterialAlertDialogBuilder(context); + dialog.setTitle(R.string.code_demo) + dialog.setMessage(demo) + dialog.setPositiveButton(R.string.dialog_ok){ + v,a-> } - notifyItemChanged(finalPosition) - } - if (group[position].translate == i) { - //背景高亮 - holder.binging.root.setCardBackgroundColor( - GlobalMethod.getThemeColor( - context, - com.google.android.material.R.attr.colorPrimaryContainer - ) - ) - } else { - //背景恢复 - holder.binging.root.setCardBackgroundColor( - GlobalMethod.getThemeColor( - context, - com.google.android.material.R.attr.colorSurface - ) - ) + dialog.show() } + resultView.subTitleView.text = codeInfo.code + resultView.subTitleView.setOnClickListener { + GlobalMethod.copyText(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() + return resultView.root + } + + override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean { + return true } } \ No newline at end of file diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableItemAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableItemAdapter.kt deleted file mode 100644 index 1317fa7..0000000 --- a/app/src/main/java/com/coldmint/rust/pro/adapters/CodeTableItemAdapter.kt +++ /dev/null @@ -1,225 +0,0 @@ -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.base.BaseVh -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 java.util.concurrent.Executors - -class CodeTableItemAdapter(val recyclerView: RecyclerView, - var list: List) : RecyclerView.Adapter>() { - - private val lineParser = LineParser() - - init { - lineParser.symbol = "," - } - - var labelFunction: ((Int, View, String) -> Unit)? = null - var versionMap: HashMap? = null - var typeNameMap: HashMap? = null - var sectionMap: HashMap? = 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 - CodeTableAdapter.pick = 0 - CodeTableAdapter.picklist.clear() - 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): BaseVh { - return BaseVh(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: BaseVh, 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() - - - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_code_table.xml b/app/src/main/res/layout/activity_code_table.xml index 37ef3c4..b164318 100644 --- a/app/src/main/res/layout/activity_code_table.xml +++ b/app/src/main/res/layout/activity_code_table.xml @@ -1,97 +1,32 @@ + android:fitsSystemWindows="true" + tools:context=".ActivateActivity"> - + android:layout_height="?attr/actionBarSize" /> - - - - - - - - - - - - - - - - - - - @@ -99,52 +34,22 @@ + android:layout_height="wrap_content" /> + android:visibility="gone" /> - + - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/code_table_group.xml b/app/src/main/res/layout/code_table_group.xml new file mode 100644 index 0000000..f8ee235 --- /dev/null +++ b/app/src/main/res/layout/code_table_group.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/code_table_item.xml b/app/src/main/res/layout/code_table_item.xml index 8922e57..a1b2c92 100644 --- a/app/src/main/res/layout/code_table_item.xml +++ b/app/src/main/res/layout/code_table_item.xml @@ -61,7 +61,7 @@ android:layout_marginLeft="8dp" android:layout_toRightOf="@id/valueTypeView" android:text="版本信息" /> - + + \ No newline at end of file