Skip to content

Commit 19112b5

Browse files
authored
Merge pull request #62 from Nexters/dev
1.0.3 dev 브랜치를 main 브랜치에 머지합니다.
2 parents e9bb000 + 1fa559b commit 19112b5

File tree

14 files changed

+99
-38
lines changed

14 files changed

+99
-38
lines changed

build-logic/convention/src/main/kotlin/com/plottwist/tuk/Extension.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ fun ApplicationExtension.configureDefaultConfig() {
1111
defaultConfig {
1212
applicationId = "com.plottwist.tuk"
1313
targetSdk = 36
14-
versionCode = 6
15-
versionName = "1.0.1"
14+
versionCode = 8
15+
versionName = "1.0.3"
1616

1717
vectorDrawables {
1818
useSupportLibrary = true

core/data/src/main/java/com/plottwist/core/data/gathering/repository/JoinGatheringRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class JoinGatheringRepositoryImpl @Inject constructor(
2828
return if (response.success) {
2929
val name = response.data?.gatheringName
3030
if (name != null) Result.success(name)
31-
else Result.failure(Exception("이름 없음"))
31+
else Result.failure(Exception("닉네임 없음"))
3232
} else {
3333
Result.failure(Exception(response.meta?.errorMessage ?: "알 수 없는 에러"))
3434
}

core/designsystem/src/main/res/values/strings.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
<string name="create_proposal_propose">다음</string>
3030
<string name="create_proposal_selected_gathering_name">%s 친구들에게</string>
3131

32-
<string name="onboarding_name_title">어떤 이름으로 친구들에게\n인사할까요?</string>
33-
<string name="onboarding_name_description">모임 안에서 나를 알아볼 수 있게,\n실명을 적어주세요.</string>
34-
<string name="onboarding_name_text_field_label">이름</string>
35-
<string name="onboarding_name_text_field_hint">이름을 입력해 주세요</string>
32+
<string name="onboarding_name_title">어떤 닉네임으로 친구들에게\n인사할까요?</string>
33+
<string name="onboarding_name_description">모임 안에서 나를 알아볼 수 있게 작성해 주세요.</string>
34+
<string name="onboarding_name_text_field_label">닉네임</string>
35+
<string name="onboarding_name_text_field_hint">닉네임을 입력해 주세요</string>
3636

3737
<string name="select_gathering_topbar_title">모임 선택</string>
3838
<string name="select_gathering_title">어떤 모임에게\n넌지시 제안할까요</string>

feature/home/src/main/java/com/plottwist/feature/home/HomeContract.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ data class HomeState(
1616
val whenLabel: String = "",
1717
val whereLabel: String = "",
1818
val whatLabel: String = "",
19-
val proposalTags: UiState<ProposalTags> = UiState.Loading
19+
val proposalTags: UiState<ProposalTags> = UiState.Loading,
20+
val isRandomPlaying: Boolean = true,
21+
val currentIndex : Int = 0
2022
)
2123

2224
sealed class HomeAction {
@@ -29,6 +31,8 @@ sealed class HomeAction {
2931
data class ClickPropose(val index : Int): HomeAction()
3032
data object ClickProposals: HomeAction()
3133
data object OnPermissionGranted: HomeAction()
34+
data object ClickPlay: HomeAction()
35+
data object ClickStop: HomeAction()
3236
}
3337

3438
sealed class HomeSideEffect {

feature/home/src/main/java/com/plottwist/feature/home/HomeScreen.kt

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ fun HomeScreen(
9797
var homeBottomSheetAction: HomeBottomSheetAction by remember {
9898
mutableStateOf(HomeBottomSheetAction.IDLE)
9999
}
100-
var hasBottomSheetShook by remember { mutableStateOf(false) }
101100
var bottomSheetState by remember { mutableStateOf<HomeBottomSheetState>(HomeBottomSheetState.COLLAPSED) }
102101

103102
BackHandler(bottomSheetState == HomeBottomSheetState.EXPANDED) {
@@ -109,10 +108,6 @@ fun HomeScreen(
109108
homeBottomSheetAction = HomeBottomSheetAction.IDLE
110109
}
111110

112-
LaunchedEffect(Unit) {
113-
delay(800)
114-
hasBottomSheetShook = true
115-
}
116111

117112
viewModel.collectSideEffect { sideEffect ->
118113
when (sideEffect) {
@@ -170,6 +165,8 @@ fun HomeScreen(
170165
loginState = state.loginState,
171166
gatherings = state.gatherings,
172167
homeBottomSheetAction = homeBottomSheetAction,
168+
isPlayed = state.isRandomPlaying,
169+
selectedCurrentIndex = state.currentIndex,
173170
onMyPageClick = {
174171
viewModel.handleAction(HomeAction.ClickMyPage)
175172
},
@@ -181,6 +178,9 @@ fun HomeScreen(
181178
},
182179
onChangedState = {
183180
bottomSheetState = it
181+
if(it == HomeBottomSheetState.COLLAPSED) {
182+
viewModel.handleAction(HomeAction.ClickPlay)
183+
}
184184
},
185185
onWhenRefreshClick = {
186186
viewModel.handleAction(HomeAction.ClickRefreshWhen)
@@ -196,7 +196,13 @@ fun HomeScreen(
196196
},
197197
onProposalsClick = {
198198
viewModel.handleAction(HomeAction.ClickProposals)
199-
}
199+
},
200+
onStopClick = {
201+
viewModel.handleAction(HomeAction.ClickStop)
202+
},
203+
onPlayClick = {
204+
viewModel.handleAction(HomeAction.ClickPlay)
205+
},
200206
)
201207

202208
if(isShownNoGatheringsPopup) {
@@ -245,9 +251,11 @@ private fun HomeScreen(
245251
statusBarHeight: Dp,
246252
userName: UiState<String>,
247253
loginState: LoginState,
254+
selectedCurrentIndex: Int,
248255
gatherings: UiState<Gatherings>,
249256
proposalTags: UiState<ProposalTags>,
250257
homeBottomSheetAction: HomeBottomSheetAction,
258+
isPlayed: Boolean,
251259
onWhenRefreshClick: () -> Unit,
252260
onWhereRefreshClick: () -> Unit,
253261
onWhatRefreshClick: () -> Unit,
@@ -257,21 +265,29 @@ private fun HomeScreen(
257265
onChangedState: (HomeBottomSheetState) -> Unit,
258266
onProposeClick: (Int) -> Unit,
259267
onProposalsClick: () -> Unit,
268+
onStopClick: () -> Unit,
269+
onPlayClick: () -> Unit,
260270
modifier: Modifier = Modifier,
261271
verticalScrollState : ScrollState = rememberScrollState()
262272
) {
263273
val homeContentTopPadding = screenHeight / 2 - statusBarHeight - TOP_APP_BAR_HEIGHT.dp
264274
val shake = remember { Animatable(0f) }
275+
var isShook by rememberSaveable { mutableStateOf(false) }
265276

266-
LaunchedEffect(Unit) {
267-
delay(200)
268-
for (i in 0..10) {
269-
when (i % 2) {
270-
0 -> shake.animateTo(3f, spring(stiffness = 50_000f))
271-
else -> shake.animateTo(-3f, spring(stiffness = 50_000f))
277+
278+
LaunchedEffect(isShook) {
279+
if(!isShook) {
280+
delay(1200)
281+
for (i in 0..10) {
282+
when (i % 2) {
283+
0 -> shake.animateTo(3f, spring(stiffness = 50_000f))
284+
else -> shake.animateTo(-3f, spring(stiffness = 50_000f))
285+
}
272286
}
287+
shake.animateTo(0f)
288+
isShook = true
273289
}
274-
shake.animateTo(0f)
290+
275291
}
276292

277293

@@ -331,12 +347,16 @@ private fun HomeScreen(
331347
whatLabels = proposalTags.value.whatTags,
332348
sheetPeekHeight = BOTTOM_SHEET_PEEK_HEIGHT.dp,
333349
sheetFullHeight = BOTTOM_SHEET_FULL_HEIGHT.dp,
350+
isPlayed = isPlayed,
351+
selectedCurrentIndex = selectedCurrentIndex,
334352
homeBottomSheetAction = homeBottomSheetAction,
335353
onWhenRefreshClick = onWhenRefreshClick,
336354
onWhereRefreshClick = onWhereRefreshClick,
337355
onWhatRefreshClick = onWhatRefreshClick,
338356
onChangedState = onChangedState,
339-
onProposeClick = onProposeClick
357+
onProposeClick = onProposeClick,
358+
onStopClick = onStopClick,
359+
onPlayClick = onPlayClick,
340360
)
341361
}
342362

@@ -481,6 +501,7 @@ fun HomeScreenPreview(modifier: Modifier = Modifier) {
481501
loginState = LoginState.LoggedIn,
482502
gatherings = UiState.Success(Gatherings()),
483503
userName = UiState.Success(""),
504+
isPlayed = false,
484505
onMyPageClick = {},
485506
onAddGatheringClick = {},
486507
onGatheringClick = {},
@@ -494,5 +515,8 @@ fun HomeScreenPreview(modifier: Modifier = Modifier) {
494515
onProposalsClick = {},
495516
screenHeight = 720.dp,
496517
statusBarHeight = 28.dp,
518+
onStopClick = {},
519+
onPlayClick = {},
520+
selectedCurrentIndex = 0
497521
)
498522
}

feature/home/src/main/java/com/plottwist/feature/home/HomeViewModel.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ class HomeViewModel @Inject constructor(
116116
HomeAction.OnPermissionGranted -> {
117117
handleOnPermissionGranted()
118118
}
119+
120+
HomeAction.ClickPlay -> {
121+
handleRandomClick(isStop = false)
122+
}
123+
HomeAction.ClickStop -> {
124+
handleRandomClick(isStop = true)
125+
}
119126
}
120127
}
121128

@@ -216,6 +223,7 @@ class HomeViewModel @Inject constructor(
216223
val gatherings = state.gatherings as UiState.Success
217224
val proposalTags = state.proposalTags as UiState.Success
218225
if (gatherings.value.gatheringOverviews.isNotEmpty()) {
226+
reduce { state.copy(currentIndex = index) }
219227
postSideEffect(
220228
HomeSideEffect.NavigateToSelectGatheringScreen(
221229
whereLabel = proposalTags.value.whereTags[index],
@@ -224,6 +232,7 @@ class HomeViewModel @Inject constructor(
224232
)
225233
)
226234
} else {
235+
reduce { state.copy(currentIndex = index) }
227236
postSideEffect(
228237
HomeSideEffect.NavigateToCreateProposalScreen(
229238
whereLabel = proposalTags.value.whereTags[index],
@@ -235,6 +244,7 @@ class HomeViewModel @Inject constructor(
235244
}
236245

237246
else -> {
247+
reduce { state.copy(currentIndex = index) }
238248
postSideEffect(HomeSideEffect.NavigateToLoginScreen)
239249
}
240250
}
@@ -284,4 +294,12 @@ class HomeViewModel @Inject constructor(
284294
private fun handleOnPermissionGranted() = intent {
285295
updateDeviceTokenUseCase()
286296
}
297+
298+
private fun handleRandomClick(isStop: Boolean) = intent {
299+
reduce {
300+
state.copy(
301+
isRandomPlaying = !isStop
302+
)
303+
}
304+
}
287305
}

feature/home/src/main/java/com/plottwist/feature/home/component/HomeBottomSheet.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import androidx.compose.runtime.mutableFloatStateOf
2626
import androidx.compose.runtime.mutableStateOf
2727
import androidx.compose.runtime.remember
2828
import androidx.compose.runtime.rememberCoroutineScope
29+
import androidx.compose.runtime.saveable.rememberSaveable
2930
import androidx.compose.runtime.setValue
3031
import androidx.compose.runtime.snapshotFlow
3132
import androidx.compose.ui.Alignment
@@ -48,23 +49,28 @@ import kotlinx.coroutines.launch
4849

4950
@Composable
5051
fun HomeBottomSheet(
52+
selectedCurrentIndex: Int,
5153
whenLabels: List<String>,
5254
whereLabels: List<String>,
5355
whatLabels: List<String>,
5456
sheetPeekHeight: Dp,
5557
sheetFullHeight: Dp,
5658
homeBottomSheetAction: HomeBottomSheetAction,
59+
isPlayed: Boolean,
5760
onChangedState: (HomeBottomSheetState) -> Unit,
5861
onWhenRefreshClick: () -> Unit,
5962
onWhereRefreshClick: () -> Unit,
6063
onWhatRefreshClick: () -> Unit,
6164
onProposeClick: (Int) -> Unit,
65+
onStopClick: () -> Unit,
66+
onPlayClick: () -> Unit,
6267
modifier: Modifier = Modifier
6368
) {
64-
var isPlayed by remember { mutableStateOf(true) }
69+
6570

6671
DraggableBottomSheet(
6772
modifier = modifier,
73+
selectedCurrentIndex = selectedCurrentIndex,
6874
isPlayed = isPlayed,
6975
whenLabels = whenLabels,
7076
whereLabels = whereLabels,
@@ -77,15 +83,16 @@ fun HomeBottomSheet(
7783
sheetFullHeight = sheetFullHeight,
7884
onChangedState = onChangedState,
7985
onProposeClick = onProposeClick,
80-
onStopClick = { isPlayed = !isPlayed },
81-
onPlayClick = { isPlayed = !isPlayed }
86+
onStopClick = onStopClick,
87+
onPlayClick = onPlayClick,
8288
)
8389
}
8490

8591
@Composable
8692
fun DraggableBottomSheet(
8793
modifier: Modifier = Modifier,
8894
isPlayed: Boolean,
95+
selectedCurrentIndex: Int,
8996
whenLabels: List<String>,
9097
whereLabels: List<String>,
9198
whatLabels: List<String>,
@@ -111,7 +118,14 @@ fun DraggableBottomSheet(
111118
val sheetFullPx = with(density) { sheetFullHeight.toPx() }
112119
val thresholdPx = with(density) { thresholdHeight.toPx() }
113120

114-
val offsetY = remember { Animatable(sheetFullPx - sheetPeekPx) }
121+
val savedOffset = rememberSaveable { mutableStateOf(sheetFullPx - sheetPeekPx) }
122+
val offsetY = remember {
123+
Animatable(savedOffset.value)
124+
}
125+
126+
LaunchedEffect(offsetY.value) {
127+
savedOffset.value = offsetY.value
128+
}
115129

116130
var dragDelta by remember { mutableFloatStateOf(0f) }
117131
LaunchedEffect(Unit) {
@@ -263,6 +277,7 @@ fun DraggableBottomSheet(
263277
RandomProposal(
264278
modifier = Modifier.padding(top = 4.dp),
265279
isPlayed = isPlayed,
280+
selectedCurrentIndex = selectedCurrentIndex,
266281
whenLabels = whenLabels,
267282
whereLabels = whereLabels,
268283
whatLabels = whatLabels,
@@ -271,7 +286,7 @@ fun DraggableBottomSheet(
271286
onWhatRefreshClick = onWhatRefreshClick,
272287
onProposeClick = onProposeClick,
273288
onStopClick = onStopClick,
274-
onPlayClick = onPlayClick
289+
onPlayClick = onPlayClick,
275290
)
276291
}
277292
}

feature/home/src/main/java/com/plottwist/feature/home/component/RandomProposal.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import kotlinx.coroutines.isActive
5353
@Composable
5454
fun RandomProposal(
5555
isPlayed: Boolean,
56+
selectedCurrentIndex: Int,
5657
whenLabels: List<String>,
5758
whereLabels: List<String>,
5859
whatLabels: List<String>,
@@ -64,7 +65,7 @@ fun RandomProposal(
6465
onPlayClick: () -> Unit,
6566
modifier: Modifier = Modifier
6667
) {
67-
var currentIndex by remember { mutableIntStateOf(0) }
68+
var currentIndex by remember { mutableIntStateOf(selectedCurrentIndex) }
6869

6970
val lifecycleOwner = LocalLifecycleOwner.current
7071
val minSize = arrayOf(whatLabels.size, whereLabels.size, whenLabels.size).min()

feature/mypage/src/main/java/com/plottwist/feature/mypage/MyPageScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ fun MyPageContent(
188188
) {
189189
item {
190190
SectionTitle("내 정보관리")
191-
MyPageItem("이름 설정", onEditNameClick)
191+
MyPageItem("닉네임 설정", onEditNameClick)
192192
MyPageItem("알림 설정", onNotificationClick)
193193
}
194194

feature/mypage/src/main/java/com/plottwist/feature/mypage/edit_name/EditNameScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ fun EditNameScreen(
4545
EditNameSideEffect.SaveSuccess -> {
4646
Toast.makeText(
4747
context,
48-
"이름이 변경되었어요!",
48+
"닉네임이 변경되었어요!",
4949
Toast.LENGTH_SHORT
5050
).show()
5151
onBack()
@@ -116,7 +116,7 @@ fun EditNameAppBar(
116116
TukTopAppBar(
117117
modifier = modifier,
118118
type = TukTopAppBarType.DEPTH,
119-
title = "이름 설정",
119+
title = "닉네임 설정",
120120
onBack = onBackClick
121121
)
122122
}

0 commit comments

Comments
 (0)