diff --git a/app/src/main/java/com/paw/key/core/util/PreferenceDataStore.kt b/app/src/main/java/com/paw/key/core/util/PreferenceDataStore.kt index 4f215e9e..1daebdca 100644 --- a/app/src/main/java/com/paw/key/core/util/PreferenceDataStore.kt +++ b/app/src/main/java/com/paw/key/core/util/PreferenceDataStore.kt @@ -141,7 +141,7 @@ object PreferenceDataStore { } fun getUserId(): Flow = summaryStore.data.map { - it[USER_ID_KEY] ?: 0 + it[USER_ID_KEY] ?: 41 } fun getUserName(): Flow = summaryStore.data.map { diff --git a/app/src/main/java/com/paw/key/domain/model/entity/walkreview/WalkReviewRecordEntity.kt b/app/src/main/java/com/paw/key/domain/model/entity/walkreview/WalkReviewRecordEntity.kt index a5866769..e98c9f42 100644 --- a/app/src/main/java/com/paw/key/domain/model/entity/walkreview/WalkReviewRecordEntity.kt +++ b/app/src/main/java/com/paw/key/domain/model/entity/walkreview/WalkReviewRecordEntity.kt @@ -16,13 +16,13 @@ data class WalkReviewRecordEntity( title = title, description = description, isPublic = isPublic, - isMine = isMine, selectedCategories = categories.map { category -> SelectedCategoryDto( categoryId = category.categoryId, selectedOptionIds = category.selectedOptionIds ) }, + isMine = isMine, routeId = routeId, ) } diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/entire/tab/map/TapMapScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/course/entire/tab/map/TapMapScreen.kt index 2081d69d..693536ec 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/entire/tab/map/TapMapScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/entire/tab/map/TapMapScreen.kt @@ -227,7 +227,7 @@ fun TapMapScreen( contentAlignment = Alignment.BottomCenter ) { Text( - text = "산책 기록 시작하기", + text = "산책 기록하기", color = PawKeyTheme.colors.white1, fontSize = 16.sp, modifier = Modifier diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/SharedWalkCourseScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/SharedWalkCourseScreen.kt index f7df779f..c01efc2e 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/SharedWalkCourseScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/SharedWalkCourseScreen.kt @@ -577,7 +577,7 @@ fun SharedWalkCourseScreen( color = PawKeyTheme.colors.green500, shape = RoundedCornerShape(8.dp) ) - .padding(horizontal = 28.dp, vertical = 16.dp), + .padding(horizontal = 24.dp, vertical = 16.dp), color = PawKeyTheme.colors.green500, style = PawKeyTheme.typography.body16Sb ) diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/component/sharedCourseMapView.kt b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/component/sharedCourseMapView.kt index 6a13e05f..bd634640 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/component/sharedCourseMapView.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/component/sharedCourseMapView.kt @@ -247,20 +247,28 @@ fun sharedWalkCourseMapView( } } - LaunchedEffect(centerLabel, trackingManager) { + LaunchedEffect(isTrackingEnabled) { + kakaoMapState?.moveCamera( + CameraUpdateFactory.newCenterPosition( + currentUserLocation, 19 + ) + ) + } + + /*LaunchedEffect(centerLabel, trackingManager) { if (centerLabel != null && trackingManager != null) { trackingManager?.startTracking(centerLabel) } - } + }*/ LaunchedEffect(isPauseTracking) { if (!isPauseTracking) { - trackingManager?.stopTracking() + //trackingManager?.stopTracking() mapView.isClickable = false dimScreenLayer?.setColor(Color.Black.copy(alpha = 0.5f).toArgb()) dimScreenLayer?.setVisible(true) } else { - trackingManager?.stopTracking() + //trackingManager?.stopTracking() mapView.isClickable = true dimScreenLayer?.setVisible(false) } diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/viewmodel/SharedWalkViewModel.kt b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/viewmodel/SharedWalkViewModel.kt index 1ec00c70..15236366 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/viewmodel/SharedWalkViewModel.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/sharedwalk/sharedroute/viewmodel/SharedWalkViewModel.kt @@ -54,7 +54,7 @@ class SharedWalkCourseViewModel @Inject constructor( _state.update { state -> state.copy( poiPoints = it.geometry.coordinates.map { coord -> - LatLng.from(coord[0], coord[1]) + LatLng.from(coord[1], coord[0]) }.toPersistentList() ) } diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/walk/WalkCourseScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/course/walk/WalkCourseScreen.kt index c5b425a2..97e6a7e7 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/walk/WalkCourseScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/walk/WalkCourseScreen.kt @@ -10,8 +10,10 @@ import android.hardware.SensorEventListener import android.hardware.SensorManager import android.opengl.GLException import android.os.Build +import android.os.Handler import android.os.Looper import android.util.Log +import android.view.PixelCopy import androidx.annotation.RequiresApi import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -308,7 +310,6 @@ fun WalkCourseRoute( onLabelClick = { _, _ -> }, currentUserLocation = state.currentLocation, poiPoints = if (isSharedWalk) { - //Todo : 여기 공유용 루트 좌표값용 listOf() } else { state.poiPoints @@ -475,12 +476,11 @@ fun WalkCourseScreen( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { - // Todo : 텍스트 스타일 24b로 변경 예쩡 if (!isSharedWalk) { Text( text = "산책이 중단되었어요!", textAlign = TextAlign.Center, - style = PawKeyTheme.typography.head22B, + style = PawKeyTheme.typography.head24B, color = PawKeyTheme.colors.white1, modifier = Modifier.fillMaxWidth() ) @@ -492,6 +492,7 @@ fun WalkCourseScreen( style = PawKeyTheme.typography.body16M, color = PawKeyTheme.colors.white2, modifier = Modifier.fillMaxWidth() + .padding(top = 12.dp) ) } else { Text( @@ -572,6 +573,7 @@ fun WalkCourseScreen( }, modifier = Modifier .padding(top = 16.dp) + .padding(bottom = 44.dp) ) } else { Row ( @@ -613,7 +615,7 @@ fun WalkCourseScreen( .noRippleClickable { onStopTracking() } - .padding(horizontal = 24.dp, vertical = 16.dp), + .padding(horizontal = 28.dp, vertical = 16.dp), color = PawKeyTheme.colors.white1, style = PawKeyTheme.typography.body16Sb ) @@ -626,20 +628,95 @@ fun WalkCourseScreen( } fun captureMapToBitmap(surfaceView: GLSurfaceView, onCaptured: (Bitmap?) -> Unit) { - surfaceView.queueEvent { - val egl = EGLContext.getEGL() as EGL10 - val gl = egl.eglGetCurrentContext().gl as GL10 - - // 원하는 최종 크기를 먼저 계산 - val screenWidth = surfaceView.context.resources.displayMetrics.widthPixels - val contentWidth = (screenWidth - 32) - val targetHeight = (156 * surfaceView.context.resources.displayMetrics.density).toInt() - - val bitmap = createBitmapFromGLSurface(0, 0, surfaceView.width, surfaceView.height, gl) - onCaptured(bitmap) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + captureUsingPixelCopy(surfaceView, onCaptured) + } else { + surfaceView.queueEvent { + val egl = EGLContext.getEGL() as EGL10 + val gl = egl.eglGetCurrentContext().gl as GL10 + + val context = surfaceView.context + val density = context.resources.displayMetrics.density + val screenWidth = context.resources.displayMetrics.widthPixels + + val contentWidth = (screenWidth - 32) + val targetHeight = (156 * density).toInt() + + // OpenGL로 전체 비트맵 캡처 + val fullBitmap = createBitmapFromGLSurface(0, 0, surfaceView.width, surfaceView.height, gl) + + val croppedBitmap = fullBitmap?.let { bitmap -> + val centerX = bitmap.width / 2 + val centerY = bitmap.height / 2 + + val cropStartX = (centerX - contentWidth / 2).coerceAtLeast(0) + val cropStartY = (centerY - targetHeight / 2).coerceAtLeast(0) + + val safeWidth = minOf(contentWidth, bitmap.width - cropStartX) + val safeHeight = minOf(targetHeight, bitmap.height - cropStartY) + + Bitmap.createBitmap(bitmap, cropStartX, cropStartY, safeWidth, safeHeight) + } + + onCaptured(croppedBitmap) + } + } +} + +@RequiresApi(Build.VERSION_CODES.O) +fun captureUsingPixelCopy( + surfaceView: GLSurfaceView, + onCaptured: (Bitmap?) -> Unit +) { + val rawBitmap = Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888) + + try { + PixelCopy.request(surfaceView, rawBitmap, { copyResult -> + if (copyResult == PixelCopy.SUCCESS) { + val croppedBitmap = cropCenterWithAspectRatio(rawBitmap, 16f / 11f) + onCaptured(croppedBitmap) + } else { + Log.e("PixelCopy", "PixelCopy 실패: $copyResult") + onCaptured(null) + } + }, Handler(Looper.getMainLooper())) + } catch (e: IllegalArgumentException) { + e.printStackTrace() + onCaptured(null) + } +} + +fun cropCenterWithAspectRatio( + bitmap: Bitmap, + targetAspectRatio: Float +): Bitmap { + val width = bitmap.width + val height = bitmap.height + val currentAspectRatio = width.toFloat() / height.toFloat() + + val cropWidth: Int + val cropHeight: Int + + if (currentAspectRatio > targetAspectRatio) { + // 현재 이미지가 더 넓음 → 좌우 잘라야 함 + cropHeight = height + cropWidth = (height * targetAspectRatio).toInt() + } else { + // 현재 이미지가 더 높음 → 위아래 잘라야 함 + cropWidth = width + cropHeight = (width / targetAspectRatio).toInt() } + + val startX = ((width - cropWidth) / 2).coerceAtLeast(0) + val startY = ((height - cropHeight) / 2).coerceAtLeast(0) + + val safeWidth = minOf(cropWidth, width - startX) + val safeHeight = minOf(cropHeight, height - startY) + + return Bitmap.createBitmap(bitmap, startX, startY, safeWidth, safeHeight) } + fun createBitmapFromGLSurface(x: Int, y: Int, w: Int, h: Int, gl: GL10): Bitmap? { val bitmapBuffer = IntArray(w * h) val bitmapSource = IntArray(w * h) diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/WalkReviewScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/WalkReviewScreen.kt index 2ae4cb4f..01ac302a 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/WalkReviewScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/WalkReviewScreen.kt @@ -4,6 +4,7 @@ import android.Manifest import android.net.Uri import android.os.Build import android.util.Log +import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts @@ -29,6 +30,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -64,6 +66,7 @@ fun WalkReviewRoute( ) { val state by viewModel.state.collectAsStateWithLifecycle() val isValid = state.isValidForm + val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current @@ -111,6 +114,10 @@ fun WalkReviewRoute( sideEffect.message ) + is WalkReviewContract.WalkReviewSideEffect.SHowToastMessage -> { + Toast.makeText(context, sideEffect.message, Toast.LENGTH_SHORT).show() + } + is WalkReviewContract.WalkReviewSideEffect.NavigateNext -> { Log.d("WalkReviewRoute", "navigateNext") navigateShared(sideEffect.routeId, sideEffect.pageId) diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/state/WalkReviewContract.kt b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/state/WalkReviewContract.kt index 2dd7bfcc..fee4731c 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/state/WalkReviewContract.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/state/WalkReviewContract.kt @@ -36,6 +36,7 @@ class WalkReviewContract { sealed class WalkReviewSideEffect { data class ShowSnackBar(val message: String) : WalkReviewSideEffect() + data class SHowToastMessage(val message: String) : WalkReviewSideEffect() data object NavigateUp: WalkReviewSideEffect() data class NavigateNext(val routeId : Int, val pageId : Int): WalkReviewSideEffect() } diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/viewmodel/WalkReviewViewModel.kt b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/viewmodel/WalkReviewViewModel.kt index ad9fe28d..c84a079e 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/viewmodel/WalkReviewViewModel.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/course/walkreview/viewmodel/WalkReviewViewModel.kt @@ -75,8 +75,11 @@ class WalkReviewViewModel @Inject constructor( _sideEffect.emit(WalkReviewSideEffect.NavigateNext(response.routeId, response.postId)) Log.d("WalkReviewViewModel", "리뷰 전송 성공!") Log.d("WalkReviewViewModel", "routeId : ${response.routeId}, postId : ${response.postId}") - }.onFailure { + }.onFailure { respon -> + _sideEffect.emit(WalkReviewSideEffect.SHowToastMessage("${respon.message}")) _sideEffect.emit(WalkReviewSideEffect.ShowSnackBar("리뷰 전송 실패!")) + + Log.e("WalkReviewViewModel", "리뷰 전송 실패!") } } diff --git a/app/src/main/java/com/paw/key/presentation/ui/login/LoginScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/login/LoginScreen.kt index f8f3d517..ea22b5c0 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/login/LoginScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/login/LoginScreen.kt @@ -1,5 +1,6 @@ package com.paw.key.presentation.ui.login +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -12,17 +13,28 @@ import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.relocation.BringIntoViewRequester +import androidx.compose.foundation.relocation.bringIntoViewRequester +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Icon import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -75,6 +87,7 @@ fun LoginRoute( ) } +@OptIn(ExperimentalFoundationApi::class) @Composable fun LoginScreen( paddingValues: PaddingValues, @@ -90,11 +103,18 @@ fun LoginScreen( isLoginFormValid: Boolean, modifier: Modifier = Modifier, ) { + val bringIntoViewRequester = remember { BringIntoViewRequester() } + val focusRequester = remember { FocusRequester() } + val coroutineScope = rememberCoroutineScope() + val scrollState = rememberScrollState() + val passwordFocusRequester = remember { FocusRequester() } + Column( modifier = modifier .fillMaxSize() .statusBarsPadding() .background(PawKeyTheme.colors.white1) + .verticalScroll(scrollState) ) { TopBar( title = "기존 계정으로 로그인", @@ -123,7 +143,13 @@ fun LoginScreen( textValue = email, placeHolder = "사용하실 아이디를 입력해주세요", isPassword = true, - onTextChanged = onEmailChanged + onTextChanged = onEmailChanged, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), + keyboardActions = KeyboardActions( + onNext = { + passwordFocusRequester.requestFocus() + } + ) ) Spacer(modifier = Modifier.height(40.dp)) @@ -140,10 +166,12 @@ fun LoginScreen( placeHolder = "사용하실 비밀번호를 입력해주세요", isPassword = isPasswordVisible, onTextChanged = onPasswordChanged, + focusRequester = passwordFocusRequester, + keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done), suffix = { Icon( imageVector = ImageVector.vectorResource( - if (!isPasswordVisible) R.drawable.ic_eye_linear_gray_valid + if (isPasswordVisible) R.drawable.ic_eye_linear_gray_valid else R.drawable.ic_eye_linear_invalid ), contentDescription = null, @@ -151,6 +179,16 @@ fun LoginScreen( tint = PawKeyTheme.colors.gray200 ) }, + modifier = Modifier + .bringIntoViewRequester(bringIntoViewRequester) + .focusRequester(focusRequester) + .onFocusChanged { focusState -> + if (focusState.isFocused) { + coroutineScope.launch { + bringIntoViewRequester.bringIntoView() + } + } + }, ) } diff --git a/app/src/main/java/com/paw/key/presentation/ui/login/component/LoginTextField.kt b/app/src/main/java/com/paw/key/presentation/ui/login/component/LoginTextField.kt index e46c2b1c..d4f9093f 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/login/component/LoginTextField.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/login/component/LoginTextField.kt @@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.selection.LocalTextSelectionColors import androidx.compose.foundation.text.selection.TextSelectionColors import androidx.compose.material3.Text @@ -15,6 +17,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation @@ -22,6 +26,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.paw.key.core.designsystem.theme.PawKeyTheme + @Composable fun LoginTextField( textValue: String, @@ -29,7 +34,10 @@ fun LoginTextField( onTextChanged: (String) -> Unit, modifier: Modifier = Modifier, isPassword: Boolean = false, - suffix: @Composable (() -> Unit)? = null + suffix: @Composable (() -> Unit)? = null, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + focusRequester: FocusRequester? = null, ) { val customTextSelectionColors = TextSelectionColors( handleColor = PawKeyTheme.colors.green500, @@ -46,9 +54,12 @@ fun LoginTextField( singleLine = true, textStyle = PawKeyTheme.typography.body14R, visualTransformation = if (!isPassword) PasswordVisualTransformation() else VisualTransformation.None, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + modifier = focusRequester?.let { modifier.focusRequester(it) } ?: modifier, decorationBox = { innerTextField -> Box( - modifier = modifier + modifier = Modifier .fillMaxWidth() .background( color = PawKeyTheme.colors.white1, @@ -63,13 +74,9 @@ fun LoginTextField( ) { Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { - Box( - modifier = Modifier - .weight(1f) - ) { + Box(modifier = Modifier.weight(1f)) { if (textValue.isEmpty()) { Text( text = placeHolder, @@ -89,7 +96,6 @@ fun LoginTextField( } - @Preview @Composable private fun LoginTextFieldPreview() { diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt b/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt index 1c39591b..4e701e0b 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt @@ -206,7 +206,7 @@ fun PawKeyNavHost( ) archivedDetailNavGraph( - navigateUp = navigator::navigateUp, + navigateUp = navigator::navigateHome, navigateToSharedWalk = { routeId, pageId -> Log.e("navigateNext", "navigateNext : $routeId") navigator.navigateSharedWalkCourse( @@ -264,10 +264,10 @@ fun PawKeyNavHost( loginNavGraph( paddingValues = paddingValues, - navigateUp = navigator::navigateHome, - navigateNext = { + navigateUp = { navigator.navigateSignUpFlow() }, + navigateNext = navigator::navigateHome, snackBarHostState = snackbarHostState ) @@ -285,7 +285,7 @@ fun PawKeyNavHost( popUpTo(0) { inclusive = true } launchSingleTop = true } - navigator.navigateHome(navOptions = options) + navigator.navigateHome(options) } ) diff --git a/app/src/main/java/com/paw/key/presentation/ui/region/component/regionalMapView.kt b/app/src/main/java/com/paw/key/presentation/ui/region/component/regionalMapView.kt index 33597462..f64e0af8 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/region/component/regionalMapView.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/region/component/regionalMapView.kt @@ -53,9 +53,6 @@ fun regionalMapView( // ------------------------------------------------ // - - - DisposableEffect(lifeCycle) { val observer = object : DefaultLifecycleObserver { override fun onCreate(owner: LifecycleOwner) { diff --git a/app/src/main/java/com/paw/key/presentation/ui/region/viewmodel/RegionViewModel.kt b/app/src/main/java/com/paw/key/presentation/ui/region/viewmodel/RegionViewModel.kt index 9febc843..7f635194 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/region/viewmodel/RegionViewModel.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/region/viewmodel/RegionViewModel.kt @@ -34,10 +34,6 @@ class RegionViewModel @Inject constructor( fun getRegionGeometry(userId: Int, regionId: Int) = viewModelScope.launch { regionRepository.getRegionGeometry(userId, regionId) .onSuccess { data -> - Log.d("RegionViewModel", "API 응답 성공: $data") - Log.d("RegionViewModel", "geometry type: ${data.geometry.type}") - Log.d("RegionViewModel", "coordinates size: ${data.geometry.coordinates.size}") - val coordinates = data.geometry.coordinates val flattenedLatLng = flattenCoordinatesToLatLng(coordinates) diff --git a/app/src/main/java/com/paw/key/presentation/ui/signup/viewmodel/SignUpViewModel.kt b/app/src/main/java/com/paw/key/presentation/ui/signup/viewmodel/SignUpViewModel.kt index feba6c15..01e3b118 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/signup/viewmodel/SignUpViewModel.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/signup/viewmodel/SignUpViewModel.kt @@ -474,6 +474,7 @@ class SignUpViewModel @Inject constructor( _sideEffect.emit(SignUpContract.SignUpSideEffect.NavigateNext) }.onFailure { error -> Log.e("SignUpViewModel", "SignUp failed: ${error.message}") + Log.e("SignUpViewModel", "SignUp failed: ${request}") _sideEffect.emit(SignUpContract.SignUpSideEffect.ShowSnackBar("회원가입 실패: ${error.message}")) } } catch (e: Exception) {