diff --git a/app/src/main/java/com/coldmint/rust/pro/UnitsActivity.kt b/app/src/main/java/com/coldmint/rust/pro/UnitsActivity.kt index d335363..ccc5165 100644 --- a/app/src/main/java/com/coldmint/rust/pro/UnitsActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/UnitsActivity.kt @@ -33,6 +33,7 @@ import kotlin.concurrent.thread class UnitsActivity : BaseActivity() { private lateinit var modPageAdapter: ModPageAdapter + @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == RESULT_OK && data != null) { @@ -190,7 +191,7 @@ class UnitsActivity : BaseActivity() { /** * 关闭数据库链接并退出活动 */ - fun exitActivity() { + private fun exitActivity() { finish() } diff --git a/app/src/main/java/com/coldmint/rust/pro/fragments/ModFragment.kt b/app/src/main/java/com/coldmint/rust/pro/fragments/ModFragment.kt index e42864c..c1c68fe 100644 --- a/app/src/main/java/com/coldmint/rust/pro/fragments/ModFragment.kt +++ b/app/src/main/java/com/coldmint/rust/pro/fragments/ModFragment.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.res.ColorStateList import android.os.* import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager @@ -21,8 +23,10 @@ import com.coldmint.rust.pro.databinding.FragmentModBinding import com.coldmint.rust.pro.databinding.ModListItemBinding import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.GlobalMethod +import com.coldmint.rust.pro.tool.Tools import com.coldmint.rust.pro.ui.StableLinearLayoutManager import com.coldmint.rust.pro.viewmodel.ModViewModel +import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.snackbar.Snackbar @@ -41,8 +45,8 @@ class ModFragment : BaseFragment() { val needRecycling by lazy { if (GlobalMethod.isActive) { AppSettings.getValue( - AppSettings.Setting.EnableRecoveryStation, - true + AppSettings.Setting.EnableRecoveryStation, + true ) } else { false @@ -55,15 +59,15 @@ class ModFragment : BaseFragment() { * @param modClass ModClass */ fun delFile( - handler: Handler, - modClass: ModClass, - index: Int? = null + handler: Handler, + modClass: ModClass, + index: Int? = null ) { val scope = CoroutineScope(Job()) scope.launch { val targetFile = modClass.modFile val errorFolder = - File(AppSettings.dataRootDirectory + "/modErrorReport/" + modClass.modName) + File(AppSettings.dataRootDirectory + "/modErrorReport/" + modClass.modName) if (errorFolder.exists()) { FileOperator.delete_files(errorFolder) } @@ -71,7 +75,7 @@ class ModFragment : BaseFragment() { requireActivity().applicationContext.dataDir.absolutePath + "/databases/" } else { FileOperator.getSuperDirectory( - requireContext().cacheDir + requireContext().cacheDir ) + "/databases/" } val name = modClass.modName @@ -87,8 +91,8 @@ class ModFragment : BaseFragment() { val removeFile: File if (targetFile.isDirectory) { removePath = AppSettings.getValue( - AppSettings.Setting.RecoveryStationFolder, - requireContext().filesDir.absolutePath + "/backup/" + AppSettings.Setting.RecoveryStationFolder, + requireContext().filesDir.absolutePath + "/backup/" ).toString() + targetFile.name + "/" removeFile = File(removePath) if (!removeFile.exists()) { @@ -96,8 +100,8 @@ class ModFragment : BaseFragment() { } } else { removePath = AppSettings.getValue( - AppSettings.Setting.RecoveryStationFolder, - requireContext().filesDir.absolutePath + "/backup/" + AppSettings.Setting.RecoveryStationFolder, + requireContext().filesDir.absolutePath + "/backup/" ).toString() + targetFile.name removeFile = File(removePath) } @@ -106,24 +110,24 @@ class ModFragment : BaseFragment() { } handler.post { Snackbar.make( - viewBinding.modList, - String.format( - getString(R.string.recoverying_prompt), - modClass.modName - ), - Snackbar.LENGTH_INDEFINITE + viewBinding.modList, + String.format( + getString(R.string.recoverying_prompt), + modClass.modName + ), + Snackbar.LENGTH_INDEFINITE ).show() } result = FileOperator.removeFiles(targetFile, removeFile) if (result) { handler.post { Snackbar.make( - viewBinding.modList, - String.format( - requireContext().getString(R.string.recovery_prompt), - modClass.modName - ), - Snackbar.LENGTH_SHORT + viewBinding.modList, + String.format( + requireContext().getString(R.string.recovery_prompt), + modClass.modName + ), + Snackbar.LENGTH_SHORT ).show() if (index != null) { modAdapter.removeItem(index) @@ -132,32 +136,32 @@ class ModFragment : BaseFragment() { } else { handler.post { Snackbar.make( - viewBinding.modList, - getString(R.string.cut_failed), - Snackbar.LENGTH_SHORT + viewBinding.modList, + getString(R.string.cut_failed), + Snackbar.LENGTH_SHORT ).show() } } } else { handler.post { Snackbar.make( - viewBinding.modList, - String.format( - getString(R.string.del_moding_tip), - modClass.modName - ), - Snackbar.LENGTH_INDEFINITE + viewBinding.modList, + String.format( + getString(R.string.del_moding_tip), + modClass.modName + ), + Snackbar.LENGTH_INDEFINITE ).show() } FileOperator.delete_files(targetFile) handler.post { Snackbar.make( - viewBinding.modList, - String.format( - getString(R.string.del_completed), - modClass.modName - ), - Snackbar.LENGTH_SHORT + viewBinding.modList, + String.format( + getString(R.string.del_completed), + modClass.modName + ), + Snackbar.LENGTH_SHORT ).show() if (index != null) { modAdapter.removeItem(index) @@ -198,21 +202,19 @@ class ModFragment : BaseFragment() { if (isAdded) { modAdapter = ModAdapter(requireContext(), dataList) FastScrollerBuilder(viewBinding.modList).useMd2Style() - .setPopupTextProvider(modAdapter).build() + .setPopupTextProvider(modAdapter).build() modAdapter.setItemEvent { i, modListItemBinding, viewHolder, modClass -> - modListItemBinding.root.setOnClickListener { onClickItemWork(modListItemBinding, modClass) } - modListItemBinding.root.setOnLongClickListener { modAdapter.showDeleteItemDialog( - modClass.modName, - viewHolder.adapterPosition, - onClickPositiveButton = { d, b -> - delFile(handler, modClass, viewHolder.adapterPosition) - false - }) + modClass.modName, + viewHolder.absoluteAdapterPosition, + onClickPositiveButton = { d, b -> + delFile(handler, modClass, viewHolder.absoluteAdapterPosition) + false + }) false } } @@ -235,16 +237,16 @@ class ModFragment : BaseFragment() { fun onClickItemWork(viewBinding: ModListItemBinding, modClass: ModClass) { val context = requireContext() val modDialogBinding = - ModDialogBinding.inflate(LayoutInflater.from(context)) + ModDialogBinding.inflate(LayoutInflater.from(context)) val bottomSheetDialog = - BottomSheetDialog(context) + BottomSheetDialog(context) modDialogBinding.modNameView.text = viewBinding.modNameView.text modDialogBinding.modNameDescription.text = viewBinding.modIntroductionView.text val configurationManager = modClass.modConfigurationManager val configurationData: ModConfigurationData? = - configurationManager?.readData() + configurationManager?.readData() val works: MutableList = ArrayList() if (modClass.modFile.isDirectory) { // val developerMode = AppSettings.getValue(AppSettings.Setting.DeveloperMode, false) @@ -266,7 +268,7 @@ class ModFragment : BaseFragment() { works.add(getString(R.string.release)) if (configurationData != null) { val title = configurationData.updateTitle - if (!title.isEmpty()) { + if (title.isNotEmpty()) { works.add(title) } @@ -282,11 +284,11 @@ class ModFragment : BaseFragment() { } works.add(getString(R.string.share_mod)) val modActionAdapter = ModActionAdapter( - context, - works, - modClass.modFile.path, - this@ModFragment, - bottomSheetDialog + context, + works, + modClass.modFile.path, + this@ModFragment, + bottomSheetDialog ) if (configurationData != null) { modActionAdapter.setModConfigurationData(configurationData) @@ -296,13 +298,13 @@ class ModFragment : BaseFragment() { if (modClass.modIcon == null) { val drawable = context.getDrawable(R.drawable.image) modDialogBinding.modIcon.setImageDrawable( - GlobalMethod.tintDrawable( - drawable, ColorStateList.valueOf( - GlobalMethod.getColorPrimary( - requireContext() - ) + GlobalMethod.tintDrawable( + drawable, ColorStateList.valueOf( + GlobalMethod.getColorPrimary( + requireContext() + ) + ) ) - ) ) } else { Glide.with(requireContext()).load(modClass.modIcon).into(modDialogBinding.modIcon) @@ -310,16 +312,24 @@ class ModFragment : BaseFragment() { } else { val drawable = context.getDrawable(R.drawable.file) modDialogBinding.modIcon.setImageDrawable( - GlobalMethod.tintDrawable( - drawable, ColorStateList.valueOf( - GlobalMethod.getColorPrimary( - requireContext() - ) + GlobalMethod.tintDrawable( + drawable, ColorStateList.valueOf( + GlobalMethod.getColorPrimary( + requireContext() + ) + ) ) - ) ) } bottomSheetDialog.setContentView(modDialogBinding.root) + val bottomSheet = bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet) + if (bottomSheet != null) { + val behavior = BottomSheetBehavior.from(bottomSheet) + behavior.state = BottomSheetBehavior.STATE_EXPANDED // 默认展开 + behavior.isFitToContents = true // 使其填满屏幕 + behavior.peekHeight = ViewGroup.LayoutParams.MATCH_PARENT + } + bottomSheetDialog.show() } @@ -341,11 +351,11 @@ class ModFragment : BaseFragment() { override fun whenViewCreated(inflater: LayoutInflater, savedInstanceState: Bundle?) { viewBinding.modList.layoutManager = StableLinearLayoutManager(requireContext()) val divider = MaterialDividerItemDecoration( - requireContext(), - MaterialDividerItemDecoration.VERTICAL + requireContext(), + MaterialDividerItemDecoration.VERTICAL ) viewBinding.modList.addItemDecoration( - divider + divider ) viewBinding.swipeRefreshLayout.setOnRefreshListener { loadModList() diff --git a/app/src/main/res/layout-land/edit_start.xml b/app/src/main/res/layout-land/edit_start.xml index b3c4f9e..098a025 100644 --- a/app/src/main/res/layout-land/edit_start.xml +++ b/app/src/main/res/layout-land/edit_start.xml @@ -1,5 +1,6 @@ + - - - - - diff --git a/app/src/main/res/layout/activity_units.xml b/app/src/main/res/layout/activity_units.xml index 9dcae20..957de6a 100644 --- a/app/src/main/res/layout/activity_units.xml +++ b/app/src/main/res/layout/activity_units.xml @@ -19,19 +19,10 @@ android:id="@+id/tabLayout" android:background="@android:color/transparent" android:layout_width="match_parent" - android:layout_height="wrap_content"> - - - - - - - - - - - - + app:tabGravity="center" + app:tabMode="auto" + app:tabMaxWidth="300dp" + android:layout_height="wrap_content" /> @@ -51,6 +42,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="16dp" - android:src="@drawable/add" /> + android:importantForAccessibility="no" + android:src="@drawable/add" /> diff --git a/app/src/main/res/layout/edit_start.xml b/app/src/main/res/layout/edit_start.xml index efc0fbe..091c2ef 100644 --- a/app/src/main/res/layout/edit_start.xml +++ b/app/src/main/res/layout/edit_start.xml @@ -1,5 +1,6 @@ - + + - - - - - @@ -53,6 +37,7 @@ android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:layout_margin="16dp" + android:importantForAccessibility="no" android:src="@drawable/add" android:visibility="gone" /> diff --git a/app/src/main/res/layout/fragment_mod.xml b/app/src/main/res/layout/fragment_mod.xml index 6d517eb..a6a36ef 100644 --- a/app/src/main/res/layout/fragment_mod.xml +++ b/app/src/main/res/layout/fragment_mod.xml @@ -1,6 +1,7 @@ + app:tint="?attr/colorControlNormal" + tools:visibility="visible" /> + android:layout_marginTop="8dp" + android:visibility="gone">