refactor(app): 重构创建单位活动界面和逻辑

- 移除了 CreateUnitPageAdapter 和 TemplateCommunityFragment
- 使用 FragmentContainerView替代 ViewPager2 和 TabLayout- 简化了 CreateUnitActivity 的布局和代码
- 更新了 InstalledTemplateFragment 的逻辑
- 删除了未使用的菜单资源
This commit is contained in:
Cold-Mint 2025-02-08 21:25:35 +08:00
parent 5cab23f39b
commit 07b5ab73ec
Signed by: Cold-Mint
GPG Key ID: C5A9BF8A98E0CE99
8 changed files with 69 additions and 240 deletions

View File

@ -2,18 +2,14 @@ package com.coldmint.rust.pro
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import com.coldmint.dialog.CoreDialog import androidx.fragment.app.commit
import com.coldmint.rust.pro.adapters.CreateUnitPageAdapter
import com.coldmint.rust.pro.base.BaseActivity import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityCreateUnitBinding import com.coldmint.rust.pro.databinding.ActivityCreateUnitBinding
import com.google.android.material.tabs.TabLayoutMediator import com.coldmint.rust.pro.fragments.InstalledTemplateFragment
class CreateUnitActivity : BaseActivity<ActivityCreateUnitBinding>() { class CreateUnitActivity : BaseActivity<ActivityCreateUnitBinding>() {
private lateinit var createUnitPageAdapter: CreateUnitPageAdapter
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) { override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
if (canUseView) { if (canUseView) {
setTitle(R.string.create_unit) setTitle(R.string.create_unit)
@ -22,61 +18,22 @@ class CreateUnitActivity : BaseActivity<ActivityCreateUnitBinding>() {
} }
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_create_unit, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.help) {
val dialog =
CoreDialog(this).setTitle(R.string.help).setMessage(R.string.template_help_message)
dialog.setPositiveButton(R.string.dialog_ok) {
}
dialog.show()
}
return super.onOptionsItemSelected(item)
}
fun initView() { fun initView() {
val intent = intent val intent = intent
val bundle = intent.getBundleExtra("data") val bundle = intent.getBundleExtra("data")
if (bundle == null) { if (bundle == null) {
Toast.makeText(this, "无效的请求", Toast.LENGTH_SHORT).show() Toast.makeText(this, "无效的请求", Toast.LENGTH_SHORT).show()
finish() finish()
} else { return
createUnitPageAdapter = CreateUnitPageAdapter(this)
viewBinding.viewPager2.adapter = createUnitPageAdapter
TabLayoutMediator(viewBinding.tabLayout, viewBinding.viewPager2) { tab, i ->
tab.text = if (i == 0) {
getString(R.string.installated)
} else {
getString(R.string.template_community)
}
}.attach()
val root = bundle.getString("modPath")
createUnitPageAdapter.setRootPath(root)
createUnitPageAdapter.setCreatePath(bundle.getString("createPath", root))
// registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
// val resultCode = it.resultCode
// when (requestCode) {
// 1 -> if (resultCode == RESULT_OK) {
// val directents = data!!.getStringExtra("Directents")
// if (directents != null) {
// createUnitPageAdapter.setCreatePath(directents)
// }
// }
// 2 -> if (resultCode == RESULT_OK) {
// val path = data!!.getStringExtra("File")
// val intent = Intent()
// intent.putExtra("File", path)
// setResult(RESULT_OK, intent)
// finish()
// }
// }
// }
} }
supportFragmentManager.commit {
add(viewBinding.fragmentContainerView.id, InstalledTemplateFragment().apply {
val root = bundle.getString("modPath")
this.setRootPath(root)
this.setCreatePath(bundle.getString("createPath", root))
})
}
} }

View File

@ -6,7 +6,9 @@ import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.view.KeyEvent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
@ -321,20 +323,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
}*/ }*/
} }
/* mod.setOnMenuItemClickListener {
GlobalMethod.requestStoragePermissions(this) {
if (it) {
viewBinding.mainButton.postOnAnimationDelayed({
// viewBinding.tabLayout.isVisible = true
if (isActive) {
viewBinding.mainButton.show()
}
}, hideViewDelay)
}
}
false
}*/
menu.findItem(R.id.startGame).setOnMenuItemClickListener { menu.findItem(R.id.startGame).setOnMenuItemClickListener {
val packName = AppSettings.getValue( val packName = AppSettings.getValue(
AppSettings.Setting.GamePackage, AppSettings.Setting.GamePackage,
@ -352,15 +340,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
false false
} }
// menu.findItem(R.id.rust_api).setOnMenuItemClickListener {
// val thisIntent = Intent(this, BrowserActivity::class.java)
// thisIntent.putExtra("link", "https://git.coldmint.top/")
// thisIntent.putExtra("javaScriptEnabled", true)
// startActivity(thisIntent)
// false
// }
menu.findItem(R.id.about).setOnMenuItemClickListener { menu.findItem(R.id.about).setOnMenuItemClickListener {
startActivity(Intent(this@MainActivity, AboutActivity::class.java)) startActivity(Intent(this@MainActivity, AboutActivity::class.java))
false false
@ -574,12 +553,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
@Deprecated("Deprecated in Java") override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
override fun onBackPressed() { if (keyCode == KeyEvent.KEYCODE_BACK) {
super.onBackPressed()
val navController = findNavController(R.id.baseFragment)
//判断是否在第一个导航 社区或者仓库
if (navController.currentDestination?.id == navController.graph.startDestinationId) {
MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_close).setMessage( MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_close).setMessage(
String.format( String.format(
Locale.getDefault(), Locale.getDefault(),
@ -590,9 +565,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
finish() finish()
}.setNegativeButton(R.string.dialog_cancel) { _, _ -> }.setNegativeButton(R.string.dialog_cancel) { _, _ ->
}.show() }.show()
} else { return true
finish()
} }
return super.onKeyDown(keyCode, event)
} }
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityMainBinding { override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityMainBinding {

View File

@ -2,29 +2,29 @@ package com.coldmint.rust.pro
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.core.dataBean.ModConfigurationData
import android.os.Handler import android.os.Handler
import com.coldmint.rust.pro.tool.AppSettings
import com.coldmint.rust.pro.tool.GlobalMethod
import android.os.Looper import android.os.Looper
import android.view.KeyEvent import android.view.KeyEvent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View
import android.widget.*
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.coldmint.rust.core.* import com.coldmint.rust.core.CodeTranslate
import com.coldmint.rust.core.CompressionManager
import com.coldmint.rust.core.ModClass
import com.coldmint.rust.core.ModConfigurationManager
import com.coldmint.rust.core.dataBean.ModConfigurationData
import com.coldmint.rust.core.interfaces.CompressionInterceptor import com.coldmint.rust.core.interfaces.CompressionInterceptor
import com.coldmint.rust.core.tool.LineParser
import com.coldmint.rust.core.interfaces.CompressionListener import com.coldmint.rust.core.interfaces.CompressionListener
import com.coldmint.rust.core.interfaces.LineParserEvent import com.coldmint.rust.core.interfaces.LineParserEvent
import com.coldmint.rust.core.tool.FileFinder2 import com.coldmint.rust.core.tool.FileFinder2
import com.coldmint.rust.core.tool.FileOperator import com.coldmint.rust.core.tool.FileOperator
import com.coldmint.rust.core.tool.LineParser
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityPackBinding import com.coldmint.rust.pro.databinding.ActivityPackBinding
import com.coldmint.rust.pro.tool.AppSettings
import java.io.File import java.io.File
import java.lang.StringBuilder
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.ExecutorService import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors import java.util.concurrent.Executors
@ -75,6 +75,10 @@ class PackActivity : BaseActivity<ActivityPackBinding>() {
viewBinding.deleteSourceFile.isVisible = false viewBinding.deleteSourceFile.isVisible = false
} }
val modPath = bundle.getString("modPath") val modPath = bundle.getString("modPath")
if (modPath.isNullOrBlank()) {
showError("参数不合法缺少modPath")
return
}
modFolder = File(modPath) modFolder = File(modPath)
val modClass = ModClass(modFolder) val modClass = ModClass(modFolder)
modName = modClass.modName modName = modClass.modName
@ -114,6 +118,10 @@ class PackActivity : BaseActivity<ActivityPackBinding>() {
if (folder != null && !folder.endsWith(endValue)) { if (folder != null && !folder.endsWith(endValue)) {
outputFolder += endValue outputFolder += endValue
} }
if (folder.isNullOrBlank()) {
showError("folder生成错误")
return
}
val outputFolderObject = File(folder) val outputFolderObject = File(folder)
if (!outputFolderObject.exists()) { if (!outputFolderObject.exists()) {
outputFolderObject.mkdirs() outputFolderObject.mkdirs()
@ -380,12 +388,11 @@ class PackActivity : BaseActivity<ActivityPackBinding>() {
return true return true
} }
val updateTypeItem = item[viewBinding.updateSpinner.selectedItemPosition] val updateTypeItem = item[viewBinding.updateSpinner.selectedItemPosition]
val webLink = getString(R.string.web_link)
val qqLink = getString(R.string.qq_group) val qqLink = getString(R.string.qq_group)
val upTitle = viewBinding.updateTitle.text.toString() val upTitle = viewBinding.updateTitle.text.toString()
val upLink = viewBinding.updateLink.text.toString() val upLink = viewBinding.updateLink.text.toString()
var updateLinkType = ModConfigurationManager.webLinkType var updateLinkType = ModConfigurationManager.webLinkType
if (!upTitle.isEmpty()) { if (upTitle.isNotEmpty()) {
if (updateTypeItem == qqLink) { if (updateTypeItem == qqLink) {
if (!upLink.matches(Regex("^\\d{8,10}"))) { if (!upLink.matches(Regex("^\\d{8,10}"))) {
setErrorAndInput(viewBinding.updateLink, getString(R.string.qq_group_error)) setErrorAndInput(viewBinding.updateLink, getString(R.string.qq_group_error))
@ -399,7 +406,10 @@ class PackActivity : BaseActivity<ActivityPackBinding>() {
} }
} }
} }
val buildTime = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()) val buildTime = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss",
Locale.getDefault()
).format(System.currentTimeMillis())
var modConfigurationData = configurationData var modConfigurationData = configurationData
if (modConfigurationData == null) { if (modConfigurationData == null) {
modConfigurationData = ModConfigurationData( modConfigurationData = ModConfigurationData(

View File

@ -100,8 +100,7 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>() {
manager.findPreference<Preference>("value_type_manager") manager.findPreference<Preference>("value_type_manager")
valueTypeManager!!.onPreferenceClickListener = valueTypeManager!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
val intent = Intent(context, ValueTypeActivity::class.java) startActivity(Intent(context, ValueTypeActivity::class.java))
startActivity(intent)
true true
} }
val openRecoveryStation = val openRecoveryStation =
@ -210,35 +209,6 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>() {
if (nightMode != null && nightModeFollowSystem != null) { if (nightMode != null && nightModeFollowSystem != null) {
nightMode.isEnabled = !nightModeFollowSystem.isChecked nightMode.isEnabled = !nightModeFollowSystem.isChecked
} }
val editGroup = manager.findPreference<PreferenceCategory>("editGroup")
if (editGroup != null) {
editGroup.isVisible = false
}
val gamePackGroup = manager.findPreference<PreferenceCategory>("gamePackGroup")
if (gamePackGroup != null) {
gamePackGroup.isVisible = false
}
val modGroup = manager.findPreference<PreferenceCategory>("modGroup")
if (modGroup != null) {
modGroup.isVisible = false
}
val templateGroup = manager.findPreference<PreferenceCategory>("templateGroup")
if (templateGroup != null) {
templateGroup.isVisible = false
}
val developerModeGroup =
manager.findPreference<PreferenceCategory>("developerModeGroup")
if (developerModeGroup != null) {
developerModeGroup.isVisible = false
}
val mapGroup = manager.findPreference<PreferenceCategory>("mapGroup")
if (mapGroup != null) {
mapGroup.isVisible = false
}
} }
} }

View File

@ -1,53 +0,0 @@
package com.coldmint.rust.pro.adapters
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.coldmint.rust.pro.fragments.InstalledTemplateFragment
import com.coldmint.rust.pro.fragments.NullFragment
import com.coldmint.rust.pro.fragments.TemplateCommunityFragment
/**
* 创建单位适配器
* @constructor
*/
class CreateUnitPageAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {
/**
* 已安装的模板碎片
*/
private val installedTemplateFragment by lazy {
InstalledTemplateFragment()
}
/**
* 设置Root目录
* @param rootPath String
*/
fun setRootPath(rootPath:String?){
installedTemplateFragment.viewModel.mRootPath = rootPath
}
/**
* 设置创建的目录
* @param createPath String
*/
fun setCreatePath(createPath :String){
return installedTemplateFragment.setCreatePath(createPath)
}
override fun getItemCount(): Int {
return 2
}
override fun createFragment(position: Int): Fragment {
return if (position == 0) {
installedTemplateFragment
} else {
TemplateCommunityFragment()
}
}
}

View File

@ -39,7 +39,7 @@ import java.io.File
import java.util.* import java.util.*
class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>() { class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>() {
val viewModel: InstalledTemplateViewModel by lazy { private val viewModel: InstalledTemplateViewModel by lazy {
InstalledTemplateViewModel() InstalledTemplateViewModel()
} }
@ -58,16 +58,23 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
viewModel.createPathLiveData.value = createPath viewModel.createPathLiveData.value = createPath
} }
/**
* 设置根路径
*/
fun setRootPath(rootPath: String?) {
viewModel.mRootPath = rootPath
}
fun initAction() { fun initAction() {
viewBinding.selectPathButton.setOnClickListener { viewBinding.selectPathButton.setOnClickListener {
val createPath = viewModel.createPathLiveData.value val createPath = viewModel.createPathLiveData.value
val bundle = Bundle() changePath.launch(Intent(requireContext(), FileManagerActivity::class.java).apply {
val intent = Intent(requireContext(), FileManagerActivity::class.java) this.putExtra("data", Bundle().apply {
bundle.putString("type", "selectDirectents") this.putString("type", "selectDirectents")
bundle.putString("path", createPath) this.putString("path", createPath)
bundle.putString("rootpath", viewModel.mRootPath) this.putString("rootpath", viewModel.mRootPath)
intent.putExtra("data", bundle) })
changePath.launch(intent) })
} }
//长按监听 //长按监听
viewBinding.expandableList.onItemLongClickListener = viewBinding.expandableList.onItemLongClickListener =
@ -160,20 +167,16 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
LogCat.e("创建目录观察者", "模板适配器没有设置目录。") LogCat.e("创建目录观察者", "模板适配器没有设置目录。")
} }
} }
viewModel.setLoadCallBack { mTemplateAdapter = TemplateAdapter(
if (isAdded) { requireContext(),
mTemplateAdapter = TemplateAdapter( viewModel.getGroupData(),
requireContext(), viewModel.getItemData(),
viewModel.getGroupData(), viewModel.environmentLanguage, startTemplateParserActivity
viewModel.getItemData(), )
viewModel.environmentLanguage, startTemplateParserActivity viewBinding.expandableList.setAdapter(mTemplateAdapter)
) val path = viewModel.createPathLiveData.value.toString()
viewBinding.expandableList.setAdapter(mTemplateAdapter) mTemplateAdapter.setCreatePath(path)
val path = viewModel.createPathLiveData.value.toString() LogCat.d("创建目录观察者", "模板适配器设置目录为${path}")
mTemplateAdapter.setCreatePath(path)
LogCat.d("创建目录观察者", "模板适配器设置目录为${path}")
}
}
viewModel.loadTemplate(requireContext()) viewModel.loadTemplate(requireContext())
} }

View File

@ -1,12 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true">
tools:context=".ActivateActivity">
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -17,37 +14,16 @@
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" /> android:layout_height="?attr/actionBarSize" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:background="@android:color/transparent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="已安装" />
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="模板社区" />
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2 <androidx.fragment.app.FragmentContainerView
android:id="@+id/viewPager2" android:id="@+id/fragmentContainerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="16dp" android:layout_marginLeft="16dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginRight="16dp" android:layout_marginRight="16dp"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"/> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/help"
android:title="@string/help"
android:icon="@drawable/baseline_help_outline_24"
app:showAsAction="always"/>
</menu>