diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/account/AccountScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/account/AccountScreen.kt index 2f9f808b..542c76e8 100644 --- a/presentation/src/main/java/daily/dayo/presentation/screen/account/AccountScreen.kt +++ b/presentation/src/main/java/daily/dayo/presentation/screen/account/AccountScreen.kt @@ -3,6 +3,7 @@ package daily.dayo.presentation.screen.account import BottomSheetController import LocalBottomSheetController import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding @@ -35,7 +36,9 @@ internal fun AccountScreen( snackbarHost = { SnackbarHost( hostState = snackBarHostState, - modifier = Modifier.navigationBarsPadding() + modifier = Modifier + .navigationBarsPadding() + .imePadding() ) } ) { innerPadding -> @@ -75,4 +78,4 @@ internal fun AccountScreen( sealed class AccountScreen(val route: String) { object SignIn : AccountScreen(SignInRoute.route) -} \ No newline at end of file +} diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/account/ResetPasswordScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/account/ResetPasswordScreen.kt index 35bc2c24..0b132025 100644 --- a/presentation/src/main/java/daily/dayo/presentation/screen/account/ResetPasswordScreen.kt +++ b/presentation/src/main/java/daily/dayo/presentation/screen/account/ResetPasswordScreen.kt @@ -9,6 +9,8 @@ import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically import androidx.compose.animation.slideInVertically import androidx.compose.foundation.background +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -276,6 +278,8 @@ fun ResetPasswordScreen( isCheckingEmail: Boolean = false, setIsCheckingEmail: (Boolean) -> Unit = {}, ) { + val contentScrollState = rememberScrollState() + Surface( modifier = Modifier .background(DayoTheme.colorScheme.background) @@ -333,9 +337,10 @@ fun ResetPasswordScreen( Column( modifier = Modifier .background(DayoTheme.colorScheme.background) + .weight(1f) .padding(horizontal = 20.dp, vertical = 0.dp) .fillMaxWidth() - .wrapContentSize() + .verticalScroll(contentScrollState) ) { // Title 영역 Spacer(modifier = Modifier.height(8.dp)) @@ -432,7 +437,6 @@ fun ResetPasswordScreen( } } } - Spacer(modifier = Modifier.weight(1f)) ResetPasswordBottomLayout( resetPasswordStep = resetPasswordStep, onNextClick = { @@ -808,4 +812,4 @@ enum class ResetPasswordStep(val stepNum: Int) { EMAIL_VERIFICATION(2), // 인증번호 입력 NEW_PASSWORD_INPUT(3), // 비밀번호 입력 NEW_PASSWORD_CONFIRM(4), // 비밀번호 재입력 -} \ No newline at end of file +} diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/account/SignInEmailScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/account/SignInEmailScreen.kt index 4511ae24..ba57c09d 100644 --- a/presentation/src/main/java/daily/dayo/presentation/screen/account/SignInEmailScreen.kt +++ b/presentation/src/main/java/daily/dayo/presentation/screen/account/SignInEmailScreen.kt @@ -3,6 +3,8 @@ package daily.dayo.presentation.screen.account import android.app.Activity import android.content.Intent import androidx.compose.foundation.background +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -17,7 +19,6 @@ import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -109,8 +110,7 @@ internal fun SignInEmailRoute( email = email, password = password ) - }, - accountViewModel = accountViewModel + } ) Loading( @@ -128,11 +128,11 @@ fun SignInEmailScreen( onBackClick: () -> Unit = {}, onForgetPasswordClick: () -> Unit = {}, onSignUpClick: () -> Unit = {}, - onSignInClick: (email: String, password: String) -> Unit = { _, _ -> }, - accountViewModel: AccountViewModel = hiltViewModel() + onSignInClick: (email: String, password: String) -> Unit = { _, _ -> } ) { val emailState = remember { mutableStateOf("") } val passwordState = remember { mutableStateOf("") } + val contentScrollState = rememberScrollState() val isSignInButtonEnabled = remember(emailState.value, passwordState.value) { emailState.value.isNotBlank() && passwordState.value.isNotBlank() } @@ -146,9 +146,10 @@ fun SignInEmailScreen( SignInEmailActionbarLayout(onBackClick = onBackClick) Column( modifier = Modifier + .weight(1f) .padding(horizontal = 20.dp, vertical = 0.dp) .fillMaxWidth() - .wrapContentSize(), + .verticalScroll(contentScrollState), verticalArrangement = Arrangement.Top ) { Spacer( @@ -171,7 +172,6 @@ fun SignInEmailScreen( onSignInClick = { onSignInClick(emailState.value, passwordState.value) } ) } - Spacer(modifier = Modifier.weight(1f)) SignInEmailBottomLayout( onSignUpClick = onSignUpClick, onSignInClick = { onSignInClick(emailState.value, passwordState.value) }, @@ -226,7 +226,11 @@ fun SignInEmailInputLayout( ) { DayoTextField( modifier = Modifier.focusRequester(focusRequesterEmail), - label = stringResource(R.string.sign_in_email_input_email_title), + label = if (emailValue.isNotEmpty()) { + stringResource(R.string.sign_in_email_input_email_title) + } else { + " " + }, placeholder = stringResource(R.string.sign_in_email_input_email_title), value = emailValue, onValueChange = onEmailChange, @@ -242,7 +246,11 @@ fun SignInEmailInputLayout( ) DayoPasswordTextField( modifier = Modifier.focusRequester(focusRequesterPassword), - label = stringResource(R.string.sign_in_email_input_password_title), + label = if (passwordValue.isNotEmpty()) { + stringResource(R.string.sign_in_email_input_password_title) + } else { + " " + }, placeholder = stringResource(R.string.sign_in_email_input_password_placeholder), value = passwordValue, onValueChange = onPasswordChange, diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/account/SignUpEmailScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/account/SignUpEmailScreen.kt index c42bbbed..8f6514aa 100644 --- a/presentation/src/main/java/daily/dayo/presentation/screen/account/SignUpEmailScreen.kt +++ b/presentation/src/main/java/daily/dayo/presentation/screen/account/SignUpEmailScreen.kt @@ -7,6 +7,8 @@ import android.graphics.BitmapFactory import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Spacer @@ -564,6 +566,8 @@ fun SignUpEmailScaffold( onNextClick: () -> Unit = {}, content: @Composable (ColumnScope.() -> Unit), ) { + val contentScrollState = rememberScrollState() + BackHandler { onBackClick() } Scaffold( topBar = { @@ -604,9 +608,10 @@ fun SignUpEmailScaffold( Column( modifier = Modifier .background(DayoTheme.colorScheme.background) + .weight(1f) .padding(horizontal = 20.dp, vertical = 0.dp) .fillMaxWidth() - .wrapContentSize() + .verticalScroll(contentScrollState) ) { if (signUpStep.stepNum <= SignUpStep.PASSWORD_CONFIRM.stepNum) { SignUpEmailTitleLayout(title = title, subTitle = subTitle) @@ -615,7 +620,6 @@ fun SignUpEmailScaffold( } if (signUpStep != SignUpStep.SIGNUP_COMPLETE) { - Spacer(modifier = Modifier.weight(1f)) SignUpEmailBottomLayout( signUpStep = signUpStep, onNextClick = { onNextClick() }, @@ -683,4 +687,4 @@ fun SignUpEmailNextButton( enabled = isSignUpButtonEnabled, ) } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/settings/ChangePasswordScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/settings/ChangePasswordScreen.kt index ede8c5ad..3963f12c 100644 --- a/presentation/src/main/java/daily/dayo/presentation/screen/settings/ChangePasswordScreen.kt +++ b/presentation/src/main/java/daily/dayo/presentation/screen/settings/ChangePasswordScreen.kt @@ -3,6 +3,8 @@ package daily.dayo.presentation.screen.settings import android.content.Context import androidx.activity.compose.BackHandler import androidx.compose.foundation.background +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Spacer @@ -12,7 +14,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -225,6 +226,8 @@ fun ChangePasswordScaffold( onNextClick: () -> Unit = {}, content: @Composable (ColumnScope.() -> Unit) = {}, ) { + val contentScrollState = rememberScrollState() + BackHandler { onBackClick() } Scaffold( topBar = { @@ -242,15 +245,15 @@ fun ChangePasswordScaffold( Column( modifier = Modifier .background(DayoTheme.colorScheme.background) + .weight(1f) .padding(horizontal = 18.dp, vertical = 0.dp) .fillMaxWidth() - .wrapContentSize() + .verticalScroll(contentScrollState) ) { ChangePasswordTitleLayout(title = title) content() } - Spacer(modifier = Modifier.weight(1f)) ChangePasswordBottomLayout( onNextClick = { onNextClick() }, isChangePasswordButtonEnabled = isNextButtonEnabled, @@ -341,4 +344,4 @@ enum class ChangePasswordStep(val stepNum: Int) { CUR_PASSWORD_INPUT(1), // 현재 비밀번호 입력 NEW_PASSWORD_INPUT(2), // 비밀번호 입력 NEW_PASSWORD_CONFIRM(3), // 비밀번호 재입력 -} \ No newline at end of file +}