diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/devtools/ExportDebugLogScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/devtools/ExportDebugLogScreen.kt index f22f894c..9ea5be1d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/devtools/ExportDebugLogScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/devtools/ExportDebugLogScreen.kt @@ -16,6 +16,8 @@ package dev.patrickgold.florisboard.app.devtools +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyColumn @@ -35,19 +37,21 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.sp +import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.clipboardManager -import org.florisboard.lib.android.showShortToast import dev.patrickgold.florisboard.lib.compose.FlorisButton import dev.patrickgold.florisboard.lib.compose.FlorisScreen import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisScrollbar +import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.devtools.Devtools +import org.florisboard.lib.android.showShortToast -// TODO: This screen is just a quick thrown-together thing and needs further enhancing in the UI and in localization +// TODO: This screen is just a quick thrown-together thing and needs further enhancing in the UI @Composable fun ExportDebugLogScreen() = FlorisScreen { - title = "Debug log" + title = stringRes(R.string.devtools__debuglog__title) scrollable = false val prefs by florisPreferenceModel() @@ -55,21 +59,36 @@ fun ExportDebugLogScreen() = FlorisScreen { val clipboardManager by context.clipboardManager() var debugLog by remember { mutableStateOf?>(null) } + var formattedDebugLog by remember { mutableStateOf?>(null) } LaunchedEffect(Unit) { debugLog = Devtools.generateDebugLog(context, prefs, includeLogcat = true).lines() + formattedDebugLog = Devtools.generateDebugLogForGithub(context, prefs, includeLogcat = true).lines() } bottomBar { - FlorisButton( - onClick = { - clipboardManager.addNewPlaintext(debugLog!!.joinToString("\n")) - context.showShortToast("Copied debug log to clipboard") - }, - modifier = Modifier.fillMaxWidth(), - text = "Export (copy to clipboard)", - enabled = debugLog != null, - ) + Row( + horizontalArrangement = Arrangement.SpaceEvenly, + modifier = Modifier.fillMaxWidth() + ) { + FlorisButton( + onClick = { + clipboardManager.addNewPlaintext(debugLog!!.joinToString("\n")) + context.showShortToast(context.getString(R.string.devtools__debuglog__copied_to_clipboard)) + }, + modifier = Modifier, + text = stringRes(R.string.devtools__debuglog__copy_log), + enabled = debugLog != null, + ) + FlorisButton( + onClick = { + clipboardManager.addNewPlaintext(formattedDebugLog!!.joinToString("\n")) + context.showShortToast(context.getString(R.string.devtools__debuglog__copied_to_clipboard)) + }, + text = stringRes(R.string.devtools__debuglog__copy_for_github), + enabled = debugLog != null, + ) + } } content { @@ -86,7 +105,7 @@ fun ExportDebugLogScreen() = FlorisScreen { val log = debugLog if (log == null) { item { - Text("Loading...") + Text(stringRes(R.string.devtools__debuglog__loading)) } } else { items(log) { logLine -> diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt index eb5c93d0..c285aa9d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt @@ -23,10 +23,10 @@ import android.os.Debug import dev.patrickgold.florisboard.BuildConfig import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.AppPrefs -import org.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.titlecase import dev.patrickgold.florisboard.lib.util.TimeUtils import dev.patrickgold.florisboard.lib.util.UnitUtils +import org.florisboard.lib.android.systemService import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader @@ -49,6 +49,36 @@ object Devtools { } } + fun generateDebugLogForGithub(context: Context, prefs: AppPrefs? = null, includeLogcat: Boolean = false): String { + return buildString { + appendLine("
") + appendLine("Detailed info (Debug log header)") + appendLine() + appendLine("```") + append(generateSystemInfoLog(context)) + appendLine() + append(generateAppInfoLog(context)) + if (prefs != null) { + appendLine() + append(generateFeatureConfigLog(prefs)) + } + appendLine() + appendLine("```") + appendLine("
") + if (includeLogcat) { + appendLine() + appendLine("
") + appendLine("Debug log content") + appendLine() + appendLine("```") + append(generateLogcatDump()) + appendLine() + appendLine("```") + appendLine("
") + } + } + } + fun generateSystemInfoLog(context: Context, withTitle: Boolean = true): String { return buildString { if (withTitle) appendLine("======= SYSTEM INFO =======") diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 89cbc0a2..9daef0f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -614,6 +614,11 @@ Secure Android settings System Android settings System locales + Debug log + Copied debug log to clipboard + Copy log + Copy for GitHub formatted log + Loading…