Skip to content

Commit ed92834

Browse files
키워드리뷰 수정 (#165)
* 2차 QA 수정사항 반영 * 리뷰남기기 화면 글씨 수정 * 리뷰 다시 보임 * 리뷰 업데이트 문제 해결 * lint * build * like_count에 null 추가 * lint * commenthint 기본값으로 적용되도록 바꿈 * 수정하기 버그 해결 --------- Co-authored-by: kevin990222 <113081855+kevin990222@users.noreply.github.com>
1 parent 5e4f657 commit ed92834

File tree

19 files changed

+289
-134
lines changed

19 files changed

+289
-134
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,17 @@
140140
<action android:name="com.google.firebase.MESSAGING_EVENT" />
141141
</intent-filter>
142142
</service>
143+
144+
<provider
145+
android:name="androidx.core.content.FileProvider"
146+
android:authorities="${applicationId}.fileprovider"
147+
android:exported="false"
148+
android:grantUriPermissions="true">
149+
150+
<meta-data
151+
android:name="android.support.FILE_PROVIDER_PATHS"
152+
android:resource="@xml/file_paths" />
153+
</provider>
143154
</application>
144155

145156
</manifest>

app/src/main/java/com/wafflestudio/siksha2/compose/ui/menudetail/MenuDetailScreen.kt

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ import androidx.compose.ui.Modifier
3030
import androidx.compose.ui.draw.clip
3131
import androidx.compose.ui.draw.rotate
3232
import androidx.compose.ui.graphics.ColorFilter
33+
import androidx.compose.ui.platform.LocalContext
3334
import androidx.compose.ui.res.painterResource
3435
import androidx.compose.ui.res.stringResource
3536
import androidx.compose.ui.text.font.FontWeight
37+
import androidx.compose.ui.text.style.TextAlign
3638
import androidx.compose.ui.unit.dp
3739
import androidx.compose.ui.unit.sp
3840
import androidx.core.net.toUri
@@ -51,13 +53,16 @@ import kotlin.math.min
5153
import com.wafflestudio.siksha2.ui.KeywordFoodComposition
5254
import com.wafflestudio.siksha2.ui.KeywordPrice
5355
import com.wafflestudio.siksha2.ui.KeywordTaste
56+
import com.wafflestudio.siksha2.utils.showImageViewer
57+
import org.w3c.dom.Text
5458
import timber.log.Timber
5559

5660
@Composable
5761
fun MenuDetailRoute(
5862
menuId: Long,
5963
vm: MenuDetailViewModel,
6064
onToggleLikeMenu: () -> Unit,
65+
onToggleLikeReview: (Review) -> Unit,
6166
onClickLeaveReview: () -> Unit,
6267
onNavigateToReviewPhoto: (Long) -> Unit,
6368
modifier: Modifier = Modifier
@@ -77,7 +82,11 @@ fun MenuDetailRoute(
7782
imageReviews = imageReviews,
7883
keywordDist = keywordDist ?: KeywordDist.Empty,
7984
onToggleLikeMenu = onToggleLikeMenu,
80-
onClickLeaveReview = onClickLeaveReview,
85+
onToggleLikeReview = onToggleLikeReview,
86+
onClickLeaveReview = {
87+
vm.notifySendReviewWaiting()
88+
onClickLeaveReview()
89+
},
8190
onNavigateToReviewPhoto = { menu?.let { onNavigateToReviewPhoto(it.id) } },
8291
modifier = modifier
8392
)
@@ -90,6 +99,7 @@ fun MenuDetailScreen(
9099
imageReviews: LazyPagingItems<Review>,
91100
keywordDist: KeywordDist,
92101
onToggleLikeMenu: () -> Unit,
102+
onToggleLikeReview: (Review) -> Unit,
93103
onClickLeaveReview: () -> Unit,
94104
onNavigateToReviewPhoto: () -> Unit,
95105
modifier: Modifier = Modifier
@@ -102,7 +112,8 @@ fun MenuDetailScreen(
102112
}
103113

104114
LazyColumn(
105-
modifier = modifier
115+
modifier = modifier,
116+
horizontalAlignment = Alignment.CenterHorizontally
106117
) {
107118
item {
108119
Column(
@@ -149,6 +160,7 @@ fun MenuDetailScreen(
149160
MenuKeywordStats(
150161
keywordDist.keywords,
151162
keywordDist.keywordCounts,
163+
keywordDist.keywordTotals,
152164
keywordIcons = listOf(
153165
{ KeywordTaste() },
154166
{ KeywordPrice() },
@@ -176,11 +188,13 @@ fun MenuDetailScreen(
176188
item {
177189
Spacer(Modifier.height(10.dp).fillMaxWidth().background(SikshaTheme.colors.Gray100))
178190
}
179-
item {
180-
BriefImageReviews(
181-
imageReviews = imageReviews,
182-
onNavigateToReviewPhoto = onNavigateToReviewPhoto
183-
)
191+
if (imageReviews.itemCount > 0) {
192+
item {
193+
BriefImageReviews(
194+
imageReviews = imageReviews,
195+
onNavigateToReviewPhoto = onNavigateToReviewPhoto
196+
)
197+
}
184198
}
185199
item {
186200
Box(
@@ -197,22 +211,35 @@ fun MenuDetailScreen(
197211
)
198212
}
199213
}
200-
items(
201-
reviews.itemCount,
202-
key = reviews.itemKey { it.id }
203-
) { idx ->
204-
val review = reviews[idx]
205-
if (review != null) {
206-
MenuReviewItem(
207-
userName = review.userId.toString(),
208-
menuRating = review.score.toFloat(),
209-
timeText = review.createdAt,
210-
reviewText = review.comment,
211-
isLiked = review.isLiked,
212-
likeCount = review.likeCount ?: 0L,
213-
keywords = review.keywordReviews.filterNotNull().filter { it.isNotBlank() },
214-
imageUris = review.etc.images?.map { it.toUri() } ?: listOf(),
215-
modifier = Modifier.padding(horizontal = 14.dp)
214+
if (reviews.itemCount > 0) {
215+
items(
216+
reviews.itemCount,
217+
key = reviews.itemKey { it.id }
218+
) { idx ->
219+
val review = reviews[idx]
220+
if (review != null) {
221+
MenuReviewItem(
222+
userName = review.userId.toString(),
223+
menuRating = review.score.toFloat(),
224+
timeText = review.createdAt,
225+
reviewText = review.comment,
226+
isLiked = review.isLiked,
227+
likeCount = review.likeCount,
228+
keywords = review.keywordReviews.filter { it != "" } as List<String>,
229+
onToggleLike = { onToggleLikeReview(review) },
230+
imageUris = review.etc.images?.map { it.toUri() } ?: listOf(),
231+
modifier = Modifier.padding(horizontal = 14.dp)
232+
)
233+
}
234+
}
235+
} else {
236+
item {
237+
Text(
238+
text = stringResource(R.string.menu_detail_no_review),
239+
fontSize = 15.sp,
240+
color = SikshaTheme.colors.Black,
241+
textAlign = TextAlign.Center,
242+
modifier = Modifier.padding(top = 30.dp)
216243
)
217244
}
218245
}
@@ -226,6 +253,7 @@ fun BriefImageReviews(
226253
modifier: Modifier = Modifier
227254
) {
228255
val imagePreviewScrollState = rememberScrollState()
256+
val context = LocalContext.current
229257
Box(
230258
modifier = modifier
231259
.fillMaxWidth()
@@ -251,7 +279,7 @@ fun BriefImageReviews(
251279
)
252280
}
253281
Row(
254-
modifier = Modifier
282+
modifier = Modifier.fillMaxWidth()
255283
.padding(horizontal = 16.dp)
256284
.horizontalScroll(imagePreviewScrollState),
257285
horizontalArrangement = Arrangement.spacedBy(8.dp)
@@ -275,7 +303,10 @@ fun BriefImageReviews(
275303
imageUri = it!!.toUri(),
276304
modifier = Modifier
277305
.size(120.dp)
278-
.clip(RoundedCornerShape(10.dp))
306+
.clip(RoundedCornerShape(10.dp)),
307+
onClick = {
308+
context.showImageViewer(listOf(it), 0)
309+
}
279310
)
280311
}
281312
} else {

app/src/main/java/com/wafflestudio/siksha2/compose/ui/menudetail/MenuKeywordStats.kt

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ package com.wafflestudio.siksha2.compose.ui.menudetail
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.Row
78
import androidx.compose.foundation.layout.Spacer
9+
import androidx.compose.foundation.layout.fillMaxHeight
10+
import androidx.compose.foundation.layout.fillMaxWidth
811
import androidx.compose.foundation.layout.height
912
import androidx.compose.foundation.layout.padding
1013
import androidx.compose.foundation.layout.width
@@ -24,47 +27,68 @@ import com.wafflestudio.siksha2.ui.SikshaTheme
2427
fun MenuKeywordStat(
2528
keywordString: String,
2629
keywordCount: Long,
30+
keywordTotal: Long,
2731
keywordIcon: @Composable () -> Unit,
2832
modifier: Modifier = Modifier
2933
) {
30-
Row(
31-
modifier = modifier.background(color = SikshaTheme.colors.Gray100, shape = RoundedCornerShape(8.dp))
32-
.padding(top = 6.dp, bottom = 6.dp, start = 14.dp, end = 20.dp),
33-
verticalAlignment = Alignment.CenterVertically
34+
Box(
35+
modifier = modifier.fillMaxWidth()
36+
.background(color = SikshaTheme.colors.Gray100, shape = RoundedCornerShape(8.dp))
3437
) {
35-
keywordIcon()
36-
Spacer(Modifier.width(6.dp))
37-
Text(
38-
text = keywordString,
39-
fontSize = 13.sp,
40-
fontWeight = FontWeight.Bold,
41-
color = SikshaTheme.colors.Gray600,
42-
modifier = Modifier.weight(1f)
43-
)
44-
Text(
45-
text = keywordCount.toString(),
46-
fontSize = 14.sp,
47-
fontWeight = FontWeight.ExtraBold,
48-
color = SikshaTheme.colors.Orange500
49-
)
38+
if (keywordCount > 0) {
39+
Box(modifier = Modifier.matchParentSize()) {
40+
Box(
41+
modifier = Modifier.fillMaxHeight()
42+
.fillMaxWidth(keywordCount.toFloat() / keywordTotal.toFloat())
43+
.align(Alignment.CenterStart)
44+
.background(color = SikshaTheme.colors.OrangeTint, shape = RoundedCornerShape(8.dp))
45+
)
46+
}
47+
}
48+
Row(
49+
modifier = Modifier.fillMaxWidth()
50+
.padding(top = 6.dp, bottom = 6.dp, start = 14.dp, end = 20.dp),
51+
verticalAlignment = Alignment.CenterVertically
52+
) {
53+
keywordIcon()
54+
Spacer(Modifier.width(6.dp))
55+
Text(
56+
text = keywordString,
57+
fontSize = 13.sp,
58+
fontWeight = FontWeight.Bold,
59+
color = if (keywordString in listOf("", "가격", "음식구성")) SikshaTheme.colors.Gray600 else SikshaTheme.colors.Gray800,
60+
modifier = Modifier.weight(1f)
61+
)
62+
Text(
63+
text = keywordCount.toString(),
64+
fontSize = 14.sp,
65+
fontWeight = FontWeight.ExtraBold,
66+
color = SikshaTheme.colors.Orange500
67+
)
68+
}
5069
}
5170
}
5271

5372
@Composable
5473
fun MenuKeywordStats(
5574
keywords: List<String>,
5675
keywordCounts: List<Long>,
76+
keywordTotals: List<Long>,
5777
keywordIcons: List<@Composable () -> Unit>,
5878
modifier: Modifier = Modifier
5979
) {
6080
Column(
6181
modifier = modifier,
6282
verticalArrangement = Arrangement.spacedBy(6.dp)
6383
) {
84+
// TODO: 빈 스트링일 때 처리
6485
for (i in keywords.ifEmpty { listOf("", "가격", "음식구성") }.indices) {
86+
var keyword = keywords[i]
87+
if (keyword == "") keyword = listOf("", "가격", "음식구성")[i]
6588
MenuKeywordStat(
66-
keywordString = keywords.ifEmpty { listOf("", "가격", "음식구성") }[i],
89+
keywordString = keyword,
6790
keywordCount = keywordCounts.ifEmpty { listOf<Long>(0, 0, 0) }[i],
91+
keywordTotal = keywordTotals.ifEmpty { listOf<Long>(0, 0, 0) }[i],
6892
keywordIcon = keywordIcons[i]
6993
)
7094
}
@@ -76,12 +100,13 @@ fun MenuKeywordStats(
76100
fun MenuKeywordStatsPreview() {
77101
MenuKeywordStats(
78102
keywords = listOf("", "가격", "음식구성"),
79-
keywordCounts = listOf(12, 3, 1),
103+
keywordCounts = listOf(6, 2, 1),
104+
keywordTotals = listOf(12, 3, 1),
80105
keywordIcons = listOf(
81106
{ CancelIcon() },
82107
{ CancelIcon() },
83108
{ CancelIcon() }
84109
),
85-
modifier = Modifier.height(150.dp)
110+
modifier = Modifier.height(300.dp)
86111
)
87112
}

0 commit comments

Comments
 (0)