android - add log settings

This commit is contained in:
Emmanuel Hansen 2023-12-09 08:39:44 +00:00
parent 574b74bdea
commit 289471ac1a
6 changed files with 281 additions and 21 deletions

View File

@ -52,3 +52,7 @@ class Logging(private var viewModel: MainViewModel) {
File(logPath).mkdirs()
}
}
internal enum class LogLevel {
Debug, Stub, Info, Warning, Error, Guest, AccessLog, Notice, Trace
}

View File

@ -20,6 +20,7 @@ import androidx.core.view.WindowInsetsControllerCompat
import com.anggrayudi.storage.SimpleStorageHelper
import org.ryujinx.android.ui.theme.RyujinxAndroidTheme
import org.ryujinx.android.viewmodels.MainViewModel
import org.ryujinx.android.viewmodels.QuickSettings
import org.ryujinx.android.views.MainView
import kotlin.math.abs
@ -64,7 +65,17 @@ class MainActivity : BaseActivity() {
return
val appPath: String = AppPath
val success = RyujinxNative.instance.initialize(NativeHelpers.instance.storeStringJava(appPath), false)
var quickSettings = QuickSettings(this)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Debug.ordinal, quickSettings.enableDebugLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Info.ordinal, quickSettings.enableInfoLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Stub.ordinal, quickSettings.enableStubLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Warning.ordinal, quickSettings.enableWarningLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Error.ordinal, quickSettings.enableErrorLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.AccessLog.ordinal, quickSettings.enableAccessLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Guest.ordinal, quickSettings.enableGuestLogs)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Trace.ordinal, quickSettings.enableTraceLogs)
val success = RyujinxNative.instance.initialize(NativeHelpers.instance.storeStringJava(appPath))
_isInit = success
}
override fun onCreate(savedInstanceState: Bundle?) {
@ -78,7 +89,6 @@ class MainActivity : BaseActivity() {
AppPath = this.getExternalFilesDir(null)!!.absolutePath
initialize()
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

View File

@ -4,7 +4,7 @@ import org.ryujinx.android.viewmodels.GameInfo
@Suppress("KotlinJniMissingFunction")
class RyujinxNative {
external fun initialize(appPath: Long, enableDebugLogs : Boolean): Boolean
external fun initialize(appPath: Long): Boolean
companion object {
val instance: RyujinxNative = RyujinxNative()
@ -64,4 +64,5 @@ class RyujinxNative {
external fun userDeleteUser(userId: String)
external fun userOpenUser(userId: Long)
external fun userCloseUser(userId: String)
external fun loggingSetEnabled(logLevel: Int, enabled: Boolean)
}

View File

@ -17,6 +17,16 @@ class QuickSettings(val activity: Activity) {
var resScale : Float
var isGrid : Boolean
// Logs
var enableDebugLogs: Boolean
var enableStubLogs: Boolean
var enableInfoLogs: Boolean
var enableWarningLogs: Boolean
var enableErrorLogs: Boolean
var enableGuestLogs: Boolean
var enableAccessLogs: Boolean
var enableTraceLogs: Boolean
private var sharedPref: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
init {
@ -31,5 +41,41 @@ class QuickSettings(val activity: Activity) {
resScale = sharedPref.getFloat("resScale", 1f)
useVirtualController = sharedPref.getBoolean("useVirtualController", true)
isGrid = sharedPref.getBoolean("isGrid", true)
enableDebugLogs = sharedPref.getBoolean("enableDebugLogs", false)
enableStubLogs = sharedPref.getBoolean("enableStubLogs", false)
enableInfoLogs = sharedPref.getBoolean("enableInfoLogs", true)
enableWarningLogs = sharedPref.getBoolean("enableWarningLogs", true)
enableErrorLogs = sharedPref.getBoolean("enableErrorLogs", true)
enableGuestLogs = sharedPref.getBoolean("enableGuestLogs", true)
enableAccessLogs = sharedPref.getBoolean("enableAccessLogs", false)
enableTraceLogs = sharedPref.getBoolean("enableStubLogs", false)
}
fun save(){
val editor = sharedPref.edit()
editor.putBoolean("isHostMapped", isHostMapped)
editor.putBoolean("useNce", useNce)
editor.putBoolean("enableVsync", enableVsync)
editor.putBoolean("enableDocked", enableDocked)
editor.putBoolean("enablePtc", enablePtc)
editor.putBoolean("ignoreMissingServices", ignoreMissingServices)
editor.putBoolean("enableShaderCache", enableShaderCache)
editor.putBoolean("enableTextureRecompression", enableTextureRecompression)
editor.putFloat("resScale", resScale)
editor.putBoolean("useVirtualController", useVirtualController)
editor.putBoolean("isGrid", isGrid)
editor.putBoolean("enableDebugLogs", enableDebugLogs)
editor.putBoolean("enableStubLogs", enableStubLogs)
editor.putBoolean("enableInfoLogs", enableInfoLogs)
editor.putBoolean("enableWarningLogs", enableWarningLogs)
editor.putBoolean("enableErrorLogs", enableErrorLogs)
editor.putBoolean("enableGuestLogs", enableGuestLogs)
editor.putBoolean("enableAccessLogs", enableAccessLogs)
editor.putBoolean("enableTraceLogs", enableTraceLogs)
editor.apply()
}
}

View File

@ -7,7 +7,9 @@ import androidx.navigation.NavHostController
import androidx.preference.PreferenceManager
import com.anggrayudi.storage.file.FileFullPath
import com.anggrayudi.storage.file.getAbsolutePath
import org.ryujinx.android.LogLevel
import org.ryujinx.android.MainActivity
import org.ryujinx.android.RyujinxNative
class SettingsViewModel(var navController: NavHostController, val activity: MainActivity) {
private var previousCallback: ((requestCode: Int, folder: DocumentFile) -> Unit)?
@ -42,6 +44,14 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
resScale: MutableState<Float>,
useVirtualController: MutableState<Boolean>,
isGrid: MutableState<Boolean>,
enableDebugLogs: MutableState<Boolean>,
enableStubLogs: MutableState<Boolean>,
enableInfoLogs: MutableState<Boolean>,
enableWarningLogs: MutableState<Boolean>,
enableErrorLogs: MutableState<Boolean>,
enableGuestLogs: MutableState<Boolean>,
enableAccessLogs: MutableState<Boolean>,
enableTraceLogs: MutableState<Boolean>
)
{
@ -56,6 +66,15 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
resScale.value = sharedPref.getFloat("resScale", 1f)
useVirtualController.value = sharedPref.getBoolean("useVirtualController", true)
isGrid.value = sharedPref.getBoolean("isGrid", true)
enableDebugLogs.value = sharedPref.getBoolean("enableDebugLogs", false)
enableStubLogs.value = sharedPref.getBoolean("enableStubLogs", false)
enableInfoLogs.value = sharedPref.getBoolean("enableInfoLogs", true)
enableWarningLogs.value = sharedPref.getBoolean("enableWarningLogs", true)
enableErrorLogs.value = sharedPref.getBoolean("enableErrorLogs", true)
enableGuestLogs.value = sharedPref.getBoolean("enableGuestLogs", true)
enableAccessLogs.value = sharedPref.getBoolean("enableAccessLogs", false)
enableTraceLogs.value = sharedPref.getBoolean("enableStubLogs", false)
}
fun save(
@ -69,7 +88,15 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
enableTextureRecompression: MutableState<Boolean>,
resScale: MutableState<Float>,
useVirtualController: MutableState<Boolean>,
isGrid: MutableState<Boolean>
isGrid: MutableState<Boolean>,
enableDebugLogs: MutableState<Boolean>,
enableStubLogs: MutableState<Boolean>,
enableInfoLogs: MutableState<Boolean>,
enableWarningLogs: MutableState<Boolean>,
enableErrorLogs: MutableState<Boolean>,
enableGuestLogs: MutableState<Boolean>,
enableAccessLogs: MutableState<Boolean>,
enableTraceLogs: MutableState<Boolean>
){
val editor = sharedPref.edit()
@ -85,8 +112,27 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
editor.putBoolean("useVirtualController", useVirtualController.value)
editor.putBoolean("isGrid", isGrid.value)
editor.putBoolean("enableDebugLogs", enableDebugLogs.value)
editor.putBoolean("enableStubLogs", enableStubLogs.value)
editor.putBoolean("enableInfoLogs", enableInfoLogs.value)
editor.putBoolean("enableWarningLogs", enableWarningLogs.value)
editor.putBoolean("enableErrorLogs", enableErrorLogs.value)
editor.putBoolean("enableGuestLogs", enableGuestLogs.value)
editor.putBoolean("enableAccessLogs", enableAccessLogs.value)
editor.putBoolean("enableTraceLogs", enableTraceLogs.value)
editor.apply()
activity.storageHelper!!.onFolderSelected = previousCallback
RyujinxNative.instance.loggingSetEnabled(LogLevel.Debug.ordinal, enableDebugLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Info.ordinal, enableInfoLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Stub.ordinal, enableStubLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Warning.ordinal, enableWarningLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Error.ordinal, enableErrorLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.AccessLog.ordinal, enableAccessLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Guest.ordinal, enableGuestLogs.value)
RyujinxNative.instance.loggingSetEnabled(LogLevel.Trace.ordinal, enableTraceLogs.value)
}

View File

@ -103,9 +103,16 @@ class SettingViews {
val useVirtualController = remember {
mutableStateOf(true)
}
val isGrid = remember {
mutableStateOf(true)
}
val isGrid = remember { mutableStateOf(true) }
val enableDebugLogs = remember { mutableStateOf(true) }
val enableStubLogs = remember { mutableStateOf(true) }
val enableInfoLogs = remember { mutableStateOf(true) }
val enableWarningLogs = remember { mutableStateOf(true) }
val enableErrorLogs = remember { mutableStateOf(true) }
val enableGuestLogs = remember { mutableStateOf(true) }
val enableAccessLogs = remember { mutableStateOf(true) }
val enableTraceLogs = remember { mutableStateOf(true) }
if (!loaded.value) {
settingsViewModel.initializeState(
@ -116,7 +123,15 @@ class SettingViews {
enableTextureRecompression,
resScale,
useVirtualController,
isGrid
isGrid,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,
enableWarningLogs,
enableErrorLogs,
enableGuestLogs,
enableAccessLogs,
enableTraceLogs
)
loaded.value = true
}
@ -139,7 +154,15 @@ class SettingViews {
enableTextureRecompression,
resScale,
useVirtualController,
isGrid
isGrid,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,
enableWarningLogs,
enableErrorLogs,
enableGuestLogs,
enableAccessLogs,
enableTraceLogs
)
settingsViewModel.navController.popBackStack()
}) {
@ -637,17 +660,139 @@ class SettingViews {
}
}
ExpandableView(onCardArrowClick = { }, title = "Log") {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Button(onClick = {
mainViewModel.logging.requestExport()
}) {
Text(text = "Send Logs")
Column(modifier = Modifier.fillMaxWidth()) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Debug Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableDebugLogs.value, onCheckedChange = {
enableDebugLogs.value = !enableDebugLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Stub Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableStubLogs.value, onCheckedChange = {
enableStubLogs.value = !enableStubLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Info Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableInfoLogs.value, onCheckedChange = {
enableInfoLogs.value = !enableInfoLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Warning Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableWarningLogs.value, onCheckedChange = {
enableWarningLogs.value = !enableWarningLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Error Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableErrorLogs.value, onCheckedChange = {
enableErrorLogs.value = !enableErrorLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Guest Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableGuestLogs.value, onCheckedChange = {
enableGuestLogs.value = !enableGuestLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Access Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableAccessLogs.value, onCheckedChange = {
enableAccessLogs.value = !enableAccessLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Enable Trace Logs",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = enableTraceLogs.value, onCheckedChange = {
enableTraceLogs.value = !enableTraceLogs.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Button(onClick = {
mainViewModel.logging.requestExport()
}) {
Text(text = "Send Logs")
}
}
}
}
@ -661,7 +806,15 @@ class SettingViews {
enableTextureRecompression,
resScale,
useVirtualController,
isGrid
isGrid,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,
enableWarningLogs,
enableErrorLogs,
enableGuestLogs,
enableAccessLogs,
enableTraceLogs
)
settingsViewModel.navController.popBackStack()
}