93 lines
3.9 KiB
Kotlin
93 lines
3.9 KiB
Kotlin
package com.example.scanwich
|
|
|
|
import android.content.SharedPreferences
|
|
import android.widget.Toast
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.rememberScrollState
|
|
import androidx.compose.foundation.verticalScroll
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.Edit
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import androidx.compose.ui.text.font.FontWeight
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.core.content.edit
|
|
|
|
@Composable
|
|
fun SettingsScreen(prefs: SharedPreferences, onLogout: () -> Unit, onProfileUpdated: () -> Unit) {
|
|
var isEditing by remember { mutableStateOf(false) }
|
|
val context = LocalContext.current
|
|
|
|
// État réactif pour la connexion Strava
|
|
var isStravaConnected by remember { mutableStateOf(prefs.contains("strava_token")) }
|
|
|
|
// Écouteur pour mettre à jour l'état si le token change
|
|
DisposableEffect(prefs) {
|
|
val listener = SharedPreferences.OnSharedPreferenceChangeListener { p, key ->
|
|
if (key == "strava_token") {
|
|
isStravaConnected = p.contains("strava_token")
|
|
}
|
|
}
|
|
prefs.registerOnSharedPreferenceChangeListener(listener)
|
|
onDispose {
|
|
prefs.unregisterOnSharedPreferenceChangeListener(listener)
|
|
}
|
|
}
|
|
|
|
if (isEditing) {
|
|
SetupScreen(prefs) {
|
|
isEditing = false
|
|
onProfileUpdated()
|
|
}
|
|
} else {
|
|
val targetCals = prefs.getString("target_calories", "0")
|
|
Column(modifier = Modifier.fillMaxSize().padding(16.dp).verticalScroll(rememberScrollState())) {
|
|
Text("Mon Profil", style = MaterialTheme.typography.headlineMedium)
|
|
Spacer(Modifier.height(16.dp))
|
|
Card(modifier = Modifier.fillMaxWidth()) {
|
|
Column(modifier = Modifier.padding(16.dp)) {
|
|
ProfileItem("Objectif", prefs.getString("goal", "") ?: "")
|
|
ProfileItem("Cible Calorique", "$targetCals kcal")
|
|
ProfileItem("Diabétique", if (prefs.getBoolean("is_diabetic", false)) "Oui" else "Non")
|
|
}
|
|
}
|
|
Spacer(Modifier.height(8.dp))
|
|
Button(onClick = { isEditing = true }, modifier = Modifier.fillMaxWidth()) { Icon(Icons.Default.Edit, null); Text(" Modifier le profil") }
|
|
|
|
Spacer(Modifier.height(32.dp))
|
|
Text("Intégrations", style = MaterialTheme.typography.titleMedium)
|
|
Spacer(Modifier.height(8.dp))
|
|
|
|
if (isStravaConnected) {
|
|
OutlinedButton(
|
|
onClick = {
|
|
prefs.edit {
|
|
remove("strava_token")
|
|
remove("strava_refresh_token")
|
|
}
|
|
// L'écouteur mettra `isStravaConnected` à jour automatiquement
|
|
Toast.makeText(context, "Strava déconnecté", Toast.LENGTH_SHORT).show()
|
|
},
|
|
modifier = Modifier.fillMaxWidth()
|
|
) {
|
|
Text("Déconnecter Strava (Connecté)")
|
|
}
|
|
} else {
|
|
Text("Aucune intégration active. Allez dans l'onglet 'Sport' pour connecter Strava.", style = MaterialTheme.typography.bodyMedium)
|
|
}
|
|
|
|
Spacer(Modifier.height(32.dp))
|
|
Button(onClick = onLogout, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.error), modifier = Modifier.fillMaxWidth()) { Text("Déconnexion") }
|
|
}
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun ProfileItem(label: String, value: String) {
|
|
Row(modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), horizontalArrangement = Arrangement.SpaceBetween) {
|
|
Text(label, fontWeight = FontWeight.Bold); Text(value)
|
|
}
|
|
}
|