89 lines
2.8 KiB
Kotlin
89 lines
2.8 KiB
Kotlin
package com.example.nto_minipigs
|
|
|
|
import android.content.Context
|
|
import android.content.SharedPreferences
|
|
import android.os.Bundle
|
|
import android.util.Log
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.remember
|
|
import androidx.datastore.core.DataStore
|
|
import androidx.datastore.preferences.core.Preferences
|
|
import androidx.datastore.preferences.core.edit
|
|
import androidx.datastore.preferences.core.intPreferencesKey
|
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
|
import androidx.datastore.preferences.preferencesDataStore
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|
import androidx.navigation.compose.NavHost
|
|
import androidx.navigation.compose.composable
|
|
import androidx.navigation.compose.rememberNavController
|
|
import com.example.nto_minipigs.ui.screens.LoginScreen
|
|
import com.example.nto_minipigs.ui.theme.Nto_minipigsTheme
|
|
import kotlinx.coroutines.flow.Flow
|
|
import kotlinx.coroutines.flow.map
|
|
import kotlinx.serialization.Serializable
|
|
|
|
class MainActivity : ComponentActivity() {
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
enableEdgeToEdge()
|
|
setContent {
|
|
Nto_minipigsTheme {
|
|
val dataStore = remember {
|
|
UserData(applicationContext)
|
|
}
|
|
|
|
val navController = rememberNavController()
|
|
val loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
|
|
|
|
val token by dataStore.token.collectAsStateWithLifecycle("")
|
|
|
|
Log.d("tokenn", token.toString())
|
|
|
|
NavHost(
|
|
navController = navController,
|
|
startDestination = Login
|
|
) {
|
|
composable<Login> { LoginScreen( onNavigateToMain = { navController.navigate(route = Main)}, viewModel = loginViewModel, dataStore = dataStore ) }
|
|
composable<Main> { MainScreen() }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class UserData(private val context: Context) {
|
|
val Context.dataStore by preferencesDataStore("user_data")
|
|
|
|
val token = context.dataStore.data.map { preferences ->
|
|
preferences[tokenKey]
|
|
}
|
|
|
|
suspend fun updateToken(data:String) =
|
|
context.dataStore.edit { settings ->
|
|
settings[tokenKey] = data
|
|
}
|
|
|
|
companion object {
|
|
val tokenKey = stringPreferencesKey("Bearer")
|
|
}
|
|
}
|
|
|
|
@Serializable
|
|
object Login
|
|
|
|
@Serializable
|
|
object Main
|
|
|
|
@Composable
|
|
fun MainScreen() {
|
|
Text("Main")
|
|
}
|