Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions app/src/main/kotlin/com/infomaniak/auth/MainApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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<AssociatedUserDataCleanable>(DeviceInfoUpdateManager)
Expand All @@ -78,4 +83,41 @@ open class MainApplication : Application(), Configuration.Provider {
var userDataCleanableList: List<AssociatedUserDataCleanable> = 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()
)
}
}
Loading