diff --git a/app/src/main/kotlin/com/infomaniak/auth/MainApplication.kt b/app/src/main/kotlin/com/infomaniak/auth/MainApplication.kt index 2970c9ce..02150020 100644 --- a/app/src/main/kotlin/com/infomaniak/auth/MainApplication.kt +++ b/app/src/main/kotlin/com/infomaniak/auth/MainApplication.kt @@ -18,6 +18,9 @@ package com.infomaniak.auth import android.app.Application +import android.os.Build.VERSION.SDK_INT +import android.os.StrictMode +import androidx.annotation.RequiresApi import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import com.infomaniak.auth.data.preferences.SentryPreferences @@ -30,6 +33,7 @@ import com.infomaniak.core.network.ApiEnvironment import com.infomaniak.core.network.NetworkConfiguration import com.infomaniak.core.sentry.SentryConfig.configureSentry import dagger.hilt.android.HiltAndroidApp +import io.sentry.Sentry import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -64,6 +68,7 @@ open class MainApplication : Application(), Configuration.Provider { override fun onCreate() { super.onCreate() + if (BuildConfig.DEBUG) setupStrictMode() else setupProductionThreadMonitoring() notificationUtils.initNotificationChannel() userDataCleanableList = listOf(DeviceInfoUpdateManager) @@ -78,4 +83,41 @@ open class MainApplication : Application(), Configuration.Provider { var userDataCleanableList: List = emptyList() protected set } + + private fun setupStrictMode() { + StrictMode.setThreadPolicy( + StrictMode.ThreadPolicy.Builder() + .detectAll() + .penaltyFlashScreen() + .penaltyLog() + .build() + ) + StrictMode.setVmPolicy( + StrictMode.VmPolicy.Builder() + .detectAll() + .penaltyLog() + .build() + ) + } + + private fun setupProductionThreadMonitoring() { + if (SDK_INT >= 28) { + setupProductionThreadMonitoringApi28() + } + } + + @RequiresApi(28) + private fun setupProductionThreadMonitoringApi28() { + StrictMode.setThreadPolicy( + StrictMode.ThreadPolicy.Builder() + .detectDiskReads() + .detectDiskWrites() + .detectNetwork() + .detectCustomSlowCalls() + .penaltyListener(mainExecutor) { violation -> + Sentry.captureException(violation) + } + .build() + ) + } }