diff --git a/app/src/main/java/helium314/keyboard/latin/define/DebugFlags.kt b/app/src/main/java/helium314/keyboard/latin/define/DebugFlags.kt index 6829f71e3..08f54c4f0 100644 --- a/app/src/main/java/helium314/keyboard/latin/define/DebugFlags.kt +++ b/app/src/main/java/helium314/keyboard/latin/define/DebugFlags.kt @@ -11,6 +11,7 @@ import android.os.Build import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.settings.DebugSettings import helium314.keyboard.latin.settings.Defaults +import helium314.keyboard.latin.utils.DeviceProtectedUtils import helium314.keyboard.latin.utils.Log import helium314.keyboard.latin.utils.prefs import java.io.File @@ -64,11 +65,17 @@ ${Log.getLog(100).joinToString("\n")} private fun writeCrashReportToFile(text: String) { 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 crashReportFile = File(dir, "crash_report_$date.txt") - crashReportFile.writeText(text) - } catch (ignored: IOException) { + crashReportFile.appendText(text) + } 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) } } } diff --git a/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt b/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt index ec7b33426..d0e9a3030 100644 --- a/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt +++ b/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt @@ -38,6 +38,7 @@ import helium314.keyboard.latin.R import helium314.keyboard.latin.common.FileUtils import helium314.keyboard.latin.define.DebugFlags import helium314.keyboard.latin.settings.Settings +import helium314.keyboard.latin.utils.DeviceProtectedUtils import helium314.keyboard.latin.utils.ExecutorUtils import helium314.keyboard.latin.utils.UncachedInputMethodManagerUtils import helium314.keyboard.latin.utils.cleanUnusedMainDicts @@ -191,8 +192,9 @@ class SettingsActivity : ComponentActivity(), SharedPreferences.OnSharedPreferen private fun findCrashReports(): List { // find crash report files - val dir: File = getExternalFilesDir(null) ?: return emptyList() - val allFiles = dir.listFiles() ?: return emptyList() + val dir = getExternalFilesDir(null) + val unprotectedDir = DeviceProtectedUtils.getFilesDir(this) + val allFiles = dir?.listFiles()?.toList().orEmpty() + unprotectedDir?.listFiles().orEmpty() return allFiles.filter { it.name.startsWith("crash_report") } }