Implement sending logs to developer (#190)
* Save logs to a file * Send logs via email * Enable network logs in release builds * Remove useless chooser title * Append to logs file and ignore I/O errors * Ensure email and password are not logged * Ensure base URL is never logged * Add logs disclaimer
This commit is contained in:
@@ -7,7 +7,7 @@ plugins {
|
||||
|
||||
android {
|
||||
defaultConfig {
|
||||
buildConfigField("Boolean", "LOG_NETWORK", "false")
|
||||
buildConfigField("Boolean", "LOG_NETWORK", "true")
|
||||
consumerProguardFiles("consumer-proguard-rules.pro")
|
||||
}
|
||||
namespace = "gq.kirmanak.mealient.datasource"
|
||||
@@ -31,7 +31,7 @@ dependencies {
|
||||
|
||||
implementation(platform(libs.okhttp3.bom))
|
||||
implementation(libs.okhttp3.okhttp)
|
||||
debugImplementation(libs.okhttp3.loggingInterceptor)
|
||||
implementation(libs.okhttp3.loggingInterceptor)
|
||||
|
||||
implementation(libs.ktor.core)
|
||||
implementation(libs.ktor.auth)
|
||||
|
||||
@@ -10,25 +10,12 @@ import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dagger.multibindings.IntoSet
|
||||
import gq.kirmanak.mealient.datasource.BuildConfig
|
||||
import gq.kirmanak.mealient.logging.Logger
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
internal object DebugModule {
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideLoggingInterceptor(logger: Logger): Interceptor {
|
||||
val interceptor = HttpLoggingInterceptor { message -> logger.v(tag = "OkHttp") { message } }
|
||||
interceptor.level = when {
|
||||
BuildConfig.LOG_NETWORK -> HttpLoggingInterceptor.Level.BODY
|
||||
else -> HttpLoggingInterceptor.Level.BASIC
|
||||
}
|
||||
return interceptor
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
|
||||
@@ -5,13 +5,17 @@ import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dagger.multibindings.IntoSet
|
||||
import gq.kirmanak.mealient.datasource.impl.MealieDataSourceImpl
|
||||
import gq.kirmanak.mealient.datasource.impl.MealieServiceKtor
|
||||
import gq.kirmanak.mealient.datasource.impl.NetworkRequestWrapperImpl
|
||||
import gq.kirmanak.mealient.datasource.impl.OkHttpBuilderImpl
|
||||
import gq.kirmanak.mealient.datasource.impl.TrustedCertificatesStoreImpl
|
||||
import gq.kirmanak.mealient.logging.Logger
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@@ -33,6 +37,17 @@ internal interface DataSourceModule {
|
||||
fun provideOkHttp(okHttpBuilder: OkHttpBuilderImpl): OkHttpClient =
|
||||
okHttpBuilder.buildOkHttp()
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideLoggingInterceptor(logger: Logger): Interceptor {
|
||||
val interceptor =
|
||||
HttpLoggingInterceptor { message -> logger.v(tag = "OkHttp") { message } }
|
||||
interceptor.level = when {
|
||||
BuildConfig.LOG_NETWORK -> HttpLoggingInterceptor.Level.BODY
|
||||
else -> HttpLoggingInterceptor.Level.BASIC
|
||||
}
|
||||
return interceptor
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
package gq.kirmanak.mealient
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import okhttp3.Interceptor
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object ReleaseModule {
|
||||
|
||||
// Release version of the application doesn't have any interceptors but this Set
|
||||
// is required by Dagger, so an empty Set is provided here
|
||||
// Use @JvmSuppressWildcards because otherwise dagger can't inject it (https://stackoverflow.com/a/43149382)
|
||||
@Provides
|
||||
fun provideInterceptors(): Set<@JvmSuppressWildcards Interceptor> = emptySet()
|
||||
}
|
||||
Reference in New Issue
Block a user