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:
@@ -92,7 +92,8 @@ class MainActivity : ComponentActivity() {
|
|||||||
selectedAccount != null -> {
|
selectedAccount != null -> {
|
||||||
DashboardScreen(
|
DashboardScreen(
|
||||||
account = selectedAccount,
|
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
|
@Composable
|
||||||
fun DashboardScreen(account: Account, onBack: () -> Unit) {
|
fun DashboardScreen(account: Account, onBack: () -> Unit, onDelete: () -> Unit) {
|
||||||
|
|
||||||
BackHandler {
|
BackHandler {
|
||||||
onBack()
|
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(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.SharingStarted
|
|||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import java.util.Locale
|
||||||
|
import java.util.Locale.getDefault
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
class LoginViewModel(private val prefs: UserPreferences, private val appContext: Context) : ViewModel() {
|
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 {
|
try {
|
||||||
val response = withContext(Dispatchers.IO) {
|
val response = withContext(Dispatchers.IO) {
|
||||||
api.login(LoginRequest(username, password))
|
api.login(LoginRequest(username.lowercase(getDefault()), password))
|
||||||
}
|
}
|
||||||
|
|
||||||
if(response.isSuccessful) {
|
if(response.isSuccessful) {
|
||||||
|
|||||||
@@ -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)
|
var selectedAccount by mutableStateOf<Account?>(null)
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user