278 lines
12 KiB
Kotlin
278 lines
12 KiB
Kotlin
package com.coldmint.rust.pro
|
|
|
|
import android.os.Bundle
|
|
import android.text.Editable
|
|
import android.text.InputType
|
|
import android.text.TextWatcher
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.inputmethod.InputMethodInfo
|
|
import android.widget.AdapterView
|
|
import android.widget.CompoundButton
|
|
import android.widget.Toast
|
|
import androidx.core.view.isVisible
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import com.coldmint.dialog.CoreDialog
|
|
import com.coldmint.rust.core.ModClass
|
|
import com.coldmint.rust.pro.adapters.AttachFileAdapter
|
|
import com.coldmint.rust.pro.base.BaseActivity
|
|
import com.coldmint.rust.pro.databinding.ActivityGlobalOperationsBinding
|
|
import com.coldmint.rust.pro.viewmodel.GlobalOperationsViewModel
|
|
import com.google.android.material.textfield.TextInputEditText
|
|
import com.google.android.material.textfield.TextInputLayout
|
|
import java.io.File
|
|
|
|
/**
|
|
* 全局操作活动
|
|
*/
|
|
class GlobalOperationsActivity : BaseActivity<ActivityGlobalOperationsBinding>() {
|
|
val viewModel by lazy {
|
|
ViewModelProvider(this).get(GlobalOperationsViewModel::class.java)
|
|
}
|
|
|
|
val operationList by lazy {
|
|
resources.getStringArray(R.array.operation_list)
|
|
}
|
|
|
|
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
|
|
if (canUseView) {
|
|
setReturnButton()
|
|
val modPath = intent.getStringExtra("modPath")
|
|
if (modPath == null) {
|
|
showError("请设置模组路径")
|
|
finish()
|
|
return
|
|
}
|
|
val modClass = ModClass(File(modPath))
|
|
val modConfiguration = modClass.modConfigurationManager
|
|
val modConfigurationData = modConfiguration?.readData()
|
|
if (modConfigurationData == null) {
|
|
viewBinding.ruleInputEditText.setText(".+\\.ini|.+\\.template")
|
|
} else {
|
|
viewBinding.ruleInputEditText.setText(modConfigurationData.sourceFileFilteringRule)
|
|
}
|
|
viewModel.setModPath(modPath)
|
|
loadTextWatcher()
|
|
loadOnClickListener()
|
|
viewBinding.recyclerView.layoutManager = LinearLayoutManager(this)
|
|
viewModel.fileListLiveData.observe(this) {
|
|
viewBinding.operationCard.isVisible = true
|
|
viewBinding.resultCard.isVisible = true
|
|
val tip = String.format(getString(R.string.list_of_affected), it.size)
|
|
viewBinding.listTipView.text = tip
|
|
viewBinding.recyclerView.adapter = AttachFileAdapter(this, it)
|
|
}
|
|
viewBinding.enableReCheckBox.setOnCheckedChangeListener { p0, p1 ->
|
|
if (p1) {
|
|
viewBinding.ruleInputLayout.hint = getString(R.string.search_rule)
|
|
} else {
|
|
viewBinding.ruleInputLayout.hint = getString(R.string.search_file_name)
|
|
}
|
|
viewBinding.button.isEnabled =
|
|
!checkTextIsBlank(viewBinding.ruleInputEditText, viewBinding.ruleInputLayout)
|
|
}
|
|
|
|
|
|
viewBinding.typeSpinner.onItemSelectedListener =
|
|
object : AdapterView.OnItemSelectedListener {
|
|
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
|
val data = operationList[p2]
|
|
when (data) {
|
|
getString(R.string.replace_text) -> {
|
|
viewBinding.actionInputLayout1.hint =
|
|
getString(R.string.original_content)
|
|
viewBinding.actionInputLayout2.hint =
|
|
getString(R.string.new_content)
|
|
viewBinding.actionButton.text = getString(R.string.replace)
|
|
viewBinding.actionInputLayout2.isVisible = true
|
|
val thisBlank =
|
|
viewBinding.actionEditText1.text.toString().isBlank()
|
|
val otherBlank =
|
|
viewBinding.actionEditText2.text.toString().isBlank()
|
|
viewBinding.actionButton.isEnabled = !(thisBlank || otherBlank)
|
|
}
|
|
getString(R.string.text_head_additional), getString(R.string.text_tail_additional) -> {
|
|
viewBinding.actionInputLayout1.hint =
|
|
getString(R.string.content)
|
|
viewBinding.actionButton.text = getString(R.string.additional)
|
|
viewBinding.actionInputLayout2.isVisible = false
|
|
viewBinding.actionButton.isEnabled =
|
|
!viewBinding.actionEditText1.text.toString().isBlank()
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onNothingSelected(p0: AdapterView<*>?) {
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载点击事件监听器
|
|
*/
|
|
fun loadOnClickListener() {
|
|
viewBinding.button.setOnClickListener {
|
|
viewModel.findFile(
|
|
viewBinding.ruleInputEditText.text.toString(),
|
|
viewBinding.enableReCheckBox.isChecked
|
|
)
|
|
}
|
|
|
|
|
|
viewBinding.actionButton.setOnClickListener {
|
|
val data = operationList[viewBinding.typeSpinner.selectedItemPosition]
|
|
val type = when (data) {
|
|
getString(R.string.replace_text) -> {
|
|
GlobalOperationsViewModel.OperationType.Replace
|
|
}
|
|
getString(R.string.text_head_additional) -> {
|
|
GlobalOperationsViewModel.OperationType.BeginningAdditional
|
|
}
|
|
getString(R.string.text_tail_additional) -> {
|
|
GlobalOperationsViewModel.OperationType.EndingAdditional
|
|
}
|
|
else -> {
|
|
GlobalOperationsViewModel.OperationType.EndingAdditional
|
|
}
|
|
}
|
|
viewModel.operationFile(
|
|
type,
|
|
viewBinding.actionEditText1.text.toString(),
|
|
viewBinding.actionEditText2.text.toString()
|
|
)
|
|
CoreDialog(this).setTitle(data).setMessage(R.string.figure_out).setPositiveButton(R.string.dialog_ok){
|
|
|
|
}.setCancelable(false).show()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载监听器
|
|
*/
|
|
fun loadTextWatcher() {
|
|
viewBinding.ruleInputEditText.addTextChangedListener(object : TextWatcher {
|
|
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun afterTextChanged(p0: Editable?) {
|
|
viewBinding.button.isEnabled =
|
|
!checkTextIsBlank(viewBinding.ruleInputEditText, viewBinding.ruleInputLayout)
|
|
}
|
|
})
|
|
viewBinding.actionEditText1.addTextChangedListener(object : TextWatcher {
|
|
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun afterTextChanged(p0: Editable?) {
|
|
val data = operationList[viewBinding.typeSpinner.selectedItemPosition]
|
|
when (data) {
|
|
getString(R.string.replace_text) -> {
|
|
val thisBlank = checkTextIsBlank(
|
|
viewBinding.actionEditText1,
|
|
viewBinding.actionInputLayout1
|
|
)
|
|
val otherBlank = viewBinding.actionEditText2.text.toString().isBlank()
|
|
val equal =
|
|
viewBinding.actionEditText1.text.toString() == viewBinding.actionEditText2.text.toString()
|
|
if (equal && !thisBlank) {
|
|
viewBinding.actionInputLayout1.error =
|
|
getString(R.string.substitution_is_same)
|
|
} else {
|
|
viewBinding.actionInputLayout1.isErrorEnabled = false
|
|
viewBinding.actionInputLayout2.isErrorEnabled = false
|
|
}
|
|
viewBinding.actionButton.isEnabled =
|
|
(!thisBlank && !otherBlank) && !equal
|
|
}
|
|
getString(R.string.text_head_additional), getString(R.string.text_tail_additional) -> {
|
|
viewBinding.actionButton.isEnabled = !checkTextIsBlank(
|
|
viewBinding.actionEditText1,
|
|
viewBinding.actionInputLayout1
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
viewBinding.actionEditText2.addTextChangedListener(object : TextWatcher {
|
|
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
}
|
|
|
|
override fun afterTextChanged(p0: Editable?) {
|
|
val data = operationList[viewBinding.typeSpinner.selectedItemPosition]
|
|
when (data) {
|
|
getString(R.string.replace_text) -> {
|
|
val thisBlank = checkTextIsBlank(
|
|
viewBinding.actionEditText2,
|
|
viewBinding.actionInputLayout2
|
|
)
|
|
val otherBlank = viewBinding.actionEditText1.text.toString().isBlank()
|
|
val equal =
|
|
viewBinding.actionEditText1.text.toString() == viewBinding.actionEditText2.text.toString()
|
|
if (equal && !thisBlank) {
|
|
viewBinding.actionInputLayout2.error =
|
|
getString(R.string.substitution_is_same)
|
|
} else {
|
|
viewBinding.actionInputLayout1.isErrorEnabled = false
|
|
viewBinding.actionInputLayout2.isErrorEnabled = false
|
|
}
|
|
viewBinding.actionButton.isEnabled =
|
|
(!thisBlank && !otherBlank) && !equal
|
|
}
|
|
getString(R.string.text_head_additional), getString(R.string.text_tail_additional) -> {
|
|
viewBinding.actionButton.isEnabled = !checkTextIsBlank(
|
|
viewBinding.actionEditText2,
|
|
viewBinding.actionInputLayout2
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
|
|
/**
|
|
* 检查字段是否为空
|
|
* @param inputEditText TextInputEditText
|
|
* @param inputLayout TextInputLayout
|
|
* @return Boolean
|
|
*/
|
|
fun checkTextIsBlank(inputEditText: TextInputEditText, inputLayout: TextInputLayout): Boolean {
|
|
val text = inputEditText.text.toString()
|
|
return if (text.isBlank()) {
|
|
inputLayout.error =
|
|
String.format(getString(R.string.please_input_value), inputLayout.hint.toString())
|
|
true
|
|
} else {
|
|
inputLayout.isErrorEnabled = false
|
|
false
|
|
}
|
|
}
|
|
|
|
|
|
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityGlobalOperationsBinding {
|
|
return ActivityGlobalOperationsBinding.inflate(layoutInflater)
|
|
}
|
|
} |