diff --git a/app/src/main/java/com/thryan/secondclass/ui/component/Button.kt b/app/src/main/java/com/thryan/secondclass/ui/component/Button.kt deleted file mode 100644 index d9e7c09..0000000 --- a/app/src/main/java/com/thryan/secondclass/ui/component/Button.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.thryan.secondclass.ui.component - -import androidx.compose.foundation.layout.RowScope -import androidx.compose.material3.Button -import androidx.compose.material3.OutlinedButton -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import kotlinx.coroutines.delay - -@Composable -fun DebouncedButton( - modifier: Modifier = Modifier, - outline: Boolean = true, - enabled: Boolean = true, - onClick: () -> Unit, - content: @Composable (RowScope.() -> Unit) -) { - var clicked by remember { - mutableStateOf(!enabled) - } - LaunchedEffect(clicked) { - if (clicked) { - delay(1000L) - clicked = !clicked - } - } - if (!outline) - Button( - modifier = modifier, - onClick = { - if (enabled && !clicked) { - clicked = true - onClick() - } - }, - content = content - ) - else - OutlinedButton( - modifier = modifier, - onClick = { - if (enabled && !clicked) { - clicked = true - onClick() - } - }, - content = content - ) - - -} diff --git a/app/src/main/java/com/thryan/secondclass/ui/info/Info.kt b/app/src/main/java/com/thryan/secondclass/ui/info/Info.kt index 4a7a2e0..6d2a53d 100644 --- a/app/src/main/java/com/thryan/secondclass/ui/info/Info.kt +++ b/app/src/main/java/com/thryan/secondclass/ui/info/Info.kt @@ -51,7 +51,6 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.thryan.secondclass.R import com.thryan.secondclass.core.utils.signIn -import com.thryan.secondclass.ui.component.TimePicker @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/com/thryan/secondclass/ui/component/TimePicker.kt b/app/src/main/java/com/thryan/secondclass/ui/info/TimePicker.kt similarity index 95% rename from app/src/main/java/com/thryan/secondclass/ui/component/TimePicker.kt rename to app/src/main/java/com/thryan/secondclass/ui/info/TimePicker.kt index dd57c2c..ed066a8 100644 --- a/app/src/main/java/com/thryan/secondclass/ui/component/TimePicker.kt +++ b/app/src/main/java/com/thryan/secondclass/ui/info/TimePicker.kt @@ -1,4 +1,4 @@ -package com.thryan.secondclass.ui.component +package com.thryan.secondclass.ui.info import android.util.Log import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/app/src/main/java/com/thryan/secondclass/ui/login/Login.kt b/app/src/main/java/com/thryan/secondclass/ui/login/Login.kt index 06ed516..7f37eb7 100644 --- a/app/src/main/java/com/thryan/secondclass/ui/login/Login.kt +++ b/app/src/main/java/com/thryan/secondclass/ui/login/Login.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding @@ -12,21 +13,26 @@ import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp -import com.thryan.secondclass.ui.component.DebouncedButton +import kotlinx.coroutines.delay @SuppressLint("FlowOperatorInvokedInComposition") @@ -100,7 +106,7 @@ fun LoginContent(uiState: LoginState, viewModel: LoginViewModel) { keyboardActions = KeyboardActions( onDone = { } ), - //visualTransformation = PasswordVisualTransformation() + visualTransformation = PasswordVisualTransformation() ) OutlinedTextField( @@ -159,3 +165,44 @@ private fun Dialog( } ) } + +@Composable +fun DebouncedButton( + modifier: Modifier = Modifier, + outline: Boolean = true, + enabled: Boolean = true, + onClick: () -> Unit, + content: @Composable (RowScope.() -> Unit) +) { + var clicked by remember { + mutableStateOf(!enabled) + } + LaunchedEffect(clicked) { + if (clicked) { + delay(1000L) + clicked = !clicked + } + } + if (!outline) + Button( + modifier = modifier, + onClick = { + if (enabled && !clicked) { + clicked = true + onClick() + } + }, + content = content + ) + else + OutlinedButton( + modifier = modifier, + onClick = { + if (enabled && !clicked) { + clicked = true + onClick() + } + }, + content = content + ) +} \ No newline at end of file