feat: set Log.minLevel in app entry points and migrate android.util.Log usages

- Set Log.minLevel based on BuildConfig.DEBUG in Amethyst.kt init
- Set Log.minLevel = DEBUG in Desktop Main.kt
- Migrate VideoCompressionHelper to quartz Log + LogLevel enum
- Migrate VoiceAnonymizer, VoiceMessagePreview, LiveStatusIndicator to quartz Log

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
davotoula
2026-03-28 01:15:09 +01:00
parent 25b2cb42d0
commit 250d89ca0a
6 changed files with 19 additions and 12 deletions
@@ -23,9 +23,11 @@ package com.vitorpamplona.amethyst
import android.app.Application import android.app.Application
import com.vitorpamplona.amethyst.service.logging.Logging import com.vitorpamplona.amethyst.service.logging.Logging
import com.vitorpamplona.quartz.utils.Log import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.LogLevel
class Amethyst : Application() { class Amethyst : Application() {
init { init {
Log.minLevel = if (BuildConfig.DEBUG) LogLevel.DEBUG else LogLevel.ERROR
Log.d("AmethystApp", "Creating App $this") Log.d("AmethystApp", "Creating App $this")
} }
@@ -26,7 +26,6 @@ import android.net.Uri
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.text.format.Formatter.formatFileSize import android.text.format.Formatter.formatFileSize
import android.util.Log
import android.widget.Toast import android.widget.Toast
import com.abedelazizshe.lightcompressorlibrary.CompressionListener import com.abedelazizshe.lightcompressorlibrary.CompressionListener
import com.abedelazizshe.lightcompressorlibrary.VideoCodec import com.abedelazizshe.lightcompressorlibrary.VideoCodec
@@ -34,6 +33,8 @@ import com.abedelazizshe.lightcompressorlibrary.VideoCompressor
import com.abedelazizshe.lightcompressorlibrary.config.AppSpecificStorageConfiguration import com.abedelazizshe.lightcompressorlibrary.config.AppSpecificStorageConfiguration
import com.abedelazizshe.lightcompressorlibrary.config.Configuration import com.abedelazizshe.lightcompressorlibrary.config.Configuration
import com.abedelazizshe.lightcompressorlibrary.config.VideoResizer import com.abedelazizshe.lightcompressorlibrary.config.VideoResizer
import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.LogLevel
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withTimeoutOrNull import kotlinx.coroutines.withTimeoutOrNull
import java.io.File import java.io.File
@@ -217,7 +218,7 @@ object VideoCompressionHelper {
if (path == null) { if (path == null) {
applicationContext.notifyUser( applicationContext.notifyUser(
"Video compression succeeded, but path was null", "Video compression succeeded, but path was null",
Log.WARN, LogLevel.WARN,
) )
if (continuation.isActive) continuation.resume(null) if (continuation.isActive) continuation.resume(null)
return return
@@ -237,7 +238,7 @@ object VideoCompressionHelper {
} }
applicationContext.notifyUser( applicationContext.notifyUser(
"Compressed file larger than original. Using original.", "Compressed file larger than original. Using original.",
Log.WARN, LogLevel.WARN,
) )
if (continuation.isActive) { if (continuation.isActive) {
continuation.resume( continuation.resume(
@@ -276,7 +277,7 @@ object VideoCompressionHelper {
) { ) {
applicationContext.notifyUser( applicationContext.notifyUser(
"Video compression failed: $failureMessage", "Video compression failed: $failureMessage",
Log.ERROR, LogLevel.ERROR,
) )
if (continuation.isActive) continuation.resume(null) if (continuation.isActive) continuation.resume(null)
} }
@@ -306,16 +307,17 @@ object VideoCompressionHelper {
private fun Context.notifyUser( private fun Context.notifyUser(
message: String, message: String,
logLevel: Int = Log.DEBUG, logLevel: LogLevel = LogLevel.DEBUG,
duration: Int = Toast.LENGTH_LONG, duration: Int = Toast.LENGTH_LONG,
) { ) {
Handler(Looper.getMainLooper()).post { Handler(Looper.getMainLooper()).post {
Toast.makeText(this, message, duration).show() Toast.makeText(this, message, duration).show()
} }
when (logLevel) { when (logLevel) {
Log.ERROR -> Log.e(LOG_TAG, message) LogLevel.ERROR -> Log.e(LOG_TAG, message)
Log.WARN -> Log.w(LOG_TAG, message) LogLevel.WARN -> Log.w(LOG_TAG, message)
else -> Log.d(LOG_TAG, message) LogLevel.INFO -> Log.i(LOG_TAG, message)
LogLevel.DEBUG -> Log.d(LOG_TAG, message)
} }
} }
@@ -25,7 +25,6 @@ import android.media.MediaCodecInfo
import android.media.MediaExtractor import android.media.MediaExtractor
import android.media.MediaFormat import android.media.MediaFormat
import android.media.MediaMuxer import android.media.MediaMuxer
import android.util.Log
import be.tarsos.dsp.AudioDispatcher import be.tarsos.dsp.AudioDispatcher
import be.tarsos.dsp.AudioEvent import be.tarsos.dsp.AudioEvent
import be.tarsos.dsp.AudioProcessor import be.tarsos.dsp.AudioProcessor
@@ -33,6 +32,7 @@ import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd
import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter
import be.tarsos.dsp.io.TarsosDSPAudioFormat import be.tarsos.dsp.io.TarsosDSPAudioFormat
import be.tarsos.dsp.resample.RateTransposer import be.tarsos.dsp.resample.RateTransposer
import com.vitorpamplona.quartz.utils.Log
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
@@ -21,7 +21,6 @@
package com.vitorpamplona.amethyst.ui.actions.uploads package com.vitorpamplona.amethyst.ui.actions.uploads
import android.media.MediaPlayer import android.media.MediaPlayer
import android.util.Log
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@@ -60,6 +59,7 @@ import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.components.AudioWaveformReadOnly import com.vitorpamplona.amethyst.ui.components.AudioWaveformReadOnly
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.quartz.nipA0VoiceMessages.AudioMeta import com.vitorpamplona.quartz.nipA0VoiceMessages.AudioMeta
import com.vitorpamplona.quartz.utils.Log
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import java.io.File import java.io.File
@@ -275,7 +275,7 @@ private fun ManageMediaPlayer(
try { try {
player?.stop() player?.stop()
} catch (e: IllegalStateException) { } catch (e: IllegalStateException) {
Log.d("VoiceMessagePreview", "MediaPlayer stop failed (already stopped)", e) Log.d("VoiceMessagePreview", "MediaPlayer stop failed (already stopped): ${e.message}")
} }
player?.release() player?.release()
onPlayerChanged(null) onPlayerChanged(null)
@@ -20,7 +20,6 @@
*/ */
package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.live package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.live
import android.util.Log
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -34,6 +33,7 @@ import com.vitorpamplona.amethyst.commons.model.emphChat.EphemeralChatChannel
import com.vitorpamplona.amethyst.commons.model.nip53LiveActivities.LiveActivitiesChannel import com.vitorpamplona.amethyst.commons.model.nip53LiveActivities.LiveActivitiesChannel
import com.vitorpamplona.amethyst.service.OnlineChecker import com.vitorpamplona.amethyst.service.OnlineChecker
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.quartz.utils.Log
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@@ -101,6 +101,8 @@ import com.vitorpamplona.amethyst.desktop.ui.relay.RelayStatusCard
import com.vitorpamplona.amethyst.desktop.ui.settings.MediaServerSettings import com.vitorpamplona.amethyst.desktop.ui.settings.MediaServerSettings
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip47WalletConnect.Nip47WalletConnect import com.vitorpamplona.quartz.nip47WalletConnect.Nip47WalletConnect
import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.LogLevel
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
@@ -158,6 +160,7 @@ sealed class DesktopScreen {
} }
fun main() { fun main() {
Log.minLevel = LogLevel.DEBUG
DesktopImageLoaderSetup.setup() DesktopImageLoaderSetup.setup()
Runtime.getRuntime().addShutdownHook( Runtime.getRuntime().addShutdownHook(
Thread { Thread {