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.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import com.coldmint.dialog.CoreDialog
import com.coldmint.rust.pro.adapters.CreateUnitPageAdapter
import androidx.fragment.app.commit
import com.coldmint.rust.pro.base.BaseActivity
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>() {
private lateinit var createUnitPageAdapter: CreateUnitPageAdapter
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
if (canUseView) {
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() {
val intent = intent
val bundle = intent.getBundleExtra("data")
if (bundle == null) {
Toast.makeText(this, "无效的请求", Toast.LENGTH_SHORT).show()
finish()
} else {
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)
return
}
}.attach()
supportFragmentManager.commit {
add(viewBinding.fragmentContainerView.id, InstalledTemplateFragment().apply {
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()
// }
// }
// }
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.Handler
import android.os.Looper
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.core.view.GravityCompat
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 {
val packName = AppSettings.getValue(
AppSettings.Setting.GamePackage,
@ -352,15 +340,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
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 {
startActivity(Intent(this@MainActivity, AboutActivity::class.java))
false
@ -574,12 +553,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
super.onBackPressed()
val navController = findNavController(R.id.baseFragment)
//判断是否在第一个导航 社区或者仓库
if (navController.currentDestination?.id == navController.graph.startDestinationId) {
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK) {
MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_close).setMessage(
String.format(
Locale.getDefault(),
@ -590,9 +565,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
finish()
}.setNegativeButton(R.string.dialog_cancel) { _, _ ->
}.show()
} else {
finish()
return true
}
return super.onKeyDown(keyCode, event)
}
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityMainBinding {

View File

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

View File

@ -100,8 +100,7 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>() {
manager.findPreference<Preference>("value_type_manager")
valueTypeManager!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener {
val intent = Intent(context, ValueTypeActivity::class.java)
startActivity(intent)
startActivity(Intent(context, ValueTypeActivity::class.java))
true
}
val openRecoveryStation =
@ -210,35 +209,6 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>() {
if (nightMode != null && nightModeFollowSystem != null) {
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.*
class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>() {
val viewModel: InstalledTemplateViewModel by lazy {
private val viewModel: InstalledTemplateViewModel by lazy {
InstalledTemplateViewModel()
}
@ -58,16 +58,23 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
viewModel.createPathLiveData.value = createPath
}
/**
* 设置根路径
*/
fun setRootPath(rootPath: String?) {
viewModel.mRootPath = rootPath
}
fun initAction() {
viewBinding.selectPathButton.setOnClickListener {
val createPath = viewModel.createPathLiveData.value
val bundle = Bundle()
val intent = Intent(requireContext(), FileManagerActivity::class.java)
bundle.putString("type", "selectDirectents")
bundle.putString("path", createPath)
bundle.putString("rootpath", viewModel.mRootPath)
intent.putExtra("data", bundle)
changePath.launch(intent)
changePath.launch(Intent(requireContext(), FileManagerActivity::class.java).apply {
this.putExtra("data", Bundle().apply {
this.putString("type", "selectDirectents")
this.putString("path", createPath)
this.putString("rootpath", viewModel.mRootPath)
})
})
}
//长按监听
viewBinding.expandableList.onItemLongClickListener =
@ -160,8 +167,6 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
LogCat.e("创建目录观察者", "模板适配器没有设置目录。")
}
}
viewModel.setLoadCallBack {
if (isAdded) {
mTemplateAdapter = TemplateAdapter(
requireContext(),
viewModel.getGroupData(),
@ -172,8 +177,6 @@ class InstalledTemplateFragment : BaseFragment<FragmentInstalledTemplateBinding>
val path = viewModel.createPathLiveData.value.toString()
mTemplateAdapter.setCreatePath(path)
LogCat.d("创建目录观察者", "模板适配器设置目录为${path}")
}
}
viewModel.loadTemplate(requireContext())
}

View File

@ -1,12 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
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_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ActivateActivity">
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
@ -17,37 +14,16 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
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>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
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>

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>