Coverage Summary for Class: MainActivity (com.vsevolodganin.clicktrack)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| MainActivity |
0%
(0/6)
|
0%
(0/6)
|
0%
(0/29)
|
0%
(0/184)
|
| MainActivity$MetroMembersInjector |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/62)
|
| MainActivity$MetroMembersInjector$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/31)
|
| MainActivity$onCreate$2 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/19)
|
| MainActivity$onCreate$lambda$0$0$0$$inlined$onDispose$1 |
0%
(0/2)
|
|
| Total |
0%
(0/11)
|
0%
(0/6)
|
0%
(0/32)
|
0%
(0/296)
|
package com.vsevolodganin.clicktrack
import android.Manifest
import android.content.Intent
import android.graphics.Color
import android.media.AudioManager
import android.os.Build
import android.os.Bundle
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.DisposableEffect
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.arkivanov.decompose.defaultComponentContext
import com.vsevolodganin.clicktrack.common.InAppReview
import com.vsevolodganin.clicktrack.migration.MigrationManager
import com.vsevolodganin.clicktrack.soundlibrary.SoundChooser
import com.vsevolodganin.clicktrack.ui.RootView
import com.vsevolodganin.clicktrack.utils.android.PermissionsHelper
import dev.zacsweers.metro.Inject
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
@Suppress("unused") // FIXME: Initializing eagerly for proper registration of Activity Result API
@Inject
private lateinit var soundsChooser: SoundChooser
@Inject
private lateinit var permissionsHelper: PermissionsHelper
@Inject
private lateinit var migrationManager: MigrationManager
@Inject
private lateinit var rootViewModel: RootViewModel
@Inject
private lateinit var intentProcessor: IntentProcessor
@Inject
private lateinit var inAppReview: InAppReview
@OptIn(DelicateCoroutinesApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
applicationComponent.mainActivityComponentFactory
.create(
activity = this,
componentContext = defaultComponentContext(),
)
.inject(this)
installSplashScreen()
enableEdgeToEdge()
migrationManager.tryMigrate()
setContent {
val isSystemInDarkTheme = isSystemInDarkTheme()
DisposableEffect(isSystemInDarkTheme) {
enableEdgeToEdge(
statusBarStyle = SystemBarStyle.dark(Color.TRANSPARENT),
navigationBarStyle = if (isSystemInDarkTheme) {
SystemBarStyle.dark(Color.TRANSPARENT)
} else {
SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT)
},
)
onDispose {}
}
RootView(rootViewModel)
}
if (savedInstanceState == null) {
intentProcessor.process(intent)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
GlobalScope.launch {
permissionsHelper.requestPermission(Manifest.permission.POST_NOTIFICATIONS)
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intentProcessor.process(intent)
}
override fun onResume() {
super.onResume()
volumeControlStream = AudioManager.STREAM_MUSIC
inAppReview.tryLaunchRequestReview()
}
}