From 97d1968f6bc383714ead3d4f095384066ef5610d Mon Sep 17 00:00:00 2001 From: tgyuuAn Date: Sun, 16 Feb 2025 17:43:15 +0900 Subject: [PATCH] =?UTF-8?q?[PC-000]=20=EC=95=84=ED=8B=B0=ED=8C=A9=ED=8A=B8?= =?UTF-8?q?=20v3=20->=20v4=EB=A1=9C=20=EC=97=85=EA=B7=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android_cd.yml | 14 +++++----- .../puzzle/designsystem/component/Toggle.kt | 2 +- feature/matching/build.gradle.kts | 2 ++ .../matching/graph/main/MatchingScreen.kt | 8 ++---- .../graph/preview/ProfilePreviewScreen.kt | 26 ++++++++----------- .../graph/preview/ProfilePreviewViewModel.kt | 26 ++++++++++--------- .../graph/preview/page/ValuePickPage.kt | 24 ++++++++++------- .../graph/valuepick/ValuePickScreen.kt | 5 +++- 8 files changed, 56 insertions(+), 51 deletions(-) diff --git a/.github/workflows/android_cd.yml b/.github/workflows/android_cd.yml index 302f301f..e2a317b2 100644 --- a/.github/workflows/android_cd.yml +++ b/.github/workflows/android_cd.yml @@ -41,6 +41,9 @@ jobs: echo "PIECE_CHANNEL_TALK_URL=${{ secrets.PIECE_CHANNEL_TALK_URL }}" >> local.properties echo "GOOGLE_WEB_CLIENT_ID=${{ secrets.GOOGLE_WEB_CLIENT_ID }}" >> local.properties + - name: Decode keystore file + run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > ./app/upload-keystore.jks + - name: Set up keystore.properties run: | echo "STORE_FILE_PATH=./upload-keystore.jks" >> keystore.properties @@ -48,7 +51,6 @@ jobs: echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> keystore.properties echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> keystore.properties - - name: Create google-services.json run: echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > ./app/google-services.json @@ -61,11 +63,11 @@ jobs: - name: Test run: ./gradlew test --stacktrace - - name: Build AAB for Firebase + - name: Build AAB run: ./gradlew bundleRelease --stacktrace - - name: Upload AAB artifact - uses: actions/upload-artifact@v3 + - name: Upload AAB + uses: actions/upload-artifact@v4 with: name: app-release.aab path: app/build/outputs/bundle/release/app-release.aab @@ -82,5 +84,5 @@ jobs: run: | firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk \ --app ${{ secrets.FIREBASE_APP_ID }} \ - --release-notes "~새로운 릴리즈 버전이 날라왔어용~" \ - --groups "최강야뿌앱3팀" \ No newline at end of file + --release-notes "~Piece 새로운 버전이 날라왔어용~" \ + --groups "puzzly-내부-qa" \ No newline at end of file diff --git a/core/designsystem/src/main/java/com/puzzle/designsystem/component/Toggle.kt b/core/designsystem/src/main/java/com/puzzle/designsystem/component/Toggle.kt index 11423192..cd12017c 100644 --- a/core/designsystem/src/main/java/com/puzzle/designsystem/component/Toggle.kt +++ b/core/designsystem/src/main/java/com/puzzle/designsystem/component/Toggle.kt @@ -51,7 +51,7 @@ fun PieceToggle( .size(width = 34.dp, height = 20.dp) .clip(RoundedCornerShape(999.dp)) .background(if (checked) PieceTheme.colors.primaryDefault else PieceTheme.colors.light1) - .throttledClickable(2000L) { onCheckedChange() } + .throttledClickable(1000L) { onCheckedChange() } ) { Box( modifier = Modifier diff --git a/feature/matching/build.gradle.kts b/feature/matching/build.gradle.kts index 9d67707a..4c0b0fde 100644 --- a/feature/matching/build.gradle.kts +++ b/feature/matching/build.gradle.kts @@ -7,5 +7,7 @@ android { } dependencies { + implementation(projects.core.common) + implementation(libs.cloudy.compose) } diff --git a/feature/matching/src/main/java/com/puzzle/matching/graph/main/MatchingScreen.kt b/feature/matching/src/main/java/com/puzzle/matching/graph/main/MatchingScreen.kt index ecb7103e..74277f18 100644 --- a/feature/matching/src/main/java/com/puzzle/matching/graph/main/MatchingScreen.kt +++ b/feature/matching/src/main/java/com/puzzle/matching/graph/main/MatchingScreen.kt @@ -20,8 +20,6 @@ import com.puzzle.matching.graph.main.page.MatchingLoadingScreen import com.puzzle.matching.graph.main.page.MatchingPendingScreen import com.puzzle.matching.graph.main.page.MatchingUserScreen import com.puzzle.matching.graph.main.page.MatchingWaitingScreen -import com.puzzle.navigation.MatchingGraphDest -import com.puzzle.navigation.NavigationEvent @Composable internal fun MatchingRoute( @@ -48,10 +46,8 @@ internal fun MatchingRoute( state = state, onButtonClick = { viewModel.onIntent(MatchingIntent.OnButtonClick) }, onMatchingDetailClick = { viewModel.onIntent(MatchingIntent.OnMatchingDetailClick) }, - onCheckMyProfileClick = {}, - onEditProfileClick = { - viewModel.onIntent(MatchingIntent.OnEditProfileClick) - } + onCheckMyProfileClick = { viewModel.onIntent(MatchingIntent.OnCheckMyProfileClick) }, + onEditProfileClick = { viewModel.onIntent(MatchingIntent.OnEditProfileClick) }, ) } diff --git a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewScreen.kt b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewScreen.kt index 589d133b..78956703 100644 --- a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewScreen.kt +++ b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.blur import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -47,6 +48,7 @@ import com.puzzle.matching.graph.preview.contract.ProfilePreviewState import com.puzzle.matching.graph.preview.page.BasicInfoPage import com.puzzle.matching.graph.preview.page.ValuePickPage import com.puzzle.matching.graph.preview.page.ValueTalkPage +import com.skydoves.cloudy.cloudy @Composable internal fun ProfilePreviewRoute( @@ -54,17 +56,6 @@ internal fun ProfilePreviewRoute( ) { val state by viewModel.collectAsState() - val lifecycleOwner = LocalLifecycleOwner.current - LaunchedEffect(viewModel) { - lifecycleOwner.repeatOnStarted { - viewModel.sideEffects.collect { sideEffect -> - when (sideEffect) { - is ProfilePreviewSideEffect.Navigate -> TODO() - } - } - } - } - ProfilePreviewScreen( state = state, onCloseClick = { viewModel.onIntent(ProfilePreviewIntent.OnCloseClick) }, @@ -101,6 +92,13 @@ private fun ProfilePreviewScreen( Modifier } ) + .then( + if(showDialog){ + Modifier.cloudy(radius = 40) + } else { + Modifier + } + ) ) { val topBarHeight = 60.dp val bottomBarHeight = 74.dp @@ -145,9 +143,7 @@ private fun ProfilePreviewScreen( currentPage = page } }, - onShowPicturesClick = { - showDialog = true - }, + onShowPicturesClick = { showDialog = true }, modifier = Modifier .fillMaxWidth() .height(bottomBarHeight) @@ -317,4 +313,4 @@ private fun ProfilePreviewScreenPreview() { onCloseClick = {}, ) } -} \ No newline at end of file +} diff --git a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewViewModel.kt b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewViewModel.kt index 2e620781..a159ad41 100644 --- a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewViewModel.kt +++ b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/ProfilePreviewViewModel.kt @@ -7,6 +7,8 @@ import com.airbnb.mvrx.hilt.hiltMavericksViewModelFactory import com.puzzle.common.event.EventHelper import com.puzzle.domain.model.error.ErrorHelper import com.puzzle.domain.repository.ProfileRepository +import com.puzzle.domain.usecase.profile.GetMyValuePicksUseCase +import com.puzzle.domain.usecase.profile.GetMyValueTalksUseCase import com.puzzle.matching.graph.preview.contract.ProfilePreviewIntent import com.puzzle.matching.graph.preview.contract.ProfilePreviewSideEffect import com.puzzle.matching.graph.preview.contract.ProfilePreviewState @@ -24,6 +26,8 @@ import kotlinx.coroutines.launch class ProfilePreviewViewModel @AssistedInject constructor( @Assisted initialState: ProfilePreviewState, + private val getMyValueTalksUseCase: GetMyValueTalksUseCase, + private val getMyValuePicksUseCase: GetMyValuePicksUseCase, private val profileRepository: ProfileRepository, private val navigationHelper: NavigationHelper, internal val eventHelper: EventHelper, @@ -45,23 +49,21 @@ class ProfilePreviewViewModel @AssistedInject constructor( val profileBasicJob = launch { profileRepository.retrieveMyProfileBasic() .onSuccess { - setState { copy(myProfileBasic = it) } + setState { + copy(myProfileBasic = it.copy(birthdate = it.birthdate.substring(2, 4))) + } } .onFailure { errorHelper.sendError(it) } } val valueTalksJob = launch { - profileRepository.retrieveMyValueTalks() - .onSuccess { - setState { copy(myValueTalks = it) } - } - .onFailure { errorHelper.sendError(it) } + getMyValueTalksUseCase().onSuccess { + setState { copy(myValueTalks = it) } + }.onFailure { errorHelper.sendError(it) } } val valuePicksJob = launch { - profileRepository.retrieveMyValuePicks() - .onSuccess { - setState { copy(myValuePicks = it) } - } - .onFailure { errorHelper.sendError(it) } + getMyValuePicksUseCase().onSuccess { + setState { copy(myValuePicks = it) } + }.onFailure { errorHelper.sendError(it) } } profileBasicJob.join() @@ -80,7 +82,7 @@ class ProfilePreviewViewModel @AssistedInject constructor( } private suspend fun moveToBackScreen() { - _sideEffects.send(ProfilePreviewSideEffect.Navigate(NavigationEvent.NavigateUp)) + navigationHelper.navigate(NavigationEvent.NavigateUp) } @AssistedFactory diff --git a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/page/ValuePickPage.kt b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/page/ValuePickPage.kt index 01883cd4..c86bb431 100644 --- a/feature/matching/src/main/java/com/puzzle/matching/graph/preview/page/ValuePickPage.kt +++ b/feature/matching/src/main/java/com/puzzle/matching/graph/preview/page/ValuePickPage.kt @@ -14,7 +14,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -32,7 +32,7 @@ import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import com.puzzle.common.ui.CollapsingHeaderNestedScrollConnection import com.puzzle.designsystem.R -import com.puzzle.designsystem.component.PieceSubButton +import com.puzzle.designsystem.component.PieceChip import com.puzzle.designsystem.foundation.PieceTheme import com.puzzle.domain.model.profile.MyValuePick import com.puzzle.matching.graph.detail.common.component.BasicInfoHeader @@ -108,9 +108,12 @@ private fun ValuePickCards( .background(PieceTheme.colors.light3) .padding(horizontal = 20.dp), ) { - itemsIndexed(pickCards) { idx, item -> + items( + items = pickCards, + key = { item -> item.id }, + ) { item -> ValuePickCard( - valuePickQuestion = item, + item = item, modifier = Modifier.padding(top = 20.dp) ) } @@ -123,7 +126,7 @@ private fun ValuePickCards( @Composable private fun ValuePickCard( - valuePickQuestion: MyValuePick, + item: MyValuePick, modifier: Modifier = Modifier, ) { Column( @@ -151,23 +154,24 @@ private fun ValuePickCard( Spacer(modifier = Modifier.width(6.dp)) Text( - text = valuePickQuestion.category, + text = item.category, style = PieceTheme.typography.bodySSB, color = PieceTheme.colors.primaryDefault, ) } Text( - text = valuePickQuestion.question, + text = item.question, style = PieceTheme.typography.headingMSB, color = PieceTheme.colors.dark1, modifier = Modifier.padding(top = 12.dp, bottom = 24.dp), ) - valuePickQuestion.answerOptions.forEachIndexed { idx, answer -> - PieceSubButton( + item.answerOptions.forEachIndexed { idx, answer -> + PieceChip( label = answer.content, - onClick = {}, + selected = answer.number == item.selectedAnswer, + onChipClicked = {}, enabled = true, modifier = Modifier .fillMaxWidth() diff --git a/feature/profile/src/main/java/com/puzzle/profile/graph/valuepick/ValuePickScreen.kt b/feature/profile/src/main/java/com/puzzle/profile/graph/valuepick/ValuePickScreen.kt index f988873a..4a42dff4 100644 --- a/feature/profile/src/main/java/com/puzzle/profile/graph/valuepick/ValuePickScreen.kt +++ b/feature/profile/src/main/java/com/puzzle/profile/graph/valuepick/ValuePickScreen.kt @@ -139,7 +139,10 @@ private fun ValuePickCards( modifier: Modifier = Modifier, ) { LazyColumn(modifier = modifier.fillMaxSize()) { - itemsIndexed(valuePicks) { idx, item -> + itemsIndexed( + items = valuePicks, + key = { _, item -> item.id }, + ) { idx, item -> ValuePickCard( item = item, screenState = screenState,