refactor(app): 优化已安装模板界面和功能

- 移除了冗余代码和未使用的导入
- 改进了模板加载逻辑,仅保留本地模板加载功能- 优化了长按菜单操作,移除了删除和订阅相关代码
- 调整了优化项目界面布局和逻辑
-修复了模组路径为空时的异常处理
This commit is contained in:
Cold-Mint 2025-02-09 10:03:27 +08:00
parent c2345e62ba
commit 5f137e0469
Signed by: Cold-Mint
GPG Key ID: C5A9BF8A98E0CE99
6 changed files with 32 additions and 71 deletions

View File

@ -179,7 +179,7 @@ class OptimizeActivity : BaseActivity<ActivityOptimizeBinding>() {
when (type) { when (type) {
"ini", "txt" -> { "ini", "txt" -> {
val content = FileOperator.readFile(file) val content = FileOperator.readFile(file)
if (content == null || content.isEmpty()) { if (content.isNullOrEmpty()) {
//文件为空 //文件为空
val group = mGroupNameMap[getString(R.string.empty_file)] val group = mGroupNameMap[getString(R.string.empty_file)]
if (group != null) { if (group != null) {
@ -422,7 +422,7 @@ class OptimizeActivity : BaseActivity<ActivityOptimizeBinding>() {
val optimizeGroups = mOptimizeGroups.toTypedArray() val optimizeGroups = mOptimizeGroups.toTypedArray()
for (group in optimizeGroups) { for (group in optimizeGroups) {
val optimizeItemList: List<OptimizeItem<*>> = mItemNameMap[group.groupName]!! val optimizeItemList: List<OptimizeItem<*>> = mItemNameMap[group.groupName]!!
if (optimizeItemList.size > 0) { if (optimizeItemList.isNotEmpty()) {
mOptimizeItem.add(optimizeItemList) mOptimizeItem.add(optimizeItemList)
} else { } else {
mOptimizeGroups.remove(group) mOptimizeGroups.remove(group)
@ -467,6 +467,11 @@ class OptimizeActivity : BaseActivity<ActivityOptimizeBinding>() {
finish() finish()
} else { } else {
val modPath = bundle.getString("modPath") val modPath = bundle.getString("modPath")
if (modPath.isNullOrBlank()){
Toast.makeText(this, "无效请求缺少modPath", Toast.LENGTH_SHORT).show()
finish()
return
}
val file = File(modPath) val file = File(modPath)
if (file.exists() && file.isDirectory) { if (file.exists() && file.isDirectory) {
val modClass = ModClass(File(modPath)) val modClass = ModClass(File(modPath))

View File

@ -61,12 +61,7 @@ class OptimizeAdapter(
view: View?, view: View?,
parent: ViewGroup parent: ViewGroup
): View { ): View {
var convertView: View val convertView: View = view ?: mInflater.inflate(R.layout.optimization_group, parent, false)
if (view == null) {
convertView = mInflater.inflate(R.layout.optimization_group, parent, false)
} else {
convertView = view
}
val nameView = convertView.findViewById<TextView>(R.id.nameView) val nameView = convertView.findViewById<TextView>(R.id.nameView)
val numView = convertView.findViewById<TextView>(R.id.numView) val numView = convertView.findViewById<TextView>(R.id.numView)
val groupCheckBox = convertView.findViewById<CheckBox>(R.id.groupCheckBox) val groupCheckBox = convertView.findViewById<CheckBox>(R.id.groupCheckBox)

View File

@ -4,9 +4,6 @@ import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.ExpandableListView import android.widget.ExpandableListView
@ -15,11 +12,7 @@ import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.MutableLiveData
import com.coldmint.dialog.CoreDialog import com.coldmint.dialog.CoreDialog
import com.coldmint.rust.core.LocalTemplatePackage
import com.coldmint.rust.core.dataBean.template.LocalTemplateFile
import com.coldmint.rust.core.dataBean.template.Template
import com.coldmint.rust.core.dataBean.template.TemplatePackage import com.coldmint.rust.core.dataBean.template.TemplatePackage
import com.coldmint.rust.core.debug.LogCat import com.coldmint.rust.core.debug.LogCat
import com.coldmint.rust.core.tool.FileOperator import com.coldmint.rust.core.tool.FileOperator
@ -30,13 +23,6 @@ import com.coldmint.rust.pro.base.BaseFragment
import com.coldmint.rust.pro.databinding.FragmentInstalledTemplateBinding import com.coldmint.rust.pro.databinding.FragmentInstalledTemplateBinding
import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.AppSettings
import com.coldmint.rust.pro.viewmodel.InstalledTemplateViewModel import com.coldmint.rust.pro.viewmodel.InstalledTemplateViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import org.json.JSONException
import org.json.JSONObject
import java.io.File
import java.util.*
class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>() { class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>() {
private val viewModel: InstalledTemplateViewModel by lazy { private val viewModel: InstalledTemplateViewModel by lazy {
@ -82,37 +68,15 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
val packedPos = (parent as ExpandableListView).getExpandableListPosition(flatPos) val packedPos = (parent as ExpandableListView).getExpandableListPosition(flatPos)
val groupPosition = ExpandableListView.getPackedPositionGroup(packedPos) val groupPosition = ExpandableListView.getPackedPositionGroup(packedPos)
val childPosition = ExpandableListView.getPackedPositionChild(packedPos) val childPosition = ExpandableListView.getPackedPositionChild(packedPos)
if (childPosition == -1) { //长按的是父项 if (childPosition == -1) {
//这里做关于父项的相关操作......
val numView = view.findViewById<TextView>(R.id.template_num)
val templateClass = val templateClass =
mTemplateAdapter.getGroup(groupPosition) as TemplatePackage mTemplateAdapter.getGroup(groupPosition) as TemplatePackage
CoreDialog(requireContext()).setTitle(R.string.template_info) CoreDialog(requireContext()).setTitle(R.string.template_info)
.setMessage( .setMessage(
templateClass.getDescription() templateClass.getDescription()
).setCancelable(false).setPositiveButton( ).setCancelable(false).setPositiveButton(
if (templateClass.isLocal()) { R.string.dialog_ok
R.string.delete_title
} else {
R.string.de_subscription
}
) { ) {
numView.setText(R.string.del_moding)
templateClass.delete(
""
) {
if (it) {
viewModel.loadTemplate(requireContext())
} else {
Toast.makeText(
requireContext(),
R.string.delete_error,
Toast.LENGTH_SHORT
).show()
}
}
}.setNegativeButton(R.string.dialog_cancel) {
}.show() }.show()
} else { //长按的是子项 } else { //长按的是子项
//这里做关于子项的相关操作....... //这里做关于子项的相关操作.......
@ -121,7 +85,7 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
} }
viewBinding.swipeRefreshLayout.setOnRefreshListener { viewBinding.swipeRefreshLayout.setOnRefreshListener {
viewModel.loadTemplate(requireContext()) viewModel.loadLocalTemplate(requireContext())
viewBinding.swipeRefreshLayout.isRefreshing = false viewBinding.swipeRefreshLayout.isRefreshing = false
} }
} }
@ -177,10 +141,9 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
val path = viewModel.createPathLiveData.value.toString() val path = viewModel.createPathLiveData.value.toString()
mTemplateAdapter.setCreatePath(path) mTemplateAdapter.setCreatePath(path)
LogCat.d("创建目录观察者", "模板适配器设置目录为${path}") LogCat.d("创建目录观察者", "模板适配器设置目录为${path}")
viewModel.loadTemplate(requireContext()) viewModel.loadLocalTemplate(requireContext())
} }
override fun getViewBindingObject(layoutInflater: LayoutInflater): FragmentInstalledTemplateBinding { override fun getViewBindingObject(layoutInflater: LayoutInflater): FragmentInstalledTemplateBinding =
return FragmentInstalledTemplateBinding.inflate(layoutInflater) FragmentInstalledTemplateBinding.inflate(layoutInflater)
}
} }

View File

@ -249,10 +249,6 @@ class ModFragment : BaseFragment<FragmentModBinding>() {
configurationManager?.readData() configurationManager?.readData()
val works: MutableList<String> = ArrayList() val works: MutableList<String> = ArrayList()
if (modClass.modFile.isDirectory) { if (modClass.modFile.isDirectory) {
// val developerMode = AppSettings.getValue(AppSettings.Setting.DeveloperMode, false)
// if (developerMode) {
// works.add(getString(R.string.generate_error_report))
// }
if (GlobalMethod.isActive) { if (GlobalMethod.isActive) {
works.add(getString(R.string.mod_action1)) works.add(getString(R.string.mod_action1))
if (modClass.hasInfo()) { if (modClass.hasInfo()) {
@ -265,7 +261,6 @@ class ModFragment : BaseFragment<FragmentModBinding>() {
works.add(getString(R.string.optimization)) works.add(getString(R.string.optimization))
works.add(getString(R.string.packmod)) works.add(getString(R.string.packmod))
} }
works.add(getString(R.string.release))
if (configurationData != null) { if (configurationData != null) {
val title = configurationData.updateTitle val title = configurationData.updateTitle
if (title.isNotEmpty()) { if (title.isNotEmpty()) {

View File

@ -76,20 +76,11 @@ class InstalledTemplateViewModel : BaseViewModel() {
return itemList return itemList
} }
/**
* 加载本地和网络模板
* 如果设置了[InstalledTemplateViewModel.setLoadCallBack]回调那么会调用接口.
* 请在回调内使用[InstalledTemplateViewModel.getGroupData][InstalledTemplateViewModel.getItemData]获取加载结果
* @param context Context
*/
fun loadTemplate(context: Context) {
}
/** /**
* 加载本地模板 * 加载本地模板
* @param context Context * @param context Context
*/ */
private fun loadLocalTemplate(context: Context) { fun loadLocalTemplate(context: Context) {
val templateDirectory = File( val templateDirectory = File(
AppSettings.getValue( AppSettings.getValue(
AppSettings.Setting.TemplateDirectory, AppSettings.Setting.TemplateDirectory,
@ -123,16 +114,25 @@ class InstalledTemplateViewModel : BaseViewModel() {
val s = jsonObject.getString("language") val s = jsonObject.getString("language")
if (s == "ALL" || s == environmentLanguage) { if (s == "ALL" || s == environmentLanguage) {
temList.add(templateFile) temList.add(templateFile)
LogCat.d("加载本地模板", "已成功分配" + file.absolutePath) LogCat.d(
"加载本地模板",
"已成功分配" + file.absolutePath
)
} else { } else {
LogCat.w("加载本地模板", "不符合语言的项目" + file.absolutePath) LogCat.w(
"加载本地模板",
"不符合语言的项目" + file.absolutePath
)
} }
} catch (exception: JSONException) { } catch (exception: JSONException) {
exception.printStackTrace() exception.printStackTrace()
} }
} else { } else {
temList.add(templateFile) temList.add(templateFile)
LogCat.d("加载本地模板", "已成功分配" + file.absolutePath) LogCat.d(
"加载本地模板",
"已成功分配" + file.absolutePath
)
} }
} else { } else {
LogCat.w("加载本地模板", "无法分配" + file.absolutePath) LogCat.w("加载本地模板", "无法分配" + file.absolutePath)
@ -153,7 +153,10 @@ class InstalledTemplateViewModel : BaseViewModel() {
} }
} }
} else { } else {
LogCat.w("加载本地模板", "目录" + templateDirectory.absolutePath + "内,没有文件,无法加载。") LogCat.w(
"加载本地模板",
"目录" + templateDirectory.absolutePath + "内,没有文件,无法加载。"
)
} }
} else { } else {
LogCat.e("加载本地模板", "模板目录不存在或不是文件夹" + templateDirectory.absolutePath) LogCat.e("加载本地模板", "模板目录不存在或不是文件夹" + templateDirectory.absolutePath)

View File

@ -11,7 +11,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="16dp" android:layout_marginStart="24dp"
style="@style/TextAppearance.Material3.TitleMedium" style="@style/TextAppearance.Material3.TitleMedium"
android:text="优化项目" /> android:text="优化项目" />