try saving crash logs when device is locked

This commit is contained in:
Helium314 2025-05-14 15:58:24 +02:00
parent e6ec1c7bca
commit b5837c3380
2 changed files with 14 additions and 5 deletions

View file

@ -11,6 +11,7 @@ import android.os.Build
import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.BuildConfig
import helium314.keyboard.latin.settings.DebugSettings import helium314.keyboard.latin.settings.DebugSettings
import helium314.keyboard.latin.settings.Defaults import helium314.keyboard.latin.settings.Defaults
import helium314.keyboard.latin.utils.DeviceProtectedUtils
import helium314.keyboard.latin.utils.Log import helium314.keyboard.latin.utils.Log
import helium314.keyboard.latin.utils.prefs import helium314.keyboard.latin.utils.prefs
import java.io.File import java.io.File
@ -64,11 +65,17 @@ ${Log.getLog(100).joinToString("\n")}
private fun writeCrashReportToFile(text: String) { private fun writeCrashReportToFile(text: String) {
try { try {
val dir = appContext.getExternalFilesDir(null) ?: return val dir = appContext.getExternalFilesDir(null)
val date = SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(Calendar.getInstance().time) val date = SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(Calendar.getInstance().time)
val crashReportFile = File(dir, "crash_report_$date.txt") val crashReportFile = File(dir, "crash_report_$date.txt")
crashReportFile.writeText(text) crashReportFile.appendText(text)
} catch (ignored: IOException) { } catch (_: Exception) {
// can't write in external files dir, maybe device just booted and is still locked
// in this case there shouldn't be any sensitive data and we can put crash logs in unprotected files dir
val dir = DeviceProtectedUtils.getFilesDir(appContext) ?: return
val date = SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(Calendar.getInstance().time)
val crashReportFile = File(dir, "crash_report_unprotected_$date.txt")
crashReportFile.appendText(text)
} }
} }
} }

View file

@ -38,6 +38,7 @@ import helium314.keyboard.latin.R
import helium314.keyboard.latin.common.FileUtils import helium314.keyboard.latin.common.FileUtils
import helium314.keyboard.latin.define.DebugFlags import helium314.keyboard.latin.define.DebugFlags
import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.utils.DeviceProtectedUtils
import helium314.keyboard.latin.utils.ExecutorUtils import helium314.keyboard.latin.utils.ExecutorUtils
import helium314.keyboard.latin.utils.UncachedInputMethodManagerUtils import helium314.keyboard.latin.utils.UncachedInputMethodManagerUtils
import helium314.keyboard.latin.utils.cleanUnusedMainDicts import helium314.keyboard.latin.utils.cleanUnusedMainDicts
@ -191,8 +192,9 @@ class SettingsActivity : ComponentActivity(), SharedPreferences.OnSharedPreferen
private fun findCrashReports(): List<File> { private fun findCrashReports(): List<File> {
// find crash report files // find crash report files
val dir: File = getExternalFilesDir(null) ?: return emptyList() val dir = getExternalFilesDir(null)
val allFiles = dir.listFiles() ?: return emptyList() val unprotectedDir = DeviceProtectedUtils.getFilesDir(this)
val allFiles = dir?.listFiles()?.toList().orEmpty() + unprotectedDir?.listFiles().orEmpty()
return allFiles.filter { it.name.startsWith("crash_report") } return allFiles.filter { it.name.startsWith("crash_report") }
} }