diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/CafeteriaRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/CafeteriaRepository.kt index 0c4d13f8..25d3507c 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/CafeteriaRepository.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/CafeteriaRepository.kt @@ -32,15 +32,26 @@ class CafeteriaRepository( val price: Int, val operatingDays: List, ) { - PORKCUTLET("돈까스", 5_000, Weekdays.values().toList()), - CHEESE_PORKCUTLET("치즈돈까스", 5_500, Weekdays.values().toList()), - SWEET_POTATO_CHEESE_PORKCUTLET("고구마치즈돈까스", 6_000, Weekdays.values().toList()), + SPAM_KIMCHI_FRIED_RICE("스팸 김치 볶음밥", 4_900, listOf(Weekdays.MONDAY, Weekdays.TUESDAY)), + CHICKEN_MAYO_RICE("치킨 마요 덮밥", 4_900, listOf(Weekdays.WEDNESDAY)), + SPICY_MAYO_RICE("불닭 마요 덮밥", 4_900, listOf(Weekdays.WEDNESDAY)), + PORK_BELLY_RICE("삼겹살 덮밥", 5_500, listOf(Weekdays.THURSDAY)), + JANGJORIM_BUTTER_RICE("장조림 버터 비빔밥", 4_500, listOf(Weekdays.FRIDAY)), + RAMEN("라면", 3_500, Weekdays.values().toList()), - CHEESE_RAMEN("치즈라면", 4_000, Weekdays.values().toList()), - SEAFOOD_RAMEN("해물라면", 4_500, Weekdays.values().toList()), - SPAM_KIMCHI_FRIED_RICE("스팸김치볶음밥", 4_900, listOf(Weekdays.MONDAY, Weekdays.TUESDAY)), - HOT_CHICKEN_MAYO_RICE("불닭마요덮밥", 4_500, listOf(Weekdays.WEDNESDAY, Weekdays.THURSDAY)), - CHICKEN_MAYO_RICE("치킨마요덮밥", 4_500, listOf(Weekdays.WEDNESDAY, Weekdays.THURSDAY)), - OMELET_RICE("오므라이스", 5_500, listOf(Weekdays.FRIDAY)); + CHEESE_RAMEN("치즈 라면", 4_000, Weekdays.values().toList()), + SEAFOOD_RAMEN("해물짬뽕 라면", 4_500, Weekdays.values().toList()), + + CHAPAGETTI("짜파게티", 3_500, Weekdays.values().toList()), + CHAPAGETTI_EGG_CHEESE("짜계치", 4_000, Weekdays.values().toList()), + SPICY_RAMEN("불닭볶음면", 3_500, Weekdays.values().toList()), + CARBONARA_SPICY_RAMEN("까르보 불닭볶음면", 3_800, Weekdays.values().toList()), + CHEESE_SPICY_RAMEN("치즈 불닭볶음면", 4_000, Weekdays.values().toList()), + + PORK_CUTLET("돈까스", 5_000, Weekdays.values().toList()), + CHEESE_PORK_CUTLET("치즈 돈까스", 5_500, Weekdays.values().toList()), + BRISKET_CHICKEN_CUTLET("통가슴살 치킨까스", 5_200, Weekdays.values().toList()), + SWEET_POTATO_CHEESE_PORK_CUTLET("고구마 치즈 돈까스", 6_000, Weekdays.values().toList()), + HOMEMADE_KING_PORK_CUTLET("수제 왕 돈까스", 6_000, Weekdays.values().toList()), } } \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAnotherAdapter.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAnotherAdapter.kt new file mode 100644 index 00000000..01eb572a --- /dev/null +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAnotherAdapter.kt @@ -0,0 +1,68 @@ +package com.dongyang.android.youdongknowme.ui.adapter + +import android.annotation.SuppressLint +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.setPadding +import androidx.recyclerview.widget.RecyclerView +import com.dongyang.android.youdongknowme.R +import com.dongyang.android.youdongknowme.databinding.ItemCafeteriaAnotherBinding + +class CafeteriaAnotherAdapter : RecyclerView.Adapter() { + + init { + setHasStableIds(true) + } + + private var menu = arrayListOf>() + + inner class ViewHolder(private val binding: ItemCafeteriaAnotherBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(item: Array) { + binding.menuKr = item[0] + binding.menuEn = item[1].split('_') + .joinToString(" ") { word -> + word.lowercase().replaceFirstChar { firstChar -> firstChar.uppercase() } + } + binding.menuPrice = item[2] + + val context = binding.root.context + val resourceName = "img_cafeteria_" + item[1].lowercase() + val drawableResId = + context.resources.getIdentifier(resourceName, "drawable", context.packageName) + + if (drawableResId != 0) { + binding.imgAnother.setImageResource(drawableResId) + binding.imgAnother.setPadding(0) + } else { + binding.imgAnother.setImageResource(R.drawable.img_cafeteria_korean) + binding.imgAnother.setPadding(15) + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder( + ItemCafeteriaAnotherBinding.inflate( + LayoutInflater.from(parent.context), parent, false + ) + ) + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(menu[position]) + } + + @SuppressLint("NotifyDataSetChanged") + fun submitList(item: List>) { + menu.clear() + menu.addAll(item) + notifyDataSetChanged() + } + + override fun getItemCount(): Int = menu.size +} \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAdapter.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaKoreanAdapter.kt similarity index 80% rename from app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAdapter.kt rename to app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaKoreanAdapter.kt index 53232a76..7787b339 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaAdapter.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/CafeteriaKoreanAdapter.kt @@ -4,9 +4,9 @@ import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.dongyang.android.youdongknowme.databinding.ItemCafeteriaMenuBinding +import com.dongyang.android.youdongknowme.databinding.ItemCafeteriaKoreanBinding -class CafeteriaAdapter : RecyclerView.Adapter() { +class CafeteriaKoreanAdapter : RecyclerView.Adapter() { init { setHasStableIds(true) @@ -14,16 +14,16 @@ class CafeteriaAdapter : RecyclerView.Adapter() { private var menu = arrayListOf() - inner class ViewHolder(private val binding: ItemCafeteriaMenuBinding) : + inner class ViewHolder(private val binding: ItemCafeteriaKoreanBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(item: String) { - binding.menu = item + binding.koreanMenu = item } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder( - ItemCafeteriaMenuBinding.inflate( + ItemCafeteriaKoreanBinding.inflate( LayoutInflater.from(parent.context), parent, false ) ) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt index 9e931ba9..9f73a5ae 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt @@ -7,6 +7,7 @@ import com.dongyang.android.youdongknowme.databinding.ItemCalendarDayBinding import com.kizitonwose.calendarview.CalendarView import com.kizitonwose.calendarview.model.CalendarDay import com.kizitonwose.calendarview.ui.ViewContainer +import java.time.LocalDate import java.time.format.DateTimeFormatter class CafeteriaContainer( @@ -24,34 +25,44 @@ class CafeteriaContainer( init { view.setOnClickListener { - if (viewModel.selectedDate.value != day.date) { - notifyDateChanged(viewModel, calendarView, viewModel.selectedDate.value, day.date) + viewModel.selectedDate.value?.let { selectedDate -> + if (selectedDate != day.date) { + notifyDateChanged(viewModel, calendarView, selectedDate, day.date) + } } } } fun bind(day: CalendarDay) { this.day = day - bind.itemCalendarDate.text = dateFormatter.format(day.date) - bind.itemCalendarDay.text = dayFormatter.format(day.date) - bind.itemCalendarMonth.text = monthFormatter.format(day.date) - - if (day.date == viewModel.selectedDate.value) { - bind.mvItemCalendarDate.setCardBackgroundColor( - ContextCompat.getColor( - view.context, - R.color.blue300 - ) - ) - bind.itemCalendarDate.setTextColor(ContextCompat.getColor(view.context, R.color.white)) - } else { - bind.mvItemCalendarDate.setCardBackgroundColor( - ContextCompat.getColor( - view.context, - R.color.white - ) + bind.apply { + tvItemCalendarDate.text = dateFormatter.format(day.date) + tvItemCalendarDay.text = dayFormatter.format(day.date) + tvItemCalendarMonth.text = monthFormatter.format(day.date) + } + + val (bgColor, textColor) = when (day.date) { + viewModel.selectedDate.value -> R.color.blue300 to R.color.white + LocalDate.now() -> R.color.gray200 to R.color.gray500 + else -> R.color.white to R.color.gray500 + } + + bind.mvItemCalendarContainer.setCardBackgroundColor( + ContextCompat.getColor( + view.context, + bgColor ) - bind.itemCalendarDate.setTextColor(ContextCompat.getColor(view.context, R.color.black)) + ) + setTextColor(textColor) + } + + private fun setTextColor(colorRes: Int) { + val color = ContextCompat.getColor(view.context, colorRes) + + bind.apply { + tvItemCalendarDate.setTextColor(color) + tvItemCalendarDay.setTextColor(color) + tvItemCalendarMonth.setTextColor(color) } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt index b4e8189c..b72837d6 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt @@ -4,14 +4,16 @@ import android.annotation.SuppressLint import android.util.TypedValue import android.view.MotionEvent import android.view.View +import androidx.core.content.ContextCompat +import androidx.core.view.isVisible +import androidx.recyclerview.widget.LinearLayoutManager import androidx.window.layout.WindowMetricsCalculator import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.FragmentCafeteriaBinding import com.dongyang.android.youdongknowme.standard.base.BaseFragment -import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaAdapter +import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaAnotherAdapter +import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaKoreanAdapter import com.dongyang.android.youdongknowme.ui.view.util.EventObserver -import com.google.android.flexbox.FlexDirection -import com.google.android.flexbox.FlexboxLayoutManager import com.kizitonwose.calendarview.model.CalendarDay import com.kizitonwose.calendarview.ui.DayBinder import com.kizitonwose.calendarview.utils.Size @@ -27,31 +29,47 @@ class CafeteriaFragment : BaseFragment + val category = when (checkedId) { + binding.btnKorean.id -> korean + binding.btnAnother.id -> another + else -> korean + } + + if (isChecked) { + viewModel.setCategory(category) + } + } + val wmc = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(requireActivity()) @@ -72,8 +90,6 @@ class CafeteriaFragment : BaseFragment + updateCafeteriaState(selectedCategory) + } + + viewModel.selectedDate.observe(viewLifecycleOwner) { + viewModel.updateDaysMenu(it) + } } @SuppressLint("ClickableViewAccessibility") @@ -109,7 +133,7 @@ class CafeteriaFragment : BaseFragment @@ -123,9 +147,25 @@ class CafeteriaFragment : BaseFragment { + SUNDAY -> { currentDate.with(TemporalAdjusters.next(MONDAY)) } @@ -138,14 +178,4 @@ class CafeteriaFragment : BaseFragment> = MutableLiveData() val cafeteriaList: LiveData> = _cafeteriaList - private val _koreaMenus: MutableLiveData> = MutableLiveData() - val koreaMenus: LiveData> = _koreaMenus + private val _koreanMenus: MutableLiveData> = MutableLiveData() + val koreanMenus: LiveData> = _koreanMenus - private val _daysMenus: MutableLiveData> = MutableLiveData() - val daysMenus: LiveData> = _daysMenus + private val _anotherMenus: MutableLiveData>> = MutableLiveData() + val anotherMenus: LiveData>> = _anotherMenus - private val emptyMenu = listOf(resourceProvider.getString(R.string.cafeteria_no_menu)) + private val _selectedCategory = MutableLiveData() + val selectedCategory: LiveData get() = _selectedCategory init { fetchCafeteria() @@ -55,7 +55,9 @@ class CafeteriaViewModel( val menuList = result.data _cafeteriaList.value = menuList _selectedDate.value = LocalDate.now() - selectedDate.value?.let { updateMenuList(it) } + _koreanMenus.value = + menuList.find { it.date == _selectedDate.value?.toString() }?.menus + ?: emptyList() _isError.postValue(false) _isLoading.postValue(false) } @@ -72,13 +74,8 @@ class CafeteriaViewModel( fun updateMenuList(selectedDate: LocalDate) { val cafeteriaList = _cafeteriaList.value ?: emptyList() _selectedDate.value = selectedDate - val selectedMenu = cafeteriaList.find { it.date == selectedDate.toString() }?.menus - _koreaMenus.postValue( - if (selectedMenu.isNullOrEmpty()) { - emptyMenu - } else { - selectedMenu - } + _koreanMenus.postValue( + cafeteriaList.find { it.date == selectedDate.toString() }?.menus ?: emptyList() ) } @@ -88,12 +85,21 @@ class CafeteriaViewModel( runCatching { cafeteriaRepository.fetchDaysMenus(dateToWeekday) }.onSuccess { daysMenus -> - val formatter = DecimalFormat("#,###") - val formattedMenuWithPrice = daysMenus.map { "${it.menuNameKr} ${formatter.format(it.price)}원" } - _daysMenus.value = formattedMenuWithPrice + val formattedPrice = DecimalFormat("#,###") + _anotherMenus.value = daysMenus.map { menu -> + arrayOf( + menu.menuNameKr, + menu.name, + "${formattedPrice.format(menu.price)}원" + ) + } }.onFailure { _isError.value = true } } } + + fun setCategory(category: String) { + _selectedCategory.value = category + } } diff --git a/app/src/main/res/drawable/bg_gray100_rounded_corner.xml b/app/src/main/res/drawable/bg_gray100_rounded_corner.xml new file mode 100644 index 00000000..3fb6651f --- /dev/null +++ b/app/src/main/res/drawable/bg_gray100_rounded_corner.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_gray100_radius_10dp.xml b/app/src/main/res/drawable/btn_gray100_radius_10dp.xml new file mode 100644 index 00000000..cb39088a --- /dev/null +++ b/app/src/main/res/drawable/btn_gray100_radius_10dp.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/img_cafeteria_cheese_pork_cutlet.png b/app/src/main/res/drawable/img_cafeteria_cheese_pork_cutlet.png new file mode 100644 index 00000000..a1068aa6 Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_cheese_pork_cutlet.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_cheese_ramen.png b/app/src/main/res/drawable/img_cafeteria_cheese_ramen.png new file mode 100644 index 00000000..6d89dcf6 Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_cheese_ramen.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_chicken_mayo_rice.png b/app/src/main/res/drawable/img_cafeteria_chicken_mayo_rice.png new file mode 100644 index 00000000..d670b0de Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_chicken_mayo_rice.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_korean.png b/app/src/main/res/drawable/img_cafeteria_korean.png new file mode 100644 index 00000000..364aa56d Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_korean.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_pork_cutlet.png b/app/src/main/res/drawable/img_cafeteria_pork_cutlet.png new file mode 100644 index 00000000..caf8afbc Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_pork_cutlet.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_ramen.png b/app/src/main/res/drawable/img_cafeteria_ramen.png new file mode 100644 index 00000000..dd521d8a Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_ramen.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_seafood_ramen.png b/app/src/main/res/drawable/img_cafeteria_seafood_ramen.png new file mode 100644 index 00000000..d612a2dc Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_seafood_ramen.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_spam_kimchi_fried_rice.png b/app/src/main/res/drawable/img_cafeteria_spam_kimchi_fried_rice.png new file mode 100644 index 00000000..249c5a4c Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_spam_kimchi_fried_rice.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_spicy_mayo_rice.png b/app/src/main/res/drawable/img_cafeteria_spicy_mayo_rice.png new file mode 100644 index 00000000..1875ab3a Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_spicy_mayo_rice.png differ diff --git a/app/src/main/res/drawable/img_cafeteria_sweet_potato_cheese_pork_cutlet.png b/app/src/main/res/drawable/img_cafeteria_sweet_potato_cheese_pork_cutlet.png new file mode 100644 index 00000000..d81fb853 Binary files /dev/null and b/app/src/main/res/drawable/img_cafeteria_sweet_potato_cheese_pork_cutlet.png differ diff --git a/app/src/main/res/layout/fragment_cafeteria.xml b/app/src/main/res/layout/fragment_cafeteria.xml index 574998f1..34393218 100644 --- a/app/src/main/res/layout/fragment_cafeteria.xml +++ b/app/src/main/res/layout/fragment_cafeteria.xml @@ -49,6 +49,14 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + - - - + - + + + + + + + app:layout_constraintTop_toBottomOf="@id/mv_category_toggle_group"> + + + + + + android:layout_marginStart="25dp" + android:orientation="vertical"> + + + android:text="@string/cafeteria_korean_subtitle" + android:textColor="@color/gray400" /> + + + + + tools:listitem="@layout/item_cafeteria_korean" /> - + - + app:layout_constraintTop_toBottomOf="@id/mv_category_toggle_group"> - + + + android:overScrollMode="never" + tools:listitem="@layout/item_cafeteria_another" /> + - + - + - - + + diff --git a/app/src/main/res/layout/item_cafeteria_another.xml b/app/src/main/res/layout/item_cafeteria_another.xml new file mode 100644 index 00000000..7a72f338 --- /dev/null +++ b/app/src/main/res/layout/item_cafeteria_another.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_cafeteria_korean.xml b/app/src/main/res/layout/item_cafeteria_korean.xml new file mode 100644 index 00000000..88b27080 --- /dev/null +++ b/app/src/main/res/layout/item_cafeteria_korean.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_cafeteria_menu.xml b/app/src/main/res/layout/item_cafeteria_menu.xml deleted file mode 100644 index e997113e..00000000 --- a/app/src/main/res/layout/item_cafeteria_menu.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_calendar_day.xml b/app/src/main/res/layout/item_calendar_day.xml index 6ae944f7..95bcda88 100644 --- a/app/src/main/res/layout/item_calendar_day.xml +++ b/app/src/main/res/layout/item_calendar_day.xml @@ -5,61 +5,58 @@ - - + + - + android:gravity="center_vertical" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - + - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8076c22e..3eb629f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -124,9 +124,16 @@ 점심 11:00 - 14:00, 16:30 - 18:00 8호관 3층 - 😅 등록된 메뉴가 없어요. - 🍚 한식 - 🍛 일품 + 🚫 주말에는 식당을 운영하지 않아요. + 백반 + Baekban + 6,500원 + 📋 + *해당 사진은 AI를 통해 생성된 이미지입니다. + 한식🍚 + 일품🍛 + 한식 + 일품 오픈소스 라이센스