@@ -9,21 +9,27 @@ import android.widget.FrameLayout
99import android.widget.LinearLayout
1010import android.widget.TextView
1111import android.widget.Toast
12+ import androidx.activity.viewModels
1213import androidx.annotation.RequiresApi
1314import androidx.appcompat.app.AppCompatActivity
15+ import androidx.lifecycle.lifecycleScope
16+ import com.example.sumdays.data.viewModel.DailyEntryViewModel
1417import com.example.sumdays.R
1518import com.example.sumdays.databinding.ActivityWeekStatsDetailBinding
1619import com.example.sumdays.utils.setupEdgeToEdge
20+ import kotlinx.coroutines.Dispatchers
21+ import kotlinx.coroutines.launch
22+ import kotlinx.coroutines.withContext
1723import org.threeten.bp.DayOfWeek
1824import org.threeten.bp.LocalDate
19- import org.threeten.bp.format.DateTimeFormatter
20- import java.util.Locale
2125
2226class WeekStatsDetailActivity : AppCompatActivity () {
2327
2428 private lateinit var binding: ActivityWeekStatsDetailBinding
2529 private lateinit var weekSummary: WeekSummary
2630
31+ private val dailyEntryViewModel: DailyEntryViewModel by viewModels()
32+
2733 @RequiresApi(Build .VERSION_CODES .O )
2834 override fun onCreate (savedInstanceState : Bundle ? ) {
2935 super .onCreate(savedInstanceState)
@@ -53,67 +59,66 @@ class WeekStatsDetailActivity : AppCompatActivity() {
5359
5460 @RequiresApi(Build .VERSION_CODES .O )
5561 private fun setupReportViews () {
56- // 1. 기간 정보 및 제목 설정
57- binding.weekRangeTextView.text = " ${weekSummary.startDate} ~ ${weekSummary.endDate} "
5862
59- // 2. 요약 및 피드백 내용 설정 (GridLayout 내용)
63+ binding.weekRangeTextView.text = " ${weekSummary.startDate} ~ ${weekSummary.endDate} "
6064 binding.summaryContentTextView.text = weekSummary.summary.overview
61-
6265 binding.feedbackContentTextView.text = weekSummary.insights.advice
6366
64-
65- // 3. 요일 표시 영역
66- val highlightDates = weekSummary.highlights.map { LocalDate .parse(it.date) }
67-
67+ // 요일 표시 영역 설정
6868 val startDate = LocalDate .parse(weekSummary.startDate)
6969
70- val dayRow1 = binding.dayRow1
71- val dayRow2 = binding.dayRow2
72- dayRow1.removeAllViews()
73- dayRow2.removeAllViews()
74-
75- dayRow1.weightSum = 5.0f
76- dayRow2.weightSum = 5.0f
77-
78- val dayNames = listOf (" 월" , " 화" , " 수" , " 목" , " 금" , " 토" , " 일" )
79-
80- for (i in 0 until 7 ) {
81- val date = startDate.plusDays(i.toLong())
82- val dayOfWeek = date.dayOfWeek
83-
84- // 일기가 작성된 날짜인지 확인
85- val isDiaryWritten = highlightDates.contains(date)
86-
87- val dayLayout = LayoutInflater .from(this ).inflate(R .layout.include_day_cell_static, null ) as FrameLayout
88- val dayTextView: TextView = dayLayout.findViewById(R .id.day_name_text)
89-
90- // 요일 이름 설정
91- dayTextView.text = dayNames[i % 7 ]
92-
93- // 일기 작성 여부에 따라 테두리(여우 모양) 적용
94- if (isDiaryWritten) {
95- dayLayout.setBackgroundResource(R .drawable.shape_fox_orange_border)
96- } else {
97- dayLayout.setBackgroundResource(android.R .color.transparent)
98- }
99-
100- // 레이아웃 파라미터 (5열과 2열에 맞게 가중치 조정 필요)
101- val layoutParams = LinearLayout .LayoutParams (
102- 0 ,
103- 200 ,
104- 1.0f
105- ).apply {
106- // 간격 확보
107- marginStart = 4 .dp
108- marginEnd = 4 .dp
70+ lifecycleScope.launch {
71+ // 작성된 모든 날짜 가져오기
72+ val writtenDatesSet = withContext(Dispatchers .IO ) {
73+ dailyEntryViewModel.getAllWrittenDates().toSet()
10974 }
110- dayLayout.layoutParams = layoutParams
11175
112- // 월-금은 day_row_1에, 토-일은 day_row_2에 추가
113- if (dayOfWeek <= DayOfWeek .FRIDAY ) {
114- dayRow1.addView(dayLayout)
115- } else {
116- dayRow2.addView(dayLayout)
76+ binding.dayRow1.removeAllViews()
77+ binding.dayRow2.removeAllViews()
78+
79+ binding.dayRow1.weightSum = 5.0f
80+ binding.dayRow2.weightSum = 5.0f
81+
82+ val dayNames = listOf (" 월" , " 화" , " 수" , " 목" , " 금" , " 토" , " 일" )
83+
84+ for (i in 0 until 7 ) {
85+ val date = startDate.plusDays(i.toLong())
86+ val dayOfWeek = date.dayOfWeek
87+
88+ // 실제 DB에 저장된 날짜인지 확인
89+ val isDiaryWritten = writtenDatesSet.contains(date.toString())
90+
91+ // 레이아웃 인플레이트
92+ val dayLayout = LayoutInflater .from(this @WeekStatsDetailActivity)
93+ .inflate(R .layout.include_day_cell_static, null ) as FrameLayout
94+ val dayTextView: TextView = dayLayout.findViewById(R .id.day_name_text)
95+
96+ dayTextView.text = dayNames[i % 7 ]
97+
98+ // 테두리 적용 (일기 쓴 날이면 주황색 테두리)
99+ if (isDiaryWritten) {
100+ dayLayout.setBackgroundResource(R .drawable.shape_fox_orange_border)
101+ } else {
102+ dayLayout.setBackgroundResource(android.R .color.transparent)
103+ }
104+
105+ // LayoutParams 설정
106+ val layoutParams = LinearLayout .LayoutParams (
107+ 0 ,
108+ 200 ,
109+ 1.0f
110+ ).apply {
111+ marginStart = 4 .dp
112+ marginEnd = 4 .dp
113+ bottomMargin = 8 .dp
114+ }
115+ dayLayout.layoutParams = layoutParams
116+
117+ if (dayOfWeek <= DayOfWeek .FRIDAY ) {
118+ binding.dayRow1.addView(dayLayout)
119+ } else {
120+ binding.dayRow2.addView(dayLayout)
121+ }
117122 }
118123 }
119124 }
0 commit comments