diff --git a/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt b/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt index b2d25fe..9f1fad0 100644 --- a/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt +++ b/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt @@ -20,10 +20,9 @@ data class DayShift( ) class CalendarAdapter( - var days: List, - private val listener: OnDayClickListener, - var showHolidays: Boolean = true, - private val rowCount: Int = 6 // Default to 6 rows + var days: List, + private val listener: OnDayClickListener, + var showHolidays: Boolean = true ) : RecyclerView.Adapter() { interface OnDayClickListener { fun onDayClick(date: LocalDate, currentShift: String) @@ -48,28 +47,19 @@ class CalendarAdapter( return (dp * context.resources.displayMetrics.density).toInt() } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val item = days[position] - val context = holder.itemView.context + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = days[position] + val context = holder.itemView.context - // Fixed item height - square cells based on screen width - val displayMetrics = context.resources.displayMetrics - val screenWidth = displayMetrics.widthPixels - val itemHeight = screenWidth / 7 + if (item.date == null) { + holder.itemView.visibility = View.INVISIBLE + return + } - val layoutParams = holder.itemView.layoutParams - layoutParams.height = itemHeight - holder.itemView.layoutParams = layoutParams + holder.itemView.visibility = View.VISIBLE - if (item.date == null) { - holder.itemView.visibility = View.INVISIBLE - return - } - - holder.itemView.visibility = View.VISIBLE - - // Day Number - + // Day Number + holder.dayNumber.text = item.date.dayOfMonth.toString() // Holiday / Weekend logic val isSunday = item.date.dayOfWeek == java.time.DayOfWeek.SUNDAY val isSaturday = item.date.dayOfWeek == java.time.DayOfWeek.SATURDAY diff --git a/app/src/main/java/com/example/shiftalarm/MainActivity.kt b/app/src/main/java/com/example/shiftalarm/MainActivity.kt index 808c734..2c48493 100644 --- a/app/src/main/java/com/example/shiftalarm/MainActivity.kt +++ b/app/src/main/java/com/example/shiftalarm/MainActivity.kt @@ -266,11 +266,10 @@ class MainActivity : AppCompatActivity() { return (dp * resources.displayMetrics.density).toInt() } - private fun setupCalendar() { - binding.calendarGrid.layoutManager = GridLayoutManager(this, 7) - binding.calendarGrid.setHasFixedSize(false) // Allow dynamic item sizing - updateCalendar() - } + private fun setupCalendar() { + binding.calendarGrid.layoutManager = GridLayoutManager(this, 7) + updateCalendar() + } private fun updateCalendar() { val prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) @@ -306,36 +305,15 @@ class MainActivity : AppCompatActivity() { dao.getMemosForMonth(monthStr).associateBy { memoItem -> memoItem.date } } - val days = generateDaysForMonthWithData(currentViewMonth, currentViewTeam, factory, overrides, memos) - - // Calculate row count (5 or 6 rows) - val daysInMonth = currentViewMonth.lengthOfMonth() - val firstDayOfMonth = currentViewMonth.atDay(1).dayOfWeek.value % 7 - val actualDayCount = firstDayOfMonth + daysInMonth - val rowCount = if (actualDayCount <= 35) 5 else 6 - - val adapter = CalendarAdapter(days, object : CalendarAdapter.OnDayClickListener { - override fun onDayClick(date: LocalDate, currentShift: String) { - showDaySettingsDialog(date, currentShift) - } - }, binding.cbShowHolidays.isChecked, rowCount) - - binding.calendarGrid.adapter = adapter - - // Set RecyclerView height based on row count - // 5 rows: fixed height to fill space, no scroll - // 6 rows: max height (5 rows worth), enable scroll - val displayMetrics = resources.displayMetrics - val screenWidth = displayMetrics.widthPixels - val cellHeight = screenWidth / 7 // Square cells - val recyclerViewHeight = cellHeight * rowCount - val layoutParams = binding.calendarGrid.layoutParams - layoutParams.height = recyclerViewHeight - binding.calendarGrid.layoutParams = layoutParams - - // Disable scroll for 5 rows, enable for 6 rows - binding.calendarGrid.isNestedScrollingEnabled = rowCount > 5 + val days = generateDaysForMonthWithData(currentViewMonth, currentViewTeam, factory, overrides, memos) + val adapter = CalendarAdapter(days, object : CalendarAdapter.OnDayClickListener { + override fun onDayClick(date: LocalDate, currentShift: String) { + showDaySettingsDialog(date, currentShift) + } + }, binding.cbShowHolidays.isChecked) + + binding.calendarGrid.adapter = adapter binding.monthTitle.text = currentViewMonth.format(DateTimeFormatter.ofPattern("yyyy년 MM월")) // Update Header Status Text with Permission Warning if needed