Files
lockstep-player/app/src/main/java/at/lockstep/player/MainActivity.kt

74 lines
2.9 KiB
Kotlin

package at.lockstep.player
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.core.util.Consumer
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.rememberNavController
import at.lockstep.player.auth.OAuthCallbackParser
import at.lockstep.player.ui.LockstepAppNavHost
import at.lockstep.player.ui.theme.LockstepTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
LockstepTheme {
val viewModel: LockstepViewModel =
viewModel(
factory = LockstepViewModelFactory(application),
)
val context = LocalContext.current
val onboardingDone by viewModel.onboardingComplete.collectAsStateWithLifecycle()
LaunchedEffect(Unit) {
intent?.data?.let { uri ->
OAuthCallbackParser.parseAccessToken(uri)?.let { token ->
viewModel.saveSpotifyAccessToken(token)
}
}
}
DisposableEffect(viewModel) {
val listener =
Consumer<Intent> { newIntent ->
newIntent.data?.let { uri ->
OAuthCallbackParser.parseAccessToken(uri)?.let { token ->
viewModel.saveSpotifyAccessToken(token)
}
}
}
addOnNewIntentListener(listener)
onDispose { removeOnNewIntentListener(listener) }
}
Surface(modifier = Modifier.fillMaxSize()) {
if (!onboardingDone) {
at.lockstep.player.ui.onboarding.OnboardingScreen(
viewModel = viewModel,
onFinished = { },
)
} else {
val navController = rememberNavController()
LockstepAppNavHost(
activity = this@MainActivity,
navController = navController,
viewModel = viewModel,
)
}
}
}
}
}
}