mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-09-08 17:57:01 +00:00
Update DiskShaderCacheProgress.kt
This commit is contained in:
parent
7297cc1ad5
commit
4f60f05ca7
|
@ -5,46 +5,63 @@ package org.yuzu.yuzu_emu.disk_shader_cache
|
|||
|
||||
import androidx.annotation.Keep
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.yuzu.yuzu_emu.NativeLibrary
|
||||
import org.yuzu.yuzu_emu.R
|
||||
import org.yuzu.yuzu_emu.activities.EmulationActivity
|
||||
import org.yuzu.yuzu_emu.model.EmulationViewModel
|
||||
import org.yuzu.yuzu_emu.utils.Log
|
||||
|
||||
@Keep
|
||||
object DiskShaderCacheProgress {
|
||||
private lateinit var emulationViewModel: EmulationViewModel
|
||||
private lateinit var emulationActivity: EmulationActivity
|
||||
|
||||
private fun prepareViewModel() {
|
||||
emulationViewModel =
|
||||
ViewModelProvider(
|
||||
NativeLibrary.sEmulationActivity.get() as EmulationActivity
|
||||
)[EmulationViewModel::class.java]
|
||||
val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
|
||||
?: throw IllegalStateException("EmulationActivity 不存在")
|
||||
emulationActivity = activity
|
||||
emulationViewModel = ViewModelProvider(emulationActivity)[EmulationViewModel::class.java]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun loadProgress(stage: Int, progress: Int, max: Int) {
|
||||
val emulationActivity = NativeLibrary.sEmulationActivity.get()
|
||||
if (emulationActivity == null) {
|
||||
Log.error("[DiskShaderCacheProgress] EmulationActivity not present")
|
||||
return
|
||||
}
|
||||
val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
|
||||
?: return
|
||||
|
||||
emulationActivity.runOnUiThread {
|
||||
when (LoadCallbackStage.values()[stage]) {
|
||||
LoadCallbackStage.Prepare -> prepareViewModel()
|
||||
LoadCallbackStage.Build -> emulationViewModel.updateProgress(
|
||||
emulationActivity.getString(R.string.building_shaders),
|
||||
progress,
|
||||
max
|
||||
)
|
||||
|
||||
LoadCallbackStage.Complete -> {}
|
||||
when (LoadCallbackStage.values()[stage]) {
|
||||
LoadCallbackStage.Prepare -> {
|
||||
prepareViewModel()
|
||||
showMessage(activity.getString(R.string.prepare_loading_message))
|
||||
}
|
||||
LoadCallbackStage.Build -> {
|
||||
GlobalScope.launch(Dispatchers.Main) {
|
||||
updateProgressAsync(activity.getString(R.string.building_shaders), progress, max)
|
||||
}
|
||||
}
|
||||
LoadCallbackStage.Complete -> {}
|
||||
}
|
||||
}
|
||||
|
||||
// Equivalent to VideoCore::LoadCallbackStage
|
||||
private suspend fun updateProgressAsync(title: String, progress: Int, max: Int) {
|
||||
withContext(Dispatchers.Main) {
|
||||
showMessage("$title:异步进度执行中")
|
||||
}
|
||||
|
||||
// 模拟一些处理时间
|
||||
kotlinx.coroutines.delay(1000)
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
emulationViewModel.updateProgress(title, progress, max)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMessage(message: String) {
|
||||
emulationActivity.showToast(message)
|
||||
}
|
||||
|
||||
enum class LoadCallbackStage {
|
||||
Prepare, Build, Complete
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue