Skip to content

Commit 60ee630

Browse files
authored
Merge pull request #218 from BCSDLab/feature/update-main-dining
메인화면 식단 영역 리뉴얼
2 parents c6e7d48 + d6ab894 commit 60ee630

File tree

17 files changed

+166
-79
lines changed

17 files changed

+166
-79
lines changed

data/src/main/java/in/koreatech/koin/data/mapper/DiningMapper.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@ fun DiningResponse.toDining() = Dining(
1515
this.imageUrl ?: "",
1616
this.createdAt,
1717
this.updatedAt,
18-
this.isSoldOut,
19-
// TODO: sold_out 품절 시각으로 변경시 대응
20-
// this.soldOutAt ?: ""
21-
this.isChanged,
18+
this.soldoutAt ?: "",
19+
this.changedAt ?: "",
2220
this.error ?: ""
2321
)
2422

data/src/main/java/in/koreatech/koin/data/response/DiningResponse.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ data class DiningResponse(
1414
@SerializedName("image_url") val imageUrl: String?,
1515
@SerializedName("created_at") val createdAt: String,
1616
@SerializedName("updated_at") val updatedAt: String,
17-
@SerializedName("sold_out") val isSoldOut: Boolean,
18-
// TODO: sold_out 품절 시각으로 변경시 대응
19-
// @SerializedName("sold_out") val soldOutAt: String?,
20-
@SerializedName("is_changed") val isChanged: Boolean,
17+
@SerializedName("soldout_at") val soldoutAt: String?,
18+
@SerializedName("changed_at") val changedAt: String?,
2119
@SerializedName("error") val error: String?
2220
)

data/src/main/java/in/koreatech/koin/data/util/DiningUtil.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ fun DiningType.localized(context: Context) = when(this) {
88
DiningType.Breakfast -> context.getString(R.string.dining_breakfast)
99
DiningType.Lunch -> context.getString(R.string.dining_lunch)
1010
DiningType.Dinner -> context.getString(R.string.dining_dinner)
11+
DiningType.NextBreakfast -> context.getString(R.string.dining_next_breakfast)
1112
}

data/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,5 @@
6161
<string name="dining_breakfast">아침</string>
6262
<string name="dining_lunch">점심</string>
6363
<string name="dining_dinner">저녁</string>
64+
<string name="dining_next_breakfast">내일 아침</string>
6465
</resources>

domain/src/main/java/in/koreatech/koin/domain/model/dining/Dining.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ data class Dining(
1212
val imageUrl: String,
1313
val createdAt: String,
1414
val updatedAt: String,
15-
val isSoldOut: Boolean,
16-
// TODO: sold_out 품절 시각으로 변경시 대응
17-
// val soldOutAt: String,
18-
val isChanged: Boolean,
15+
val soldoutAt: String,
16+
val changedAt: String,
1917
val error: String
2018
)

domain/src/main/java/in/koreatech/koin/domain/model/dining/DiningType.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ enum class DiningType(
1010
) {
1111
Breakfast (BREAKFAST, "아침"),
1212
Lunch (LUNCH, "점심"),
13-
Dinner (DINNER, "저녁");
13+
Dinner (DINNER, "저녁"),
14+
NextBreakfast (BREAKFAST, "내일 아침");
1415
}

domain/src/main/java/in/koreatech/koin/domain/util/DiningUtil.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,26 @@ import `in`.koreatech.koin.domain.util.ext.arrange
66
import `in`.koreatech.koin.domain.util.ext.typeFilter
77

88
object DiningUtil {
9-
private val diningEndTime = listOf("09:00", "13:30", "18:30")
9+
private val diningEndTime = listOf("09:00", "13:30", "18:30", "23:59")
1010

1111
fun typeFiltering(diningList: List<Dining>, type: DiningType): List<Dining> =
1212
diningList.typeFilter(type).arrange()
1313

14-
fun getCurrentType() = if (TimeUtil.compareWithCurrentTime(diningEndTime[0]) >= 0) {
15-
DiningType.Breakfast
16-
} else if (TimeUtil.compareWithCurrentTime(diningEndTime[1]) >= 0) {
17-
DiningType.Lunch
18-
} else if (TimeUtil.compareWithCurrentTime(diningEndTime[2]) >= 0) {
19-
DiningType.Dinner
20-
} else {
21-
DiningType.Breakfast
14+
fun getCurrentType(): DiningType {
15+
var currentType = DiningType.Breakfast
16+
diningEndTime.forEachIndexed { index, time ->
17+
if (TimeUtil.compareWithCurrentTime(time) >= 0) {
18+
currentType = when (index) {
19+
0 -> DiningType.Breakfast
20+
1 -> DiningType.Lunch
21+
2 -> DiningType.Dinner
22+
3 -> DiningType.NextBreakfast
23+
else -> DiningType.Breakfast
24+
}
25+
return currentType
26+
}
27+
}
28+
return currentType
2229
}
2330

2431
fun isNextDay() = TimeUtil.compareWithCurrentTime(diningEndTime[2]) < 0

gradle.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
# The setting is particularly useful for tweaking memory settings.
1212
android.enableJetifier=true
1313
android.useAndroidX=true
14-
org.gradle.jvmargs=-Xmx1536m
14+
org.gradle.jvmargs=-Xmx1536m \
15+
--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
16+
--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
17+
--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
1518

1619
#Enable daemon
1720
org.gradle.daemon=true
@@ -22,7 +25,6 @@ org.gradle.parallel=true
2225
org.gradle.configureondemand=true
2326

2427

25-
2628
# When configured, Gradle will run in incubating parallel mode.
2729
# This option should only be used with decoupled projects. More details, visit
2830
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

koin/src/main/java/in/koreatech/koin/ui/dining/DiningActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class DiningActivity : KoinNavigationDrawerActivity() {
8080
DiningType.Breakfast -> tabsDiningTime.selectTab(tabsDiningTime.getTabAt(0))
8181
DiningType.Lunch -> tabsDiningTime.selectTab(tabsDiningTime.getTabAt(1))
8282
DiningType.Dinner -> tabsDiningTime.selectTab(tabsDiningTime.getTabAt(2))
83+
DiningType.NextBreakfast -> tabsDiningTime.selectTab(tabsDiningTime.getTabAt(0))
8384
}
8485
}
8586
}

koin/src/main/java/in/koreatech/koin/ui/dining/adapter/DiningAdapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ class DiningAdapter : ListAdapter<Dining, RecyclerView.ViewHolder>(diffCallback)
6262
}
6363
}
6464

65-
if(dining.isSoldOut) {
65+
if(dining.soldoutAt.isNotEmpty()) {
6666
groupSoldOut.visibility = View.VISIBLE
6767
textViewDiningSoldOut.visibility = View.VISIBLE
6868
} else {
6969
groupSoldOut.visibility = View.INVISIBLE
7070
textViewDiningSoldOut.visibility = View.INVISIBLE
7171
}
7272

73-
if(dining.isChanged) {
73+
if(dining.changedAt.isNotEmpty()) {
7474
textViewDiningChanged.visibility = View.VISIBLE
7575
} else {
7676
textViewDiningChanged.visibility = View.INVISIBLE

koin/src/main/java/in/koreatech/koin/ui/main/activity/MainActivity.kt

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import android.os.Bundle
2424
import android.view.View
2525
import android.view.WindowManager
2626
import androidx.activity.viewModels
27+
import androidx.core.content.ContextCompat
2728
import androidx.core.view.isVisible
2829
import androidx.recyclerview.widget.LinearLayoutManager
2930
import androidx.recyclerview.widget.RecyclerView
@@ -134,7 +135,7 @@ class MainActivity : KoinNavigationDrawerActivity() {
134135
}
135136

136137
observeLiveData(selectedType) {
137-
binding.textViewCardDiningTime.text = it.localized(this@MainActivity)
138+
binding.textViewDiningTime.text = it.localized(this@MainActivity)
138139
}
139140

140141
observeLiveData(busTimer) {
@@ -173,17 +174,37 @@ class MainActivity : KoinNavigationDrawerActivity() {
173174

174175
listOf(
175176
binding.textViewCardDiningMenu0,
176-
binding.textViewCardDiningMenu1,
177177
binding.textViewCardDiningMenu2,
178-
binding.textViewCardDiningMenu3,
179178
binding.textViewCardDiningMenu4,
180-
binding.textViewCardDiningMenu5,
181179
binding.textViewCardDiningMenu6,
182-
binding.textViewCardDiningMenu7,
183180
binding.textViewCardDiningMenu8,
181+
binding.textViewCardDiningMenu1,
182+
binding.textViewCardDiningMenu3,
183+
binding.textViewCardDiningMenu5,
184+
binding.textViewCardDiningMenu7,
184185
binding.textViewCardDiningMenu9
185186
).zip(diningArranged[position].menu).forEach { (textView, menu) ->
186187
textView.text = menu
187188
}
189+
190+
val isSoldOut = diningArranged[position].soldoutAt.isNotEmpty()
191+
val isChanged = diningArranged[position].changedAt.isNotEmpty()
192+
with (binding.textViewDiningStatus) {
193+
when {
194+
isSoldOut -> {
195+
text = context.getString(R.string.dining_soldout)
196+
setTextColor(ContextCompat.getColor(context, R.color.dining_soldout_text))
197+
background = ContextCompat.getDrawable(context, R.drawable.dining_soldout_fill_radius_4)
198+
}
199+
isChanged -> {
200+
text = context.getString(R.string.dining_changed)
201+
setTextColor(ContextCompat.getColor(context, R.color.dining_changed_text))
202+
background = ContextCompat.getDrawable(context, R.drawable.dining_changed_fill_radius_4)
203+
}
204+
else -> {
205+
visibility = View.INVISIBLE
206+
}
207+
}
208+
}
188209
}
189210
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<solid android:color="@color/dining_changed_background"/>
4+
<corners android:radius="4dp"/>
5+
</shape>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<solid android:color="@color/dining_soldout_background"/>
4+
<corners android:radius="4dp"/>
5+
</shape>

0 commit comments

Comments
 (0)