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

74 lines
2.9 KiB
Kotlin
Raw Normal View History

package at.lockstep.player
2026-05-14 02:43:49 +02:00
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
2026-05-14 02:43:49 +02:00
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
2026-05-14 02:43:49 +02:00
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 {
2026-05-14 02:43:49 +02:00
LockstepTheme {
val viewModel: LockstepViewModel =
viewModel(
factory = LockstepViewModelFactory(application),
)
2026-05-14 02:43:49 +02:00
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,
)
}
}
}
}
}
}