From e4e3abb5faaf6c7eca5e1c91595fa564052433e7 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <mail@justjanne.de> Date: Tue, 5 Sep 2023 22:12:03 +0200 Subject: [PATCH] feat: massively simplify crash reporter --- .../ui/clientsettings/crash/CrashAdapter.kt | 2 +- .../ui/clientsettings/crash/CrashFragment.kt | 2 +- .../malheur/collectors/AppCollector.kt | 20 +-- .../collectors/ConfigurationCollector.kt | 130 ------------------ .../malheur/collectors/DeviceCollector.kt | 57 -------- .../malheur/collectors/DisplayCollector.kt | 88 ------------ .../malheur/collectors/EnvCollector.kt | 60 -------- .../malheur/collectors/LogCollector.kt | 44 ------ .../malheur/collectors/ReportCollector.kt | 7 +- .../java/de/kuschku/malheur/data/AppInfo.kt | 4 +- .../java/de/kuschku/malheur/data/CrashInfo.kt | 3 + .../de/kuschku/malheur/data/DeviceInfo.kt | 27 ---- .../de/kuschku/malheur/data/DisplayInfo.kt | 6 +- .../java/de/kuschku/malheur/data/EnvInfo.kt | 28 ---- .../de/kuschku/malheur/data/ExceptionInfo.kt | 3 + .../de/kuschku/malheur/data/MemoryInfo.kt | 50 ------- .../de/kuschku/malheur/data/MetricsInfo.kt | 2 + .../java/de/kuschku/malheur/data/Report.kt | 7 +- .../de/kuschku/malheur/data/ThreadInfo.kt | 3 + .../de/kuschku/malheur/data/ThreadsInfo.kt | 3 + .../de/kuschku/malheur/data/TraceElement.kt | 3 + .../kuschku/malheur/util/ReflectionHelper.kt | 11 -- 22 files changed, 36 insertions(+), 524 deletions(-) delete mode 100644 malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt delete mode 100644 malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt index f53335c5a..cbcddc020 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt @@ -90,7 +90,7 @@ class CrashAdapter : ListAdapter<Pair<Report?, Uri>, CrashAdapter.CrashViewHolde this.item = item this.uri = uri - binding.crashTime.text = item?.environment?.crashTime?.let { + binding.crashTime.text = item?.timestamp?.let { dateTimeFormatter.format(Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault())) } ?: "null" binding.versionName.text = item?.application?.versionName ?: "null" diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt index 2f594bfa6..089626f12 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt @@ -75,7 +75,7 @@ class CrashFragment : DaggerFragment() { FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", it) ) } - .sortedByDescending { it.first?.environment?.crashTime } + .sortedByDescending { it.first?.timestamp } activity?.runOnUiThread { this.adapter?.submitList(list) diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt index a455e1cd1..7c713967f 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt @@ -24,7 +24,6 @@ import android.os.Build import de.kuschku.malheur.CrashContext import de.kuschku.malheur.config.AppConfig import de.kuschku.malheur.data.AppInfo -import de.kuschku.malheur.util.reflectionCollectConstants class AppCollector(private val application: Application) : Collector<AppInfo, AppConfig> { override fun collect(context: CrashContext, config: AppConfig) = AppInfo( @@ -39,20 +38,13 @@ class AppCollector(private val application: Application) : Collector<AppInfo, Ap application.packageManager.getPackageInfo(application.packageName, 0).versionCode.toLong() } }, - buildConfig = collectIf(config.buildConfig) { - reflectionCollectConstants( - context.buildConfig ?: getBuildConfigClass(application.packageName) - ) - }, installationSource = collectIf(config.installationSource) { - @Suppress("DEPRECATION") - application.packageManager.getInstallerPackageName(application.packageName) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + application.packageManager.getInstallSourceInfo(application.packageName).originatingPackageName + } else { + @Suppress("DEPRECATION") + application.packageManager.getInstallerPackageName(application.packageName) + } } ) - - private fun getBuildConfigClass(packageName: String) = try { - Class.forName("$packageName.BuildConfig") - } catch (e: ClassNotFoundException) { - null - } } diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt deleted file mode 100644 index 9842e4217..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.collectors - -import android.annotation.SuppressLint -import android.app.Application -import android.content.res.Configuration -import android.util.SparseArray -import de.kuschku.malheur.CrashContext -import java.lang.reflect.Field -import java.lang.reflect.Modifier - -class ConfigurationCollector(private val application: Application) : - Collector<Map<String, Any?>, Boolean> { - private val configValueInfo = mutableMapOf<String, SparseArray<String>>() - - private val configurationFields = listOf( - FieldDefinition( - fieldName = "screenHeightDp" - ), - FieldDefinition( - fieldName = "screenWidthDp" - ), - FieldDefinition( - fieldName = "smallestScreenWidthDp" - ), - FieldDefinition( - fieldName = "navigation", - enumPrefix = "NAVIGATION" - ), - FieldDefinition( - fieldName = "navigationHidden", - enumPrefix = "NAVIGATIONHIDDEN" - ), - FieldDefinition( - fieldName = "orientation", - enumPrefix = "ORIENTATION" - ), - FieldDefinition( - fieldName = "screenLayout", - enumPrefix = "SCREENLAYOUT", - isFlag = true - ), - FieldDefinition( - fieldName = "touchscreen", - enumPrefix = "TOUCHSCREEN" - ), - FieldDefinition( - fieldName = "uiMode", - enumPrefix = "UI_MODE", - isFlag = true - ) - ) - - init { - val configurationFieldPrefixes = configurationFields.map(FieldDefinition::enumPrefix) - - Configuration::class.java.declaredFields.filter { - Modifier.isStatic(it.modifiers) - }.filter { - it.type == Int::class.java - }.filterNot { - it.name.endsWith("_MASK") - }.forEach { field -> - val group = configurationFieldPrefixes.find { field.name.startsWith(it + "_") } - if (group != null) { - val value = field.name.substring(group.length + 1) - configValueInfo.getOrPut(group, ::SparseArray).put(field.getInt(null), value) - } - } - } - - @SuppressLint("PrivateApi") - override fun collect(context: CrashContext, - config: Boolean) = configurationFields.mapNotNull { info -> - val field: Field? = Configuration::class.java.getDeclaredField(info.fieldName) - field?.let { - Pair(info, it) - } - }.filter { (_, field) -> - !Modifier.isStatic(field.modifiers) - }.map { (info, field) -> - val groupInfo = configValueInfo[info.enumPrefix] - if (groupInfo != null) { - val value = field.getInt(application.resources.configuration) - if (info.isFlag) { - info.fieldName to (0 until groupInfo.size()).map { idx -> - groupInfo.keyAt(idx) to groupInfo.valueAt(idx) - }.filter { (key, _) -> - value and key != 0 - }.map { (_, value) -> - value - }.toList() - } else { - val valueConstant = groupInfo[value] - if (valueConstant == null) { - info.fieldName to value - } else { - info.fieldName to valueConstant - } - } - } else { - val value = field.getInt(application.resources.configuration) - info.fieldName to value - } - }.toMap() - - class FieldDefinition( - val fieldName: String, - val enumPrefix: String? = null, - val isFlag: Boolean = false - ) -} diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt deleted file mode 100644 index 20cbfcc91..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.collectors - -import android.app.Application -import android.os.Build -import de.kuschku.malheur.CrashContext -import de.kuschku.malheur.config.DeviceConfig -import de.kuschku.malheur.data.DeviceInfo -import de.kuschku.malheur.util.reflectionCollectConstants -import java.io.File - -class DeviceCollector(private val application: Application) : Collector<DeviceInfo, DeviceConfig> { - private val displayCollector = DisplayCollector(application) - - override fun collect(context: CrashContext, config: DeviceConfig): DeviceInfo { - return DeviceInfo( - build = collectIf(config.build) { - reflectionCollectConstants(Build::class.java) - }, - version = collectIf(config.version) { - reflectionCollectConstants(Build.VERSION::class.java) - }, - processor = collectIf(config.processor) { - readProcInfo() - }, - display = displayCollector.collectIf(context, config.display) - ) - } - - private fun readProcInfo() = File("/proc/cpuinfo") - .bufferedReader(Charsets.UTF_8) - .lineSequence() - .map { line -> line.split(":") } - .filter { split -> split.size == 2 } - .map { (key, value) -> key.trim() to value.trim() } - .filter { (key, _) -> key == "Hardware" } - .map { (_, value) -> value } - .firstOrNull() -} diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt deleted file mode 100644 index aa93c2729..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.collectors - -import android.app.Application -import android.content.Context -import android.graphics.Point -import android.os.Build -import android.util.SparseArray -import android.view.Display -import android.view.WindowManager -import androidx.annotation.RequiresApi -import de.kuschku.malheur.CrashContext -import de.kuschku.malheur.data.DisplayInfo -import de.kuschku.malheur.data.MetricsInfo -import de.kuschku.malheur.util.getMetrics -import java.lang.reflect.Modifier - -class DisplayCollector(application: Application) : - Collector<DisplayInfo, Boolean> { - private val windowManager = application.getSystemService( - Context.WINDOW_SERVICE - ) as WindowManager - - @Suppress("DEPRECATION") - override fun collect(context: CrashContext, config: Boolean): DisplayInfo { - val display = windowManager.defaultDisplay - val hdrCapabilities = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val capabilitiesEnum = getHdrCapabilitiesEnum() - display.hdrCapabilities.supportedHdrTypes.map(capabilitiesEnum::get) - } else { - null - } - - val size = Point().also { - display.getRealSize(it) - } - - return DisplayInfo( - width = size.x, - height = size.y, - refreshRate = display.refreshRate, - hdr = hdrCapabilities, - isWideGamut = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - display.isWideColorGamut - } else { - null - }, - metrics = MetricsInfo(display.getMetrics()) - ) - } - - @RequiresApi(Build.VERSION_CODES.N) - private fun getHdrCapabilitiesEnum(): SparseArray<String> { - val hdrCapabilityEnums = SparseArray<String>() - Display.HdrCapabilities::class.java.declaredFields.filter { - Modifier.isStatic(it.modifiers) - }.filter { - it.name.startsWith("HDR_TYPE_") - }.filter { - it.type == Int::class.java - }.forEach { - try { - val value = it.getInt(null) - hdrCapabilityEnums.put(value, it.name.substring("HDR_TYPE_".length)) - } catch (e: IllegalAccessException) { - } - } - return hdrCapabilityEnums - } -} diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt deleted file mode 100644 index 0651be4c0..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.collectors - -import android.app.Application -import android.os.Debug -import android.os.Environment -import de.kuschku.malheur.CrashContext -import de.kuschku.malheur.config.EnvConfig -import de.kuschku.malheur.data.EnvInfo -import de.kuschku.malheur.data.MemoryInfo -import de.kuschku.malheur.util.reflectionCollectGetters -import java.io.File - -class EnvCollector(application: Application) : Collector<EnvInfo, EnvConfig> { - private val configurationCollector = ConfigurationCollector(application) - - override fun collect(context: CrashContext, config: EnvConfig) = EnvInfo( - paths = collectIf(config.paths) { - reflectionCollectGetters( - Environment::class.java - )?.map { (key, value) -> - key to if (value is File) { - value.canonicalPath - } else { - value - } - }?.toMap() - }, - memory = collectIf(config.memory) { - val memoryInfo = Debug.MemoryInfo() - Debug.getMemoryInfo(memoryInfo) - MemoryInfo(memoryInfo) - }, - configuration = configurationCollector.collectIf(context, config.configuration), - startTime = collectIf(config.startTime) { - context.startTime.time - }, - crashTime = collectIf(config.crashTime) { - context.crashTime.time - } - ) -} diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt deleted file mode 100644 index dc30423bd..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.collectors - -import de.kuschku.malheur.CrashContext -import de.kuschku.malheur.config.LogConfig -import java.text.SimpleDateFormat -import java.util.* - -class LogCollector : Collector<Map<String, List<String>>, LogConfig> { - private val logcatTimeFormatter = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.ROOT) - - override fun collect(context: CrashContext, config: LogConfig): Map<String, List<String>> { - val since = logcatTimeFormatter.format(context.startTime) - return config.buffers.map { buffer -> - buffer to readLogCat(since, buffer) - }.toMap() - } - - private fun readLogCat(since: String, buffer: String) = ProcessBuilder() - .command("logcat", "-t", since, "-b", buffer) - .redirectErrorStream(true) - .start() - .inputStream - .bufferedReader(Charsets.UTF_8) - .readLines() -} diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt index 7eff4fcc3..1203f45da 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt @@ -27,17 +27,12 @@ import de.kuschku.malheur.data.Report class ReportCollector(application: Application) : Collector<Report, ReportConfig> { private val crashCollector = CrashCollector() private val threadCollector = ThreadCollector() - private val logcatCollector = LogCollector() private val applicationCollector = AppCollector(application) - private val deviceCollector = DeviceCollector(application) - private val environmentCollector = EnvCollector(application) override fun collect(context: CrashContext, config: ReportConfig) = Report( + timestamp = System.currentTimeMillis(), crash = crashCollector.collectIf(context, config.crash), threads = threadCollector.collectIf(context, config.threads), - /*logcat = logcatCollector.collectIf(context, config.logcat),*/ application = applicationCollector.collectIf(context, config.application), - device = deviceCollector.collectIf(context, config.device), - environment = environmentCollector.collectIf(context, config.environment) ) } diff --git a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt index 5f0c3d592..324d60950 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt @@ -19,9 +19,11 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class AppInfo( val versionName: String?, val versionCode: Long?, - val buildConfig: Map<String, Any?>?, val installationSource: String? ) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt index 6dec8b59b..e21f3ecd0 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt @@ -19,6 +19,9 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class CrashInfo( val cause: ExceptionInfo?, val exception: String? diff --git a/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt deleted file mode 100644 index 60b4eaa04..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.data - -data class DeviceInfo( - val build: Map<String, Any?>?, - val version: Map<String, Any?>?, - val processor: String?, - val display: DisplayInfo? -) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt index 28137649d..c8a767647 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt @@ -19,11 +19,11 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class DisplayInfo( val width: Int, val height: Int, - val refreshRate: Float, - val hdr: List<String>?, - val isWideGamut: Boolean?, val metrics: MetricsInfo ) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt deleted file mode 100644 index 852a9aa15..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.data - -data class EnvInfo( - val paths: Map<String, Any?>?, - val memory: MemoryInfo?, - val configuration: Map<String, Any?>?, - val startTime: Long?, - val crashTime: Long? -) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt index 25962d729..8e7d53a60 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt @@ -19,6 +19,9 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class ExceptionInfo( val type: String?, val message: String?, diff --git a/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt deleted file mode 100644 index 9a0ddd33b..000000000 --- a/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2020 Janne Mareike Koschinski - * Copyright (c) 2020 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.malheur.data - -import android.os.Debug - -data class MemoryInfo( - var dalvikPss: Int?, - var dalvikPrivateDirty: Int?, - var dalvikSharedDirty: Int?, - - var nativePss: Int?, - var nativePrivateDirty: Int?, - var nativeSharedDirty: Int?, - - var otherPss: Int?, - var otherPrivateDirty: Int?, - var otherSharedDirty: Int? -) { - constructor(memoryInfo: Debug.MemoryInfo?) : this( - dalvikPss = memoryInfo?.dalvikPss, - dalvikPrivateDirty = memoryInfo?.dalvikPrivateDirty, - dalvikSharedDirty = memoryInfo?.dalvikSharedDirty, - - nativePss = memoryInfo?.nativePss, - nativePrivateDirty = memoryInfo?.nativePrivateDirty, - nativeSharedDirty = memoryInfo?.nativeSharedDirty, - - otherPss = memoryInfo?.otherPss, - otherPrivateDirty = memoryInfo?.otherPrivateDirty, - otherSharedDirty = memoryInfo?.otherSharedDirty - ) -} diff --git a/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt index 308708871..033e7f4bb 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt @@ -20,7 +20,9 @@ package de.kuschku.malheur.data import android.util.DisplayMetrics +import kotlinx.serialization.Serializable +@Serializable data class MetricsInfo( val density: Float, val scaledDensity: Float, diff --git a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt index 5b1319606..8e177648a 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt @@ -19,11 +19,12 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class Report( + val timestamp: Long? = null, val crash: CrashInfo? = null, val threads: ThreadsInfo? = null, - val logcat: Map<String, List<String>?>? = null, val application: AppInfo? = null, - val device: DeviceInfo? = null, - val environment: EnvInfo? = null ) diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt index 40fd06d74..8e374f62e 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt @@ -19,6 +19,9 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class ThreadInfo( val id: Long?, val name: String?, diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt index dd344798c..e3888eecb 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt @@ -19,6 +19,9 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class ThreadsInfo( val crashed: ThreadInfo?, val others: List<ThreadInfo>? diff --git a/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt b/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt index c612c4d09..4c7853be5 100644 --- a/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt +++ b/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt @@ -19,6 +19,9 @@ package de.kuschku.malheur.data +import kotlinx.serialization.Serializable + +@Serializable data class TraceElement( val className: String?, val methodName: String?, diff --git a/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt b/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt index fd18a0550..1009b395d 100644 --- a/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt +++ b/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt @@ -19,17 +19,6 @@ package de.kuschku.malheur.util -fun reflectionCollectConstants(klass: Class<*>?) = klass?.declaredFields - ?.mapNotNull { - var result: Pair<String, Any?>? = null - try { - result = it.name to it.get(null) - } catch (e: IllegalAccessException) { - } catch (e: IllegalArgumentException) { - } - result - }?.toMap() - fun <T> reflectionCollectGetters(klass: Class<T>?) = klass?.declaredMethods ?.filter { it.parameterTypes.isEmpty() && it.returnType != Void::class.java } ?.filter { it.name != "getClass" } -- GitLab