74 lines
2.9 KiB
Kotlin
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,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|