RustAssistant/app/src/main/java/com/coldmint/rust/pro/RecyclingStationActivity.kt
2022-05-14 08:19:30 +08:00

193 lines
8.2 KiB
Kotlin

package com.coldmint.rust.pro
import com.coldmint.rust.pro.base.BaseActivity
import android.os.Bundle
import android.view.Menu
import androidx.recyclerview.widget.LinearLayoutManager
import com.coldmint.rust.pro.tool.AppSettings
import android.view.MenuItem
import android.view.View
import android.widget.PopupMenu
import androidx.core.view.isVisible
import com.coldmint.rust.core.tool.FileOperator
import com.coldmint.rust.pro.adapters.FileAdapter
import com.coldmint.rust.pro.databinding.ActivityRecyclingStationBinding
import java.io.File
import java.util.ArrayList
class RecyclingStationActivity : BaseActivity<ActivityRecyclingStationBinding>() {
private lateinit var mWorkFolder: File
private var working = false
private var mDayNum = 0
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
if (canUseView) {
viewBinding.toolbar.setTitle(R.string.enable_the_recovery_station)
setReturnButton()
viewBinding.backupList.layoutManager =
LinearLayoutManager(this@RecyclingStationActivity)
val workFolderPath = appSettings.getValue(
AppSettings.Setting.RecoveryStationFolder,
this@RecyclingStationActivity.filesDir.absolutePath + "/backup/"
)
mDayNum = Integer.valueOf(
appSettings.getValue(
AppSettings.Setting.RecoveryStationFileSaveDays,
7
)
)
mWorkFolder = File(workFolderPath)
if (!mWorkFolder.exists()) {
mWorkFolder.mkdirs()
}
loadFiles()
}
}
private fun loadFiles() {
Thread {
val files = mWorkFolder.listFiles()
val fileArrayList: MutableList<File?> = ArrayList()
val nowTime = System.currentTimeMillis()
//先设置为多少秒
val targetDifferences = (mDayNum * 86400000).toLong()
for (file in files) {
val last = file.lastModified()
val differences = nowTime - last
if (differences > targetDifferences) {
FileOperator.delete_files(file)
} else {
fileArrayList.add(file)
}
}
if (fileArrayList.size > 0) {
val fileAdapter = FileAdapter(this@RecyclingStationActivity, fileArrayList)
fileAdapter.setSortType(FileAdapter.SortType.ModifyDate)
fileAdapter.setItemEvent { i, fileItemBinding, viewHolder, file ->
fileItemBinding.more.setOnClickListener {
if (file == null) {
return@setOnClickListener
}
val popupMenu = PopupMenu(this@RecyclingStationActivity, fileItemBinding.more)
popupMenu.menu.add(R.string.recovery_file)
popupMenu.menu.add(R.string.delete_title)
popupMenu.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item ->
if (working) {
return@OnMenuItemClickListener true
}
val title = item.title.toString()
if (title == getString(R.string.delete_title)) {
Thread {
working = true
FileOperator.delete_files(file)
runOnUiThread {
working = false
loadFiles()
}
}.start()
} else if (title == getString(R.string.recovery_file)) {
Thread {
working = true
val removePath: String
val modDirectory =
appSettings.getValue(AppSettings.Setting.ModFolder, "")
val removeFile: File
if (file.isDirectory) {
removePath = modDirectory + file.name + "/"
removeFile = File(removePath)
if (!removeFile.exists()) {
removeFile.mkdirs()
}
} else {
removePath = modDirectory + file.name
removeFile = File(removePath)
}
FileOperator.removeFiles(file, removeFile)
runOnUiThread {
working = false
loadFiles()
}
}.start()
}
true
})
popupMenu.show()
}
}
runOnUiThread {
viewBinding.progressBar.isVisible = false
viewBinding.backupError.isVisible = false
viewBinding.backupList.isVisible = true
viewBinding.backupList.adapter = fileAdapter
}
} else {
runOnUiThread {
viewBinding.progressBar.isVisible = false
viewBinding.backupError.isVisible = true
viewBinding.backupList.isVisible = false
viewBinding.backupError.setText(R.string.not_find_mod)
}
}
}.start()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
when (id) {
R.id.clear_recovery_station -> {
Thread {
runOnUiThread {
viewBinding.progressBar.isVisible = true
viewBinding.backupError.isVisible = true
viewBinding.backupList.isVisible = false
viewBinding.backupError.setText(R.string.del_moding)
}
FileOperator.delete_files(mWorkFolder)
runOnUiThread {
viewBinding.progressBar.isVisible = false
viewBinding.backupError.isVisible = true
viewBinding.backupList.isVisible = false
viewBinding.backupError.setText(R.string.not_find_mod)
}
}.start()
return true
}
R.id.restore_all -> {
Thread {
runOnUiThread {
viewBinding.progressBar.isVisible = true
viewBinding.backupError.isVisible = true
viewBinding.backupList.isVisible = false
viewBinding.backupError.setText(R.string.restoreing)
}
FileOperator.removeFiles(
mWorkFolder,
File(appSettings.getValue(AppSettings.Setting.ModFolder, ""))
)
runOnUiThread {
viewBinding.progressBar.isVisible = false
viewBinding.backupError.isVisible = true
viewBinding.backupList.isVisible = false
viewBinding.backupError.setText(R.string.not_find_mod)
}
}.start()
return true
}
}
return super.onOptionsItemSelected(item)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu_recovery_station, menu)
return true
}
override fun getViewBindingObject(): ActivityRecyclingStationBinding {
return ActivityRecyclingStationBinding.inflate(layoutInflater)
}
}