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 f53335c5ac4fedde064ce77831bae2bed08d95d3..cbcddc0207daf6c643eae69026dfd5c57b8e749e 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 2f594bfa6c642048c468f1fada0ad3a9c1c1591d..089626f12f045e1ae48a41dc2a354e126388d36a 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 a455e1cd15c4bf8ef7ebd7935e0604b2fc3ecc11..7c713967f2d53fa77795b364299a36c5c1712f1b 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 9842e4217f4599fc92012c850a212823cb4a0f95..0000000000000000000000000000000000000000 --- 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 20cbfcc91d5dfe6dc193fff103c972316937fee9..0000000000000000000000000000000000000000 --- 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 aa93c2729acea5dbbf447e669828fde847150c5c..0000000000000000000000000000000000000000 --- 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 0651be4c0f950f473f720766509ea84c97f074d5..0000000000000000000000000000000000000000 --- 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 dc30423bd3de25d61e730c8bb54ea7d5195e7b35..0000000000000000000000000000000000000000 --- 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 7eff4fcc32aa4884c9daf8b7632c60ec2ca364b5..1203f45da54c660917ce12cfb1ead51bebeb4162 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 5f0c3d592447c246ea65cc94a210c6a1742b3bcb..324d609500fc6c57dc496333f22b3248b870641e 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 6dec8b59b1c53f52636b0f321aca59a4852e50cd..e21f3ecd03c7a94c18aa1afbe2c744f0aa672e08 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 60b4eaa0495e7932f2ccfdf83c343666f55851a1..0000000000000000000000000000000000000000 --- 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 28137649dde18bfe62e3b566daf9a9d83b8f6145..c8a76764753a74763971ccd956d1d4a061326f75 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 852a9aa156a611c6fbf153b8f2d61b0f898daacb..0000000000000000000000000000000000000000 --- 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 25962d729e0372350364ccc19b20c9d22b50c038..8e7d53a6035147d70bb752de7e6426b3beb36a70 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 9a0ddd33bdd8c5a99eea9f8eab1d0d78d43e10c5..0000000000000000000000000000000000000000 --- 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 308708871bdf461811a10b7cb9e3b778ddd95686..033e7f4bb24b86ecf335e6486c888caa11ee8962 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 5b13196061dea0009e47a0bd0783c402937b70ec..8e177648ac1868ada05276b85393caa855519d53 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 40fd06d74ddec5b55e6ca23c47714ebdce35d4b2..8e374f62eed0a9b7b38e10c5fea7ad91b31f5aac 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 dd344798c24aaec72986127c5bc458e7512580fc..e3888eecb0622bbcaf1bb82d85e3b88d0e0a1911 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 c612c4d096941b4ce2c5e26efe0d80f22f9abcc5..4c7853be580ef5e1bd3a2de54d292d7b0dea9e32 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 fd18a0550e3411ad19078a82303df7c963514f9d..1009b395dde83ff4b9528358e460a1a4418c3f1b 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" }