diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt index 4bc9eb1b..ee46c8c2 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt @@ -308,6 +308,7 @@ fun FeedCommentScreen( isSaveVisible = true, isSaved = feedDetail.isSaved, isPinVisible = false, + isLockIcon = feedDetail.isPublic == false, onLikeClick = { feedDetailViewModel.changeFeedLike() }, onCommentClick = { /* 스크롤 이동 or 포커스 처리 */ }, onBookmarkClick = { feedDetailViewModel.changeFeedSave() }, diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedWriteScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedWriteScreen.kt index efb2cd97..4c02a4bc 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedWriteScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedWriteScreen.kt @@ -1,8 +1,12 @@ package com.texthip.thip.ui.feed.screen import android.net.Uri +import android.os.Build import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.platform.LocalContext import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -113,14 +117,27 @@ fun FeedWriteContent( onSearchBooks: (String) -> Unit = {} ) { val scrollState = rememberScrollState() - val imagePickerLauncher = rememberLauncherForActivityResult( + val focusManager = LocalFocusManager.current + + val remainingSlots = 3 - uiState.currentImageCount + + // Android 13+ Photo Picker (개수 제한 지원) - 최소 2로 설정하여 API 제약 회피 + val photoPickerLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.PickMultipleVisualMedia(maxItems = maxOf(2, remainingSlots)) + ) { uris -> + if (uris.isNotEmpty() && remainingSlots > 0) { + onAddImages(uris.take(remainingSlots)) + } + } + + // Fallback for older Android versions + val legacyImagePickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.GetMultipleContents() - ) { uris: List -> + ) { uris -> if (uris.isNotEmpty()) { onAddImages(uris) } } - val focusManager = LocalFocusManager.current Box { Column( @@ -197,7 +214,13 @@ fun FeedWriteContent( ) .let { if (uiState.canAddMoreImages) it.clickable { - imagePickerLauncher.launch("image/*") + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && remainingSlots > 1) { + photoPickerLauncher.launch( + PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) + ) + } else { + legacyImagePickerLauncher.launch("image/*") + } } else it // 클릭 비활성화 }, diff --git a/app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt b/app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt index 711e35cc..a89bbbda 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt @@ -32,8 +32,8 @@ data class FeedUiState( val isLastPageMyFeeds: Boolean = false, val error: String? = null ) { - val canLoadMoreAllFeeds: Boolean get() = !isLoading && !isLoadingMore && !isRefreshing && !isLastPageAllFeeds - val canLoadMoreMyFeeds: Boolean get() = !isLoading && !isLoadingMore && !isRefreshing && !isLastPageMyFeeds + val canLoadMoreAllFeeds: Boolean get() = !isLoading && !isLoadingMore && !isRefreshing && !isPullToRefreshing && !isLastPageAllFeeds + val canLoadMoreMyFeeds: Boolean get() = !isLoading && !isLoadingMore && !isRefreshing && !isPullToRefreshing && !isLastPageMyFeeds val currentTabFeeds: List get() = when (selectedTabIndex) { 0 -> allFeeds diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt index 1b478a5c..dae96fa1 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt @@ -28,11 +28,11 @@ import java.time.LocalDate @Composable fun GroupDatePicker( + modifier: Modifier = Modifier, selectedDate: LocalDate, minDate: LocalDate, maxDate: LocalDate, - onDateSelected: (LocalDate) -> Unit, - modifier: Modifier = Modifier + onDateSelected: (LocalDate) -> Unit ) { // 선택된 날짜에서 년/월/일 추출 val year = selectedDate.year @@ -55,7 +55,7 @@ fun GroupDatePicker( verticalAlignment = Alignment.CenterVertically ) { GroupWheelPicker( - modifier = Modifier.width(48.dp), + modifier = modifier.width(48.dp), items = years, selectedItem = year, onItemSelected = { newYear -> diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt index 49d41c13..ff2b2376 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt @@ -114,7 +114,6 @@ fun GroupRoomDurationPicker( startDate = newDate }, modifier = Modifier - .weight(1f) .pointerInput(Unit) { detectTapGestures( onPress = { isPickerTouched = true } @@ -139,7 +138,6 @@ fun GroupRoomDurationPicker( endDate = newDate }, modifier = Modifier - .weight(1f) .pointerInput(Unit) { detectTapGestures( onPress = { isPickerTouched = true } diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt index f4fff79a..3f00f471 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt @@ -43,6 +43,7 @@ import com.texthip.thip.ui.group.makeroom.viewmodel.GroupMakeRoomViewModel import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography +import com.texthip.thip.utils.rooms.advancedImePadding import com.texthip.thip.utils.rooms.toDisplayStrings @@ -106,7 +107,7 @@ fun GroupMakeRoomContent( ) { val scrollState = rememberScrollState() - Box { + Box(modifier = Modifier.advancedImePadding()) { Column( modifier = modifier .fillMaxSize() diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt index c93bab84..79b7c057 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt @@ -281,7 +281,7 @@ fun GroupRoomRecruitContent( //참여 인원 Column( verticalArrangement = Arrangement.Center, - modifier = Modifier.padding(start = 90.dp) + modifier = Modifier.padding(start = 50.dp) ) { Row( verticalAlignment = Alignment.CenterVertically diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomUnlockScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomUnlockScreen.kt index 066326ce..cfbcd686 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomUnlockScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomUnlockScreen.kt @@ -36,6 +36,7 @@ import com.texthip.thip.ui.group.room.viewmodel.GroupRoomUnlockViewModel import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography +import com.texthip.thip.utils.rooms.advancedImePadding import kotlinx.coroutines.delay @Composable @@ -96,7 +97,7 @@ fun GroupRoomUnlockScreen( } } - Box(modifier = Modifier.fillMaxSize()) { + Box(modifier = Modifier.fillMaxSize().advancedImePadding()) { Column( modifier = Modifier.fillMaxSize() ) { diff --git a/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt b/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt index 6f6a3e94..2c3e7986 100644 --- a/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt @@ -79,6 +79,7 @@ fun SavedFeedCard( Column( modifier = Modifier + .padding(bottom = 16.dp) .clickable { onContentClick() }, // 전체 영역 클릭 유지 verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally @@ -89,8 +90,7 @@ fun SavedFeedCard( style = typography.feedcopy_r400_s14_h20, color = colors.White, maxLines = maxLines, - modifier = Modifier - .fillMaxWidth(), + modifier = Modifier.fillMaxWidth(), onTextLayout = { textLayoutResult -> isTextTruncated = textLayoutResult.hasVisualOverflow }