From dc9f4121e087b1649d2d7395147bda703b3e2d5b Mon Sep 17 00:00:00 2001 From: "Maurice L." Date: Fri, 27 Feb 2026 18:28:17 +0100 Subject: [PATCH] Added account deletion and improved login case-insensitivity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Dashboard now includes a "Löschen" (Delete) button that allows users to remove the currently selected account via the `MainViewModel`. The login process has been updated to convert usernames to lowercase before authentication to ensure consistency. Additionally, spacing adjustments were made to the Dashboard UI layout. --- .../shap_planner/activities/MainActivity.kt | 13 ++++++++++--- .../shap_planner/viewmodels/LoginViewModel.kt | 4 +++- .../shap_planner/viewmodels/MainViewModel.kt | 7 +++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/de/miaurizius/shap_planner/activities/MainActivity.kt b/app/src/main/java/de/miaurizius/shap_planner/activities/MainActivity.kt index aa8b3fc..4d9034d 100644 --- a/app/src/main/java/de/miaurizius/shap_planner/activities/MainActivity.kt +++ b/app/src/main/java/de/miaurizius/shap_planner/activities/MainActivity.kt @@ -92,7 +92,8 @@ class MainActivity : ComponentActivity() { selectedAccount != null -> { DashboardScreen( account = selectedAccount, - onBack = { mainViewModel.logoutFromAccount() } + onBack = { mainViewModel.logoutFromAccount() }, + onDelete = { mainViewModel.deleteAccount(selectedAccount) } ) } @@ -203,7 +204,7 @@ fun LoginScreen(onLogin: (String, String, String) -> Unit, onBack: (() -> Unit)? } @Composable -fun DashboardScreen(account: Account, onBack: () -> Unit) { +fun DashboardScreen(account: Account, onBack: () -> Unit, onDelete: () -> Unit) { BackHandler { onBack() @@ -230,7 +231,13 @@ fun DashboardScreen(account: Account, onBack: () -> Unit) { } } - Spacer(modifier = Modifier.height(32.dp)) + Spacer(modifier = Modifier.height(5.dp)) + + Button(onClick = onDelete) { + Text("Löschen") + } + + Spacer(modifier = Modifier.height(10.dp)) Box( modifier = Modifier diff --git a/app/src/main/java/de/miaurizius/shap_planner/viewmodels/LoginViewModel.kt b/app/src/main/java/de/miaurizius/shap_planner/viewmodels/LoginViewModel.kt index 1387f77..c20f2da 100644 --- a/app/src/main/java/de/miaurizius/shap_planner/viewmodels/LoginViewModel.kt +++ b/app/src/main/java/de/miaurizius/shap_planner/viewmodels/LoginViewModel.kt @@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.util.Locale +import java.util.Locale.getDefault import java.util.UUID class LoginViewModel(private val prefs: UserPreferences, private val appContext: Context) : ViewModel() { @@ -28,7 +30,7 @@ class LoginViewModel(private val prefs: UserPreferences, private val appContext: try { val response = withContext(Dispatchers.IO) { - api.login(LoginRequest(username, password)) + api.login(LoginRequest(username.lowercase(getDefault()), password)) } if(response.isSuccessful) { diff --git a/app/src/main/java/de/miaurizius/shap_planner/viewmodels/MainViewModel.kt b/app/src/main/java/de/miaurizius/shap_planner/viewmodels/MainViewModel.kt index 0fa786c..9c1fec3 100644 --- a/app/src/main/java/de/miaurizius/shap_planner/viewmodels/MainViewModel.kt +++ b/app/src/main/java/de/miaurizius/shap_planner/viewmodels/MainViewModel.kt @@ -24,6 +24,13 @@ class MainViewModel(private val accountDao: AccountDao) : ViewModel() { } } + fun deleteAccount(account: Account) { + viewModelScope.launch { + accountDao.deleteAccount(account) + selectedAccount = null + } + } + var selectedAccount by mutableStateOf(null) private set