diff options
| author | Albin <albin@mullvad.net> | 2024-06-26 13:24:33 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2024-06-26 13:24:33 +0200 |
| commit | f511be6302af0f17e1cb1dd3de727938f32c7f01 (patch) | |
| tree | 962cec1a268ed739783e020f2acec79a345456d2 | |
| parent | ac70101c713139244221889a61e96ecf9a56c9c6 (diff) | |
| parent | a4fbed079435932febfb3314918b1d2c2744fc7c (diff) | |
| download | mullvadvpn-f511be6302af0f17e1cb1dd3de727938f32c7f01.tar.xz mullvadvpn-f511be6302af0f17e1cb1dd3de727938f32c7f01.zip | |
Merge branch 'replace-default-logging-tool-with-kermit-droid-704'
33 files changed, 179 insertions, 93 deletions
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 8e523ecb39..3e99a3c7ab 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -339,6 +339,7 @@ dependencies { ksp(Dependencies.Compose.destinationsKsp) implementation(Dependencies.jodaTime) + implementation(Dependencies.kermit) implementation(Dependencies.Koin.core) implementation(Dependencies.Koin.android) implementation(Dependencies.Koin.compose) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt index 04ccb1cddc..617f538e87 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt @@ -1,19 +1,22 @@ package net.mullvad.mullvadvpn import android.app.Application +import co.touchlab.kermit.Logger +import co.touchlab.kermit.Severity import net.mullvad.mullvadvpn.di.appModule import org.koin.android.ext.koin.androidContext import org.koin.core.context.loadKoinModules import org.koin.core.context.startKoin -/** - * In Android, separate instances of the application class (MullvadApplication) will be instantiated - * for each process. That also means that a only common logic should be placed here. - */ +private const val LOG_TAG = "mullvad" + class MullvadApplication : Application() { override fun onCreate() { super.onCreate() - // Used to create/start separate DI graphs for each process. Avoid non-common classes etc. + Logger.setTag(LOG_TAG) + if (!BuildConfig.DEBUG) { + Logger.setMinSeverity(Severity.Info) + } startKoin { androidContext(this@MullvadApplication) } loadKoinModules(listOf(appModule)) } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/ChangelogDataProvider.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/ChangelogDataProvider.kt index c1dc72ebfe..d4e3957f94 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/ChangelogDataProvider.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/ChangelogDataProvider.kt @@ -1,7 +1,7 @@ package net.mullvad.mullvadvpn.util import android.content.res.AssetManager -import android.util.Log +import co.touchlab.kermit.Logger import java.io.IOException private const val CHANGELOG_FILE = "en-US/default.txt" @@ -12,7 +12,7 @@ class ChangelogDataProvider(private var assets: AssetManager) : IChangelogDataPr return try { assets.open(CHANGELOG_FILE).bufferedReader().use { it.readText() } } catch (ex: IOException) { - Log.e("mullvad", "Unable to read bundled changelog file.") + Logger.e("Unable to read bundled changelog file.") EMPTY_DEFAULT_STRING_WHEN_UNABLE_TO_READ_CHANGELOG } } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt index 3c24cba6d6..1e9a335951 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt @@ -1,8 +1,8 @@ package net.mullvad.mullvadvpn.viewmodel -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import co.touchlab.kermit.Logger import java.net.InetAddress import java.net.UnknownHostException import kotlinx.coroutines.CoroutineDispatcher @@ -259,7 +259,7 @@ class VpnSettingsViewModel( return try { map { InetAddress.getByName(it) } } catch (ex: UnknownHostException) { - Log.e("mullvad", "Error parsing the DNS address list.") + Logger.e("Error parsing the DNS address list.") emptyList() } } diff --git a/android/buildSrc/src/main/kotlin/Dependencies.kt b/android/buildSrc/src/main/kotlin/Dependencies.kt index 26b1a03753..2b5a2c430a 100644 --- a/android/buildSrc/src/main/kotlin/Dependencies.kt +++ b/android/buildSrc/src/main/kotlin/Dependencies.kt @@ -11,6 +11,7 @@ object Dependencies { "de.mannodermaus.junit5:android-test-extensions:${Versions.Android.junit}" const val junitAndroidTestRunner = "de.mannodermaus.junit5:android-test-runner:${Versions.Android.junit}" + const val kermit = "co.touchlab:kermit:${Versions.kermit}" const val konsist = "com.lemonappdev:konsist:${Versions.konsist}" const val leakCanary = "com.squareup.leakcanary:leakcanary-android:${Versions.leakCanary}" const val mockkWebserver = "com.squareup.okhttp3:mockwebserver:${Versions.mockWebserver}" diff --git a/android/buildSrc/src/main/kotlin/Versions.kt b/android/buildSrc/src/main/kotlin/Versions.kt index 24f9425478..592bfeaef5 100644 --- a/android/buildSrc/src/main/kotlin/Versions.kt +++ b/android/buildSrc/src/main/kotlin/Versions.kt @@ -3,6 +3,7 @@ object Versions { const val jodaTime = "2.12.7" const val junit = "5.10.2" const val jvmTarget = "17" + const val kermit = "2.0.4" const val konsist = "0.14.0" const val kotlin = "1.9.24" const val kotlinCompilerExtensionVersion = "1.5.14" diff --git a/android/gradle/verification-metadata.xml b/android/gradle/verification-metadata.xml index 7a0c2d60cc..e9aad2d9fa 100644 --- a/android/gradle/verification-metadata.xml +++ b/android/gradle/verification-metadata.xml @@ -1876,6 +1876,70 @@ <sha256 value="7cb296df197dbd0e31206b88691b7fe1731e1dc6bcf4e0228f432f32d126ff73" origin="Generated by Gradle"/> </artifact> </component> + <component group="co.touchlab" name="kermit" version="2.0.4"> + <artifact name="kermit-2.0.4.module"> + <sha256 value="7372faf3b7eec441e035783945b2df68aed2d81973653c176b2bccbd7509c163" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-metadata-2.0.4.jar"> + <sha256 value="e1626b72b856c82ee8e7e4fa47da0f4a73e6557a5c288532be409449b5574604" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-android" version="2.0.4"> + <artifact name="kermit-android-2.0.4.module"> + <sha256 value="5ff4cd4b242cfc26951bd205f64d7e8db7fd347239fe08472cb50b7e4c22fa35" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-release.aar"> + <sha256 value="328ff1193b273cd78feda107faa72e9579bad1006c06d89b1229d54c76836389" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-android-debug" version="2.0.4"> + <artifact name="kermit-android-debug-2.0.4.module"> + <sha256 value="96d8b24df55f669bdcd4b08220b7be7e475943b34272d06037500cf692085dda" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-debug.aar"> + <sha256 value="920fe5b89885d008789bf7b2f988b32b0d494d226d17ffbe3d164feed16acb08" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-core" version="2.0.4"> + <artifact name="kermit-core-2.0.4.module"> + <sha256 value="0808c6f3f9bbb3a3af22bffd1fe20629db5d2b83cdd3735c16efb7c663a272bf" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-core-metadata-2.0.4.jar"> + <sha256 value="ca561345823286541331691c25d9439b628303adb9fd3b570c8deda657dc3d58" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-core-android" version="2.0.4"> + <artifact name="kermit-core-android-2.0.4.module"> + <sha256 value="6edb8a88b429cfda8da931ad9c76c4a22d31dd92e2613bf63c43ba346ea9c838" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-core-release.aar"> + <sha256 value="d32048f982256fb27e339ec16581bed0fc65ea6008ff5984b1f9e1dbf948955f" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-core-android-debug" version="2.0.4"> + <artifact name="kermit-core-android-debug-2.0.4.module"> + <sha256 value="b9e9f5da2b7878d06f845a1f86816e2510be22a7f745ef37bb7d1819d6a20d98" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-core-debug.aar"> + <sha256 value="820c6968ecc6aaf95beaab76a06423e6bf662c877689c45fc3b84b1b93742faf" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-core-jvm" version="2.0.4"> + <artifact name="kermit-core-jvm-2.0.4.jar"> + <sha256 value="53736211edeeed3cdbc3b96b8b27de7faf50aeb731e1fff92a0e4472505d24ba" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-core-jvm-2.0.4.module"> + <sha256 value="c58d66eeb916881e49ca1fcf96d5bb16ce8afb562b12e83b055a51a33185ef29" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="co.touchlab" name="kermit-jvm" version="2.0.4"> + <artifact name="kermit-jvm-2.0.4.jar"> + <sha256 value="bdde9a1f3d02d205c56c133617d7c99dc5768bc85c7b84e697c87da10715ab77" origin="Generated by Gradle"/> + </artifact> + <artifact name="kermit-jvm-2.0.4.module"> + <sha256 value="91f1e67346ed6609d2eda33532d53e9249ca095779c286ce282f3e693fb6a350" origin="Generated by Gradle"/> + </artifact> + </component> <component group="co.touchlab" name="stately-concurrency" version="2.0.5"> <artifact name="stately-concurrency-2.0.5.module"> <sha256 value="51c46777cb554277aa9b56f41dd108bd000e2ef9ae38fc4af2d2378254555aef" origin="Generated by Gradle"/> diff --git a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/constant/LogTag.kt b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/constant/LogTag.kt deleted file mode 100644 index d2ae3f1871..0000000000 --- a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/constant/LogTag.kt +++ /dev/null @@ -1,3 +0,0 @@ -package net.mullvad.mullvadvpn.lib.common.constant - -const val TAG = "mullvad" diff --git a/android/lib/daemon-grpc/build.gradle.kts b/android/lib/daemon-grpc/build.gradle.kts index ff5d75aa16..840de57984 100644 --- a/android/lib/daemon-grpc/build.gradle.kts +++ b/android/lib/daemon-grpc/build.gradle.kts @@ -59,6 +59,7 @@ dependencies { implementation(project(Dependencies.Mullvad.talpidLib)) implementation(Dependencies.jodaTime) + implementation(Dependencies.kermit) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.KotlinX.coroutinesCore) implementation(Dependencies.KotlinX.coroutinesAndroid) diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt index 10c2406850..d088ffc77a 100644 --- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt +++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt @@ -1,13 +1,13 @@ package net.mullvad.mullvadvpn.lib.daemon.grpc import android.net.LocalSocketAddress -import android.util.Log import arrow.core.Either import arrow.core.raise.either import arrow.core.raise.ensure import arrow.optics.copy import arrow.optics.dsl.index import arrow.optics.typeclasses.Index +import co.touchlab.kermit.Logger import com.google.protobuf.BoolValue import com.google.protobuf.Empty import com.google.protobuf.StringValue @@ -38,7 +38,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mullvad_daemon.management_interface.ManagementInterface import mullvad_daemon.management_interface.ManagementServiceGrpcKt -import net.mullvad.mullvadvpn.lib.common.constant.TAG import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.fromDomain import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.toDomain import net.mullvad.mullvadvpn.lib.daemon.grpc.util.LogInterceptor @@ -204,7 +203,7 @@ class ManagementService( launch { grpc.eventsListen(Empty.getDefaultInstance()).collect { event -> if (extensiveLogging) { - Log.d(TAG, "Event: $event") + Logger.v("Event: $event") } @Suppress("WHEN_ENUM_CAN_BE_NULL_IN_JAVA") when (event.eventCase) { diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/util/LogInterceptor.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/util/LogInterceptor.kt index fde87ecdd5..b01b0266b7 100644 --- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/util/LogInterceptor.kt +++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/util/LogInterceptor.kt @@ -1,12 +1,11 @@ package net.mullvad.mullvadvpn.lib.daemon.grpc.util -import android.util.Log +import co.touchlab.kermit.Logger import io.grpc.CallOptions import io.grpc.Channel import io.grpc.ClientCall import io.grpc.ClientInterceptor import io.grpc.MethodDescriptor -import net.mullvad.mullvadvpn.lib.common.constant.TAG internal class LogInterceptor : ClientInterceptor { override fun <ReqT : Any?, RespT : Any?> interceptCall( @@ -14,7 +13,7 @@ internal class LogInterceptor : ClientInterceptor { callOptions: CallOptions?, next: Channel? ): ClientCall<ReqT, RespT> { - Log.d(TAG, "Intercepted call: ${method?.fullMethodName}") + Logger.v("Intercepted call: ${method?.fullMethodName}") return next!!.newCall(method, callOptions) } } diff --git a/android/lib/map/build.gradle.kts b/android/lib/map/build.gradle.kts index 7ca04c16da..f4606de5bd 100644 --- a/android/lib/map/build.gradle.kts +++ b/android/lib/map/build.gradle.kts @@ -35,12 +35,10 @@ android { } dependencies { - - //Model implementation(project(Dependencies.Mullvad.modelLib)) + implementation(Dependencies.AndroidX.lifecycleRuntimeKtx) implementation(Dependencies.Compose.ui) implementation(Dependencies.Compose.foundation) - - implementation(Dependencies.AndroidX.lifecycleRuntimeKtx) + implementation(Dependencies.kermit) } diff --git a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/GLHelper.kt b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/GLHelper.kt index e416988d8d..b60dc83c7f 100644 --- a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/GLHelper.kt +++ b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/GLHelper.kt @@ -2,8 +2,8 @@ package net.mullvad.mullvadvpn.lib.map.internal import android.opengl.GLES20 import android.opengl.Matrix -import android.util.Log import androidx.compose.ui.graphics.Color +import co.touchlab.kermit.Logger import java.nio.Buffer import java.nio.ByteBuffer import java.nio.FloatBuffer @@ -31,7 +31,7 @@ internal fun initShaderProgram(vsSource: String, fsSource: String): Int { GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linked, 0) if (linked[0] == GLES20.GL_FALSE) { val infoLog = GLES20.glGetProgramInfoLog(program) - Log.e("GLHelper", "Could not link program: $infoLog") + Logger.e("Could not link program: $infoLog") GLES20.glDeleteProgram(program) error("Could not link program with vsSource: $vsSource and fsSource: $fsSource") } @@ -54,7 +54,7 @@ private fun loadShader(type: Int, shaderCode: String): Int { GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0) if (compiled[0] == GLES20.GL_FALSE) { val infoLog = GLES20.glGetShaderInfoLog(shader) - Log.e("GLHelper", "Could not compile shader $type:$infoLog") + Logger.e("Could not compile shader $type:$infoLog") GLES20.glDeleteShader(shader) error("Could not compile shader with shaderCode: $shaderCode") diff --git a/android/lib/shared/build.gradle.kts b/android/lib/shared/build.gradle.kts index 88b5cfb3c9..a1bf4a9c75 100644 --- a/android/lib/shared/build.gradle.kts +++ b/android/lib/shared/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation(project(Dependencies.Mullvad.modelLib)) implementation(Dependencies.Arrow.core) + implementation(Dependencies.kermit) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.KotlinX.coroutinesAndroid) implementation(Dependencies.jodaTime) diff --git a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/DeviceRepository.kt b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/DeviceRepository.kt index 1c971e8069..29f91b43f1 100644 --- a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/DeviceRepository.kt +++ b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/DeviceRepository.kt @@ -1,7 +1,7 @@ package net.mullvad.mullvadvpn.lib.shared -import android.util.Log import arrow.core.Either +import co.touchlab.kermit.Logger import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -36,7 +36,7 @@ class DeviceRepository( managementService.getDeviceList(accountNumber) suspend fun updateDevice() { - Log.d("mullvad", "Update device") + Logger.i("Update device") managementService.updateDevice() } } diff --git a/android/lib/talpid/build.gradle.kts b/android/lib/talpid/build.gradle.kts index 00409f9482..b8426e3a81 100644 --- a/android/lib/talpid/build.gradle.kts +++ b/android/lib/talpid/build.gradle.kts @@ -27,7 +27,8 @@ android { dependencies { implementation(project(Dependencies.Mullvad.modelLib)) + implementation(Dependencies.AndroidX.lifecycleService) + implementation(Dependencies.kermit) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.KotlinX.coroutinesAndroid) - implementation(Dependencies.AndroidX.lifecycleService) } diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt index e89c841d25..2a854f7e5c 100644 --- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt +++ b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt @@ -1,8 +1,8 @@ package net.mullvad.talpid import android.os.ParcelFileDescriptor -import android.util.Log import androidx.annotation.CallSuper +import co.touchlab.kermit.Logger import java.net.Inet4Address import java.net.Inet6Address import java.net.InetAddress @@ -106,8 +106,7 @@ open class TalpidVpnService : LifecycleVpnService() { // since apps then may leak DNS requests. // https://issuetracker.google.com/issues/337961996 if (invalidDnsServerAddresses.size == config.dnsServers.size) { - Log.w( - "mullvad", + Logger.w( "All DNS servers invalid or non set, using fallback DNS server to " + "minimize leaks, dnsServers.isEmpty(): ${config.dnsServers.isEmpty()}" ) diff --git a/android/service/build.gradle.kts b/android/service/build.gradle.kts index 2dcedca5d8..0927cde58b 100644 --- a/android/service/build.gradle.kts +++ b/android/service/build.gradle.kts @@ -60,6 +60,7 @@ dependencies { implementation(Dependencies.AndroidX.coreKtx) implementation(Dependencies.AndroidX.lifecycleService) implementation(Dependencies.Arrow.core) + implementation(Dependencies.kermit) implementation(Dependencies.Koin.android) implementation(Dependencies.Koin.core) implementation(Dependencies.Kotlin.stdlib) diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt index 8d806500c8..23451a9459 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -6,10 +6,10 @@ import android.content.Intent import android.os.Binder import android.os.Build import android.os.IBinder -import android.util.Log import androidx.core.content.getSystemService import androidx.lifecycle.lifecycleScope import arrow.atomic.AtomicInt +import co.touchlab.kermit.Logger import java.io.File import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -23,7 +23,6 @@ import net.mullvad.mullvadvpn.lib.common.constant.BuildTypes import net.mullvad.mullvadvpn.lib.common.constant.GRPC_SOCKET_FILE_NAMED_ARGUMENT import net.mullvad.mullvadvpn.lib.common.constant.KEY_CONNECT_ACTION import net.mullvad.mullvadvpn.lib.common.constant.KEY_DISCONNECT_ACTION -import net.mullvad.mullvadvpn.lib.common.constant.TAG import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointConfiguration import net.mullvad.mullvadvpn.lib.endpoint.getApiEndpointConfigurationExtras @@ -65,7 +64,7 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { override fun onCreate() { super.onCreate() - Log.d(TAG, "MullvadVpnService: onCreate") + Logger.i("MullvadVpnService: onCreate") loadKoinModules(listOf(vpnServiceModule, apiEndpointModule)) with(getKoin()) { @@ -102,8 +101,7 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Log.d( - TAG, + Logger.i( "onStartCommand (intent=$intent, action=${intent?.action}, flags=$flags, startId=$startId)" ) @@ -113,7 +111,7 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { // where the service would potentially otherwise be too slow running `startForeground`. when { keyguardManager.isKeyguardLocked -> { - Log.d(TAG, "Keyguard is locked, ignoring command") + Logger.i("Keyguard is locked, ignoring command") } intent.isFromSystem() || intent?.action == KEY_CONNECT_ACTION -> { // Only show on foreground if we have permission @@ -132,10 +130,10 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { override fun onBind(intent: Intent?): IBinder { bindCount.incrementAndGet() - Log.d(TAG, "onBind: $intent") + Logger.i("onBind: $intent") if (intent.isFromSystem()) { - Log.d(TAG, "onBind from system") + Logger.i("onBind from system") _shouldBeOnForeground.update { true } } @@ -179,14 +177,14 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { // Foreground? if (intent.isFromSystem()) { - Log.d(TAG, "onUnbind from system") + Logger.i("onUnbind from system") _shouldBeOnForeground.update { false } } if (count == 0) { - Log.d(TAG, "No one bound to the service, stopSelf()") + Logger.i("No one bound to the service, stopSelf()") lifecycleScope.launch { - Log.d(TAG, "Waiting for disconnected state") + Logger.i("Waiting for disconnected state") // TODO This needs reworking, we should not wait for the disconnected state, what we // want is the notification of disconnected to go out before we start shutting down connectionProxy.tunnelState @@ -197,7 +195,7 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { .first() if (bindCount.get() == 0) { - Log.d(TAG, "Stopping service") + Logger.i("Stopping service") stopSelf() } } @@ -206,7 +204,7 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider { } override fun onDestroy() { - Log.d(TAG, "MullvadVpnService: onDestroy") + Logger.i("MullvadVpnService: onDestroy") managementService.stop() // Shutting down the daemon gracefully diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/ForegroundNotificationManager.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/ForegroundNotificationManager.kt index d65cb7255c..613c6cdbef 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/ForegroundNotificationManager.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/ForegroundNotificationManager.kt @@ -4,10 +4,9 @@ import android.app.Service import android.content.pm.ServiceInfo import android.net.VpnService import android.os.Build -import android.util.Log +import co.touchlab.kermit.Logger import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import net.mullvad.mullvadvpn.lib.common.constant.TAG import net.mullvad.mullvadvpn.lib.model.Notification import net.mullvad.mullvadvpn.lib.model.NotificationChannel import net.mullvad.mullvadvpn.lib.model.NotificationTunnelState @@ -25,10 +24,10 @@ class ForegroundNotificationManager( scope.launch { foregroundProvider.shouldBeOnForeground.collect { if (it) { - Log.d(TAG, "Starting foreground") + Logger.i("Starting foreground") notifyForeground(getTunnelStateNotificationOrDefault()) } else { - Log.d(TAG, "Stopping foreground") + Logger.i("Stopping foreground") vpnService.stopForeground(Service.STOP_FOREGROUND_DETACH) } } @@ -51,12 +50,12 @@ class ForegroundNotificationManager( if (VpnService.prepare(vpnService) != null) { // Got connect/disconnect intent, but we don't have permission to go in foreground. // tunnel state will return permission and we will eventually get stopped by system. - Log.d(TAG, "Did not start foreground: VPN permission not granted") + Logger.i("Did not start foreground: VPN permission not granted") return } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - Log.d(TAG, "Starting foreground UPSIDE_DOWN_CAKE") + Logger.i("Starting foreground UPSIDE_DOWN_CAKE") vpnService.startForeground( tunnelStateNotificationProvider.notificationId.value, androidNotification, diff --git a/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/LogTest.kt b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/LogTest.kt new file mode 100644 index 0000000000..1c46c322df --- /dev/null +++ b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/LogTest.kt @@ -0,0 +1,24 @@ +package net.mullvad.mullvadvpn.test.arch + +import com.lemonappdev.konsist.api.Konsist +import com.lemonappdev.konsist.api.verify.assertFalse +import java.util.stream.Stream +import org.junit.jupiter.api.DynamicTest +import org.junit.jupiter.api.TestFactory + +class LogTest { + @TestFactory + fun `ensure no usage of disallowed loggers`(): Stream<DynamicTest> = + DISALLOWED_LOGGER_PACKAGE_NAMES.stream().map { disallowedLoggerPackageName -> + val testName = "ensure no usage of: $disallowedLoggerPackageName" + DynamicTest.dynamicTest(testName) { + Konsist.scopeFromProject().imports.assertFalse { import -> + import.name == disallowedLoggerPackageName + } + } + } + + companion object { + private val DISALLOWED_LOGGER_PACKAGE_NAMES = listOf("android.util.Log") + } +} diff --git a/android/test/common/build.gradle.kts b/android/test/common/build.gradle.kts index df9dea41ab..84a7a46c9c 100644 --- a/android/test/common/build.gradle.kts +++ b/android/test/common/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { implementation(Dependencies.AndroidX.testRules) implementation(Dependencies.AndroidX.testUiAutomator) implementation(Dependencies.junitEngine) + implementation(Dependencies.kermit) implementation(Dependencies.Kotlin.stdlib) androidTestUtil(Dependencies.AndroidX.testOrchestrator) diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt index 9138982a43..2018714e09 100644 --- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt +++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/CaptureScreenshotOnFailedTestRule.kt @@ -7,9 +7,9 @@ import android.os.Build import android.os.Environment import android.os.Environment.DIRECTORY_PICTURES import android.provider.MediaStore -import android.util.Log import androidx.annotation.RequiresApi import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation +import co.touchlab.kermit.Logger import java.io.File import java.io.FileOutputStream import java.io.IOException @@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.TestWatcher class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatcher { override fun testFailed(context: ExtensionContext, cause: Throwable) { - Log.d(testTag, "Capturing screenshot of failed test: " + context.requiredTestMethod.name) + Logger.d("Capturing screenshot of failed test: " + context.requiredTestMethod.name) val timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) val screenshotName = "$timestamp-${context.requiredTestMethod.name}.jpeg" captureScreenshot(testTag, screenshotName) @@ -71,12 +71,12 @@ class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatch try { this.compress(Bitmap.CompressFormat.JPEG, 50, it!!) } catch (e: IOException) { - Log.e(testTag, "Unable to store screenshot: ${e.message}") + Logger.e("Unable to store screenshot: ${e.message}") } } contentResolver.update(uri, contentValues, null, null) } else { - Log.e(testTag, "Unable to store screenshot") + Logger.e("Unable to store screenshot") } } @@ -101,7 +101,7 @@ class CaptureScreenshotOnFailedTestRule(private val testTag: String) : TestWatch try { this.compress(Bitmap.CompressFormat.JPEG, 50, outputStream) } catch (e: IOException) { - Log.e(testTag, "Unable to store screenshot: ${e.message}") + Logger.e("Unable to store screenshot: ${e.message}") } } contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) diff --git a/android/test/e2e/build.gradle.kts b/android/test/e2e/build.gradle.kts index ce80697240..f7afe1b3af 100644 --- a/android/test/e2e/build.gradle.kts +++ b/android/test/e2e/build.gradle.kts @@ -134,6 +134,7 @@ dependencies { implementation(Dependencies.AndroidX.testRules) implementation(Dependencies.AndroidX.testUiAutomator) implementation(Dependencies.androidVolley) + implementation(Dependencies.kermit) implementation(Dependencies.junitAndroidTestExtensions) implementation(Dependencies.junitApi) implementation(Dependencies.junitAndroidTestCore) diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt index f4979258f2..160ef52468 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt @@ -5,6 +5,7 @@ import android.content.Context import android.os.Build import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import co.touchlab.kermit.Logger import de.mannodermaus.junit5.extensions.GrantPermissionExtension import net.mullvad.mullvadvpn.test.common.interactor.AppInteractor import net.mullvad.mullvadvpn.test.common.rule.CaptureScreenshotOnFailedTestRule @@ -34,6 +35,8 @@ abstract class EndToEndTest(private val infra: String) { @BeforeEach fun setup() { + Logger.setTag(LOG_TAG) + device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) targetContext = InstrumentationRegistry.getInstrumentation().targetContext diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt index f79f78e03b..6bacf15a3a 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt @@ -1,8 +1,7 @@ package net.mullvad.mullvadvpn.test.e2e.misc -import android.util.Log import androidx.test.platform.app.InstrumentationRegistry -import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG +import co.touchlab.kermit.Logger import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_NUMBER_ARGUMENT_KEY import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument import net.mullvad.mullvadvpn.test.e2e.interactor.MullvadAccountInteractor @@ -12,7 +11,7 @@ import org.junit.jupiter.api.extension.ExtensionContext class CleanupAccountTestRule : BeforeEachCallback { override fun beforeEach(context: ExtensionContext) { - Log.d(LOG_TAG, "Cleaning up account before test: ${context.requiredTestMethod.name}") + Logger.d("Cleaning up account before test: ${context.requiredTestMethod.name}") val targetContext = InstrumentationRegistry.getInstrumentation().targetContext val validTestAccountNumber = InstrumentationRegistry.getArguments() diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt index 78f5e967e0..a72f27a3ef 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/SimpleMullvadHttpClient.kt @@ -1,8 +1,8 @@ package net.mullvad.mullvadvpn.test.e2e.misc import android.content.Context -import android.util.Log import androidx.test.services.events.TestEventException +import co.touchlab.kermit.Logger import com.android.volley.Request import com.android.volley.toolbox.JsonArrayRequest import com.android.volley.toolbox.JsonObjectRequest @@ -13,7 +13,6 @@ import net.mullvad.mullvadvpn.test.e2e.constant.ACCOUNT_URL import net.mullvad.mullvadvpn.test.e2e.constant.AUTH_URL import net.mullvad.mullvadvpn.test.e2e.constant.CONN_CHECK_URL import net.mullvad.mullvadvpn.test.e2e.constant.DEVICE_LIST_URL -import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG import net.mullvad.mullvadvpn.test.e2e.constant.PARTNER_ACCOUNT_URL import org.json.JSONArray import org.json.JSONObject @@ -23,19 +22,19 @@ class SimpleMullvadHttpClient(context: Context) { private val queue = Volley.newRequestQueue(context) fun removeAllDevices(accountNumber: String) { - Log.v(LOG_TAG, "Remove all devices") + Logger.v("Remove all devices") val token = login(accountNumber) val devices = getDeviceList(token) devices.forEach { removeDevice(token, it) } - Log.v(LOG_TAG, "All devices removed") + Logger.v("All devices removed") } fun login(accountNumber: String): String { - Log.v(LOG_TAG, "Attempt login with account token: $accountNumber") + Logger.v("Attempt login with account token: $accountNumber") val json = JSONObject().apply { put("account_number", accountNumber) } return sendSimpleSynchronousRequest(Request.Method.POST, AUTH_URL, json)!!.let { response -> response.getString("access_token").also { accessToken -> - Log.v(LOG_TAG, "Successfully logged in and received access token: $accessToken") + Logger.v("Successfully logged in and received access token: $accessToken") } } } @@ -59,7 +58,7 @@ class SimpleMullvadHttpClient(context: Context) { } fun getDeviceList(accessToken: String): List<String> { - Log.v(LOG_TAG, "Get devices") + Logger.v("Get devices") val response = sendSimpleSynchronousRequestArray( @@ -74,14 +73,14 @@ class SimpleMullvadHttpClient(context: Context) { .toList() .also { it.map { jsonObject -> jsonObject.getString("name") } - .also { deviceNames -> Log.v(LOG_TAG, "Devices received: $deviceNames") } + .also { deviceNames -> Logger.v("Devices received: $deviceNames") } } .map { it.getString("id") } .toList() } fun removeDevice(token: String, deviceId: String) { - Log.v(LOG_TAG, "Remove device: $deviceId") + Logger.v("Remove device: $deviceId") sendSimpleSynchronousRequestString( method = Request.Method.DELETE, url = "$DEVICE_LIST_URL/$deviceId", @@ -122,11 +121,9 @@ class SimpleMullvadHttpClient(context: Context) { } queue.add(request) return try { - future.get().also { response -> - Log.v(LOG_TAG, "Json object request response: $response") - } + future.get().also { response -> Logger.v("Json object request response: $response") } } catch (e: Exception) { - Log.v(LOG_TAG, "Json object request error: ${e.message}") + Logger.v("Json object request error: ${e.message}") throw TestEventException(REQUEST_ERROR_MESSAGE) } } @@ -153,9 +150,9 @@ class SimpleMullvadHttpClient(context: Context) { } queue.add(request) return try { - future.get().also { response -> Log.v(LOG_TAG, "String request response: $response") } + future.get().also { response -> Logger.v("String request response: $response") } } catch (e: Exception) { - Log.v(LOG_TAG, "String request error: ${e.message}") + Logger.v("String request error: ${e.message}") throw TestEventException(REQUEST_ERROR_MESSAGE) } } @@ -180,11 +177,9 @@ class SimpleMullvadHttpClient(context: Context) { } queue.add(request) return try { - future.get().also { response -> - Log.v(LOG_TAG, "Json array request response: $response") - } + future.get().also { response -> Logger.v("Json array request response: $response") } } catch (e: Exception) { - Log.v(LOG_TAG, "Json array request error: ${e.message}") + Logger.v("Json array request error: ${e.message}") throw TestEventException(REQUEST_ERROR_MESSAGE) } } diff --git a/android/test/mockapi/build.gradle.kts b/android/test/mockapi/build.gradle.kts index 10fd4ca99d..69991d24bb 100644 --- a/android/test/mockapi/build.gradle.kts +++ b/android/test/mockapi/build.gradle.kts @@ -78,6 +78,7 @@ dependencies { implementation(Dependencies.AndroidX.testRunner) implementation(Dependencies.AndroidX.testRules) implementation(Dependencies.AndroidX.testUiAutomator) + implementation(Dependencies.kermit) implementation(Dependencies.jodaTime) implementation(Dependencies.junitAndroidTestExtensions) implementation(Dependencies.junitApi) diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/Extensions.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/Extensions.kt index 7eb096b499..356cacb97e 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/Extensions.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/Extensions.kt @@ -1,7 +1,6 @@ package net.mullvad.mullvadvpn.test.mockapi -import android.util.Log -import net.mullvad.mullvadvpn.test.mockapi.constant.LOG_TAG +import co.touchlab.kermit.Logger import okhttp3.mockwebserver.MockResponse import okio.Buffer import org.json.JSONException @@ -15,7 +14,7 @@ fun Buffer.getAccountNumber(): String? { return try { JSONObject(readUtf8()).getString("account_number") } catch (ex: JSONException) { - Log.e(LOG_TAG, "Unable to parse account number") + Logger.e("Unable to parse account number") ex.printStackTrace() null } diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt index abb4813a33..3539bad0fa 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt @@ -1,13 +1,12 @@ package net.mullvad.mullvadvpn.test.mockapi -import android.util.Log +import co.touchlab.kermit.Logger import net.mullvad.mullvadvpn.test.mockapi.constant.ACCOUNT_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.AUTH_TOKEN_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.CREATE_ACCOUNT_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DEVICES_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ACCESS_TOKEN import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_1 -import net.mullvad.mullvadvpn.test.mockapi.constant.LOG_TAG import net.mullvad.mullvadvpn.test.mockapi.util.accessTokenJsonResponse import net.mullvad.mullvadvpn.test.mockapi.util.accountCreationJson import net.mullvad.mullvadvpn.test.mockapi.util.accountInfoJson @@ -34,7 +33,7 @@ class MockApiDispatcher : Dispatcher() { private var cachedPubKeyFromAppUnderTest: String? = null override fun dispatch(request: RecordedRequest): MockResponse { - Log.d(LOG_TAG, "Request: $request (body=${request.body.peek().readUtf8()})") + Logger.d("Request: $request (body=${request.body.peek().readUtf8()})") return when (request.path ?: "") { AUTH_TOKEN_URL_PATH -> handleLoginRequest(request.body) DEVICES_URL_PATH -> { @@ -70,7 +69,7 @@ class MockApiDispatcher : Dispatcher() { } } }.also { response -> - Log.d(LOG_TAG, "Response: $response (body=${response.getBody()?.peek()?.readUtf8()})") + Logger.d("Response: $response (body=${response.getBody()?.peek()?.readUtf8()})") } } @@ -89,8 +88,7 @@ class MockApiDispatcher : Dispatcher() { .toString() ) } else { - Log.e( - LOG_TAG, + Logger.e( "Unexpected account number (expected=$expectedAccountNumber was=$accountNumber)" ) MockResponse().setResponseCode(400) diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt index 02e53a09d9..74a47f3c3d 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt @@ -3,9 +3,9 @@ package net.mullvad.mullvadvpn.test.mockapi import android.Manifest.permission.READ_EXTERNAL_STORAGE import android.Manifest.permission.WRITE_EXTERNAL_STORAGE import android.content.Context -import android.util.Log import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import co.touchlab.kermit.Logger import de.mannodermaus.junit5.extensions.GrantPermissionExtension import java.net.InetAddress import net.mullvad.mullvadvpn.lib.endpoint.CustomApiEndpointConfiguration @@ -37,13 +37,15 @@ abstract class MockApiTest { @BeforeEach open fun setup() { + Logger.setTag(LOG_TAG) + device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) targetContext = InstrumentationRegistry.getInstrumentation().targetContext app = AppInteractor(device, targetContext, PACKAGE_NAME) mockWebServer.start() - Log.d(LOG_TAG, "Mocked web server started using port: ${mockWebServer.port}") + Logger.d("Mocked web server started using port: ${mockWebServer.port}") endpoint = createEndpoint(mockWebServer.port) } diff --git a/android/tile/build.gradle.kts b/android/tile/build.gradle.kts index 0b2aab45f5..ecd1884e2d 100644 --- a/android/tile/build.gradle.kts +++ b/android/tile/build.gradle.kts @@ -36,6 +36,7 @@ dependencies { implementation(Dependencies.Koin.android) implementation(Dependencies.AndroidX.appcompat) + implementation(Dependencies.kermit) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.KotlinX.coroutinesAndroid) } diff --git a/android/tile/src/main/kotlin/net/mullvad/mullvadvpn/tile/MullvadTileService.kt b/android/tile/src/main/kotlin/net/mullvad/mullvadvpn/tile/MullvadTileService.kt index f796690f18..aef6f3505e 100644 --- a/android/tile/src/main/kotlin/net/mullvad/mullvadvpn/tile/MullvadTileService.kt +++ b/android/tile/src/main/kotlin/net/mullvad/mullvadvpn/tile/MullvadTileService.kt @@ -8,7 +8,7 @@ import android.net.VpnService import android.os.Build import android.service.quicksettings.Tile import android.service.quicksettings.TileService -import android.util.Log +import co.touchlab.kermit.Logger import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope @@ -23,7 +23,6 @@ import kotlinx.coroutines.withTimeoutOrNull import net.mullvad.mullvadvpn.lib.common.constant.KEY_CONNECT_ACTION import net.mullvad.mullvadvpn.lib.common.constant.KEY_DISCONNECT_ACTION import net.mullvad.mullvadvpn.lib.common.constant.MAIN_ACTIVITY_CLASS -import net.mullvad.mullvadvpn.lib.common.constant.TAG import net.mullvad.mullvadvpn.lib.common.constant.VPN_SERVICE_CLASS import net.mullvad.mullvadvpn.lib.common.util.SdkUtils import net.mullvad.mullvadvpn.lib.common.util.SdkUtils.setSubtitleIfSupported @@ -73,7 +72,7 @@ class MullvadTileService : TileService() { if (isUnlockStatusPropagated) { toggleTunnel() } else { - Log.e("mullvad", "Unable to toggle tunnel state") + Logger.e("Unable to toggle tunnel state") } } } @@ -92,7 +91,7 @@ class MullvadTileService : TileService() { val isSetup = VpnService.prepare(applicationContext) == null // TODO This logic should be more advanced, we should ensure user has an account setup etc. if (!isSetup) { - Log.d(TAG, "TileService: VPN service not setup, starting main activity") + Logger.i("TileService: VPN service not setup, starting main activity") val intent = Intent().apply { @@ -106,7 +105,7 @@ class MullvadTileService : TileService() { startActivityAndCollapseCompat(intent) return } else { - Log.d(TAG, "TileService: VPN service is setup") + Logger.i("TileService: VPN service is setup") } val intent = Intent().apply { |
