Skip to content

Commit 93c5c69

Browse files
authored
Merge pull request #111 from snuhcs-course/feature/1202
주간통계 테두리 설정로직 변경
2 parents 6103389 + cdd7e7d commit 93c5c69

2 files changed

Lines changed: 60 additions & 63 deletions

File tree

Sumdays/.idea/deploymentTargetSelector.xml

Lines changed: 0 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sumdays/app/src/main/java/com/example/sumdays/statistics/WeekStatsDetailActivity.kt

Lines changed: 60 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,27 @@ import android.widget.FrameLayout
99
import android.widget.LinearLayout
1010
import android.widget.TextView
1111
import android.widget.Toast
12+
import androidx.activity.viewModels
1213
import androidx.annotation.RequiresApi
1314
import androidx.appcompat.app.AppCompatActivity
15+
import androidx.lifecycle.lifecycleScope
16+
import com.example.sumdays.data.viewModel.DailyEntryViewModel
1417
import com.example.sumdays.R
1518
import com.example.sumdays.databinding.ActivityWeekStatsDetailBinding
1619
import com.example.sumdays.utils.setupEdgeToEdge
20+
import kotlinx.coroutines.Dispatchers
21+
import kotlinx.coroutines.launch
22+
import kotlinx.coroutines.withContext
1723
import org.threeten.bp.DayOfWeek
1824
import org.threeten.bp.LocalDate
19-
import org.threeten.bp.format.DateTimeFormatter
20-
import java.util.Locale
2125

2226
class 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

Comments
 (0)