mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-09-10 13:57:12 +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.annotation.Keep
|
||||||
import androidx.lifecycle.ViewModelProvider
|
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.NativeLibrary
|
||||||
import org.yuzu.yuzu_emu.R
|
import org.yuzu.yuzu_emu.R
|
||||||
import org.yuzu.yuzu_emu.activities.EmulationActivity
|
import org.yuzu.yuzu_emu.activities.EmulationActivity
|
||||||
import org.yuzu.yuzu_emu.model.EmulationViewModel
|
import org.yuzu.yuzu_emu.model.EmulationViewModel
|
||||||
import org.yuzu.yuzu_emu.utils.Log
|
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
object DiskShaderCacheProgress {
|
object DiskShaderCacheProgress {
|
||||||
private lateinit var emulationViewModel: EmulationViewModel
|
private lateinit var emulationViewModel: EmulationViewModel
|
||||||
|
private lateinit var emulationActivity: EmulationActivity
|
||||||
|
|
||||||
private fun prepareViewModel() {
|
private fun prepareViewModel() {
|
||||||
emulationViewModel =
|
val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
|
||||||
ViewModelProvider(
|
?: throw IllegalStateException("EmulationActivity 不存在")
|
||||||
NativeLibrary.sEmulationActivity.get() as EmulationActivity
|
emulationActivity = activity
|
||||||
)[EmulationViewModel::class.java]
|
emulationViewModel = ViewModelProvider(emulationActivity)[EmulationViewModel::class.java]
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun loadProgress(stage: Int, progress: Int, max: Int) {
|
fun loadProgress(stage: Int, progress: Int, max: Int) {
|
||||||
val emulationActivity = NativeLibrary.sEmulationActivity.get()
|
val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
|
||||||
if (emulationActivity == null) {
|
?: return
|
||||||
Log.error("[DiskShaderCacheProgress] EmulationActivity not present")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
emulationActivity.runOnUiThread {
|
when (LoadCallbackStage.values()[stage]) {
|
||||||
when (LoadCallbackStage.values()[stage]) {
|
LoadCallbackStage.Prepare -> {
|
||||||
LoadCallbackStage.Prepare -> prepareViewModel()
|
prepareViewModel()
|
||||||
LoadCallbackStage.Build -> emulationViewModel.updateProgress(
|
showMessage(activity.getString(R.string.prepare_loading_message))
|
||||||
emulationActivity.getString(R.string.building_shaders),
|
|
||||||
progress,
|
|
||||||
max
|
|
||||||
)
|
|
||||||
|
|
||||||
LoadCallbackStage.Complete -> {}
|
|
||||||
}
|
}
|
||||||
|
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 {
|
enum class LoadCallbackStage {
|
||||||
Prepare, Build, Complete
|
Prepare, Build, Complete
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue