change(tracing) : change how tracing is configured (ui and logic)

This commit is contained in:
ganfra 2025-01-17 09:52:32 +01:00
parent 6111f68517
commit ddb0810ded
38 changed files with 220 additions and 886 deletions

View file

@ -7,6 +7,7 @@
package io.element.android.libraries.preferences.api.store
import io.element.android.libraries.matrix.api.tracing.LogLevel
import kotlinx.coroutines.flow.Flow
interface AppPreferencesStore {
@ -25,5 +26,8 @@ interface AppPreferencesStore {
suspend fun setHideImagesAndVideos(value: Boolean)
fun doesHideImagesAndVideosFlow(): Flow<Boolean>
suspend fun setTracingLogLevel(logLevel: LogLevel)
fun getTracingLogLevelFlow(): Flow<LogLevel>
suspend fun reset()
}

View file

@ -19,6 +19,7 @@ import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.core.meta.BuildType
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.matrix.api.tracing.LogLevel
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
@ -31,6 +32,7 @@ private val customElementCallBaseUrlKey = stringPreferencesKey("elementCallBaseU
private val themeKey = stringPreferencesKey("theme")
private val simplifiedSlidingSyncKey = booleanPreferencesKey("useSimplifiedSlidingSync")
private val hideImagesAndVideosKey = booleanPreferencesKey("hideImagesAndVideos")
private val logLevelKey = stringPreferencesKey("logLevel")
@ContributesBinding(AppScope::class)
class DefaultAppPreferencesStore @Inject constructor(
@ -104,7 +106,27 @@ class DefaultAppPreferencesStore @Inject constructor(
}
}
override suspend fun setTracingLogLevel(logLevel: LogLevel) {
store.edit { prefs ->
prefs[logLevelKey] = logLevel.name
}
}
override fun getTracingLogLevelFlow(): Flow<LogLevel> {
return store.data.map { prefs ->
prefs[logLevelKey]?.let { LogLevel.valueOf(it) } ?: buildMeta.defaultLogLevel()
}
}
override suspend fun reset() {
store.edit { it.clear() }
}
}
private fun BuildMeta.defaultLogLevel(): LogLevel {
return when (buildType) {
BuildType.DEBUG -> LogLevel.TRACE
BuildType.NIGHTLY -> LogLevel.DEBUG
BuildType.RELEASE -> LogLevel.INFO
}
}

View file

@ -7,6 +7,7 @@
package io.element.android.libraries.preferences.test
import io.element.android.libraries.matrix.api.tracing.LogLevel
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@ -16,13 +17,15 @@ class InMemoryAppPreferencesStore(
hideImagesAndVideos: Boolean = false,
customElementCallBaseUrl: String? = null,
theme: String? = null,
simplifiedSlidingSyncEnabled: Boolean = false
simplifiedSlidingSyncEnabled: Boolean = false,
logLevel: LogLevel = LogLevel.INFO,
) : AppPreferencesStore {
private val isDeveloperModeEnabled = MutableStateFlow(isDeveloperModeEnabled)
private val hideImagesAndVideos = MutableStateFlow(hideImagesAndVideos)
private val customElementCallBaseUrl = MutableStateFlow(customElementCallBaseUrl)
private val theme = MutableStateFlow(theme)
private val simplifiedSlidingSyncEnabled = MutableStateFlow(simplifiedSlidingSyncEnabled)
private val logLevel = MutableStateFlow(logLevel)
override suspend fun setDeveloperModeEnabled(enabled: Boolean) {
isDeveloperModeEnabled.value = enabled
@ -64,6 +67,14 @@ class InMemoryAppPreferencesStore(
return hideImagesAndVideos
}
override suspend fun setTracingLogLevel(logLevel: LogLevel) {
this.logLevel.value = logLevel
}
override fun getTracingLogLevelFlow(): Flow<LogLevel> {
return logLevel
}
override suspend fun reset() {
// No op
}