From 8372cdc194ba9f35fb5930f7aa547e037f48425d Mon Sep 17 00:00:00 2001 From: hoyahozz <85336456+hoyahozz@users.noreply.github.com> Date: Wed, 22 Jan 2025 01:28:17 +0900 Subject: [PATCH] =?UTF-8?q?[TNT-116]=20feat:=20=ED=8A=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EB=84=88=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=82=B4=20=EA=B6=8C=ED=95=9C=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC=20=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trainer/TrainerProfileSetupScreen.kt | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/feature/signup/src/main/java/co/kr/tnt/signup/trainer/TrainerProfileSetupScreen.kt b/feature/signup/src/main/java/co/kr/tnt/signup/trainer/TrainerProfileSetupScreen.kt index 74fc4995..21f8ca2b 100644 --- a/feature/signup/src/main/java/co/kr/tnt/signup/trainer/TrainerProfileSetupScreen.kt +++ b/feature/signup/src/main/java/co/kr/tnt/signup/trainer/TrainerProfileSetupScreen.kt @@ -16,9 +16,11 @@ import androidx.compose.runtime.derivedStateOf 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.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -28,14 +30,25 @@ import co.kr.tnt.designsystem.component.TnTTopBar import co.kr.tnt.designsystem.component.button.TnTBottomButton import co.kr.tnt.designsystem.theme.TnTTheme import co.kr.tnt.signup.common.component.ProfileImageSection +import co.kr.tnt.ui.extensions.moveToAppSetting +import co.kr.tnt.ui.permission.PermissionRequestDialog +import co.kr.tnt.ui.permission.TnTPermission +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.rememberMultiplePermissionsState +@OptIn(ExperimentalPermissionsApi::class) @Composable fun TrainerProfileSetupScreen() { + val context = LocalContext.current + // TODO 상태 관리 따로 빼기 val maxLength = 15 var text by remember { mutableStateOf("") } val isWarning by remember { derivedStateOf { text.length > maxLength } } + var showPermissionRequestDialog by rememberSaveable { mutableStateOf(false) } + val mediaPermissions = rememberMultiplePermissionsState(TnTPermission.MEDIA_ACCESS.values) + Scaffold( topBar = { TnTTopBar(onBackClick = {}) }, containerColor = TnTTheme.colors.commonColors.Common0, @@ -58,7 +71,14 @@ fun TrainerProfileSetupScreen() { ProfileImageSection( modifier = Modifier.fillMaxWidth(), defaultImage = R.drawable.img_default_profile_trainer, - onImageSelected = { }, + onImageSelected = onImageSelected@{ + if (TnTPermission.MEDIA_ACCESS.isAllGranted(mediaPermissions)) { + // TODO 이미지 피커 이동 + return@onImageSelected + } + + showPermissionRequestDialog = true + }, ) Spacer(Modifier.padding(top = 60.dp)) TnTLabeledTextField( @@ -85,6 +105,26 @@ fun TrainerProfileSetupScreen() { onClick = { }, ) } + + if (showPermissionRequestDialog) { + PermissionRequestDialog( + permission = TnTPermission.MEDIA_ACCESS, + isPermanentlyDenied = mediaPermissions.shouldShowRationale, + onOkButtonClick = onOkButtonClick@{ isPermanentlyDenied -> + showPermissionRequestDialog = false + + if (isPermanentlyDenied.not()) { + mediaPermissions.launchMultiplePermissionRequest() + return@onOkButtonClick + } + + context.moveToAppSetting() + }, + onDismissRequest = { + showPermissionRequestDialog = false + }, + ) + } } }