Added account deletion and improved login case-insensitivity

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.
This commit is contained in:
2026-02-27 18:28:17 +01:00
parent d94b3f74de
commit dc9f4121e0
3 changed files with 20 additions and 4 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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<Account?>(null)
private set