Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
package com.dongyang.android.youdongknowme.ui.view.schedule

import android.content.res.ColorStateList
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.PorterDuff
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.dongyang.android.youdongknowme.R
Expand Down Expand Up @@ -75,10 +68,16 @@ class ScheduleFragment : BaseFragment<FragmentScheduleBinding, ScheduleViewModel
}

// 최소 날짜, 최대 날짜 지정
if(viewModel.currentYear.value == null || viewModel.currentYear.value != LocalDate.now().year){
viewModel.setCurrentYear(LocalDate.now())
}

binding.mvScheduleCalendar.apply {
this.state().edit().setMinimumDate(CalendarDay.from(2023, 1, 1))
.setMaximumDate(CalendarDay.from(2025, 2, 28))
.commit()
viewModel.currentYear.value?.let{
this.state().edit().setMinimumDate(CalendarDay.from(it-1, 1, 1))
.setMaximumDate(CalendarDay.from(it+1, 2, 28))
.commit()
}
}

// 연/월 방식으로 타이틀 처리
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@ package com.dongyang.android.youdongknowme.ui.view.schedule
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.dongyang.android.youdongknowme.data.local.SharedPreference.NO_SCHEDULE
import com.dongyang.android.youdongknowme.data.remote.entity.Schedule
import com.dongyang.android.youdongknowme.data.remote.entity.ScheduleEntry
import com.dongyang.android.youdongknowme.data.repository.ScheduleRepository
import com.dongyang.android.youdongknowme.standard.base.BaseViewModel
import com.dongyang.android.youdongknowme.standard.network.NetworkResult
import com.dongyang.android.youdongknowme.ui.view.util.Event
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.prolificinteractive.materialcalendarview.CalendarDay
import kotlinx.coroutines.launch
import org.threeten.bp.LocalDate
import java.util.Date

/* 학사 일정 뷰모델 */
class ScheduleViewModel(private val scheduleRepository: ScheduleRepository) : BaseViewModel() {
Expand All @@ -36,47 +35,38 @@ class ScheduleViewModel(private val scheduleRepository: ScheduleRepository) : Ba
private val _pickMonth = MutableLiveData<Int>()
val pickMonth: LiveData<Int> = _pickMonth

private var _currentYear = MutableLiveData<Int>()
val currentYear: LiveData<Int> = _currentYear

fun setPickedDate(date: CalendarDay) {
_pickYear.value = date.year
_pickMonth.value = date.month
}

fun setCurrentYear(date: LocalDate){
_currentYear.value = date.year
}

fun getSchedules() {
// 로컬에 저장한 데이터가 없으면 네트워크에서 데이터를 받아와 로컬에 저장 및 화면에 출력
if (scheduleRepository.getLocalSchedules() == NO_SCHEDULE) {
_isLoading.postValue(true)
viewModelScope.launch {
when (val result = scheduleRepository.fetchSchedules()) {
is NetworkResult.Success -> {
val scheduleList = result.data

// 선택한 연월 조건에 따라 리스트 출력

_scheduleList.postValue(getSchedulesForPickDate(scheduleList))

scheduleRepository.setLocalSchedules(Gson().toJson(scheduleList))
_isError.postValue(false)
_isLoading.postValue(false)
}

is NetworkResult.Error -> {
handleError(result, _errorState)
_isError.postValue(true)
_isLoading.postValue(false)
}
_isLoading.postValue(true)
viewModelScope.launch {
when (val result = scheduleRepository.fetchSchedules()) {
is NetworkResult.Success -> {
val scheduleList = result.data

// 선택한 연월 조건에 따라 리스트 출력
_scheduleList.postValue(getSchedulesForPickDate(scheduleList))

_isError.postValue(false)
_isLoading.postValue(false)
}

is NetworkResult.Error -> {
handleError(result, _errorState)
_isError.postValue(true)
_isLoading.postValue(false)
}
}
} else {
// 저장한 데이터가 있으면 로컬에서 곧바로 데이터를 받아와 화면에 출력
val localSchedules = scheduleRepository.getLocalSchedules()
val scheduleList = getSchedulesForPickDate(
Gson().fromJson(
localSchedules,
object : TypeToken<List<Schedule>>() {}.type
)
)
_isError.postValue(false)
_scheduleList.postValue(scheduleList)
}
}

Expand Down
Loading