Skip to content

Commit f4bb343

Browse files
authored
Merge branch 'develop' into feature/#160
2 parents 01d3654 + 1c76212 commit f4bb343

27 files changed

+920
-122
lines changed

app/src/main/assets/default.db

4 KB
Binary file not shown.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.drunkenboys.calendarun.data.calendartheme.entity
2+
3+
import androidx.room.Entity
4+
import androidx.room.PrimaryKey
5+
6+
@Entity(tableName = "CalendarTheme")
7+
data class CalendarTheme(
8+
@PrimaryKey val id: Long = 1,
9+
val weekDayTextColor: Int,
10+
val holidayTextColor: Int,
11+
val saturdayTextColor: Int,
12+
val sundayTextColor: Int,
13+
val selectedFrameColor: Int,
14+
val backgroundColor: Int,
15+
val textSize: Int,
16+
val textAlign: Int,
17+
val languageType: LanguageType,
18+
val visibleScheduleCount: Int
19+
) {
20+
21+
enum class LanguageType(val description: String) {
22+
KOREAN("한글"),
23+
ENGLISH("영어")
24+
}
25+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.drunkenboys.calendarun.data.calendartheme.local
2+
3+
import androidx.room.Dao
4+
import androidx.room.Query
5+
import androidx.room.Update
6+
import com.drunkenboys.calendarun.data.calendartheme.entity.CalendarTheme
7+
import kotlinx.coroutines.flow.Flow
8+
9+
@Dao
10+
interface CalendarThemeDao {
11+
12+
@Query("SELECT * FROM CalendarTheme where id = 1")
13+
fun fetchCalendarTheme(): Flow<CalendarTheme>
14+
15+
@Update
16+
suspend fun updateCalendarTheme(theme: CalendarTheme)
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.drunkenboys.calendarun.data.calendartheme.local
2+
3+
import com.drunkenboys.calendarun.data.calendartheme.entity.CalendarTheme
4+
import kotlinx.coroutines.flow.Flow
5+
6+
interface CalendarThemeLocalDataSource {
7+
8+
fun fetchCalendarTheme(): Flow<CalendarTheme>
9+
10+
suspend fun updateCalendarTheme(theme: CalendarTheme)
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.drunkenboys.calendarun.data.calendartheme.local
2+
3+
import com.drunkenboys.calendarun.data.calendartheme.entity.CalendarTheme
4+
import kotlinx.coroutines.CoroutineDispatcher
5+
import kotlinx.coroutines.flow.Flow
6+
import kotlinx.coroutines.withContext
7+
import javax.inject.Inject
8+
9+
class CalendarThemeLocalDataSourceImpl @Inject constructor(
10+
private val calendarThemeDao: CalendarThemeDao,
11+
private val dispatcher: CoroutineDispatcher
12+
) : CalendarThemeLocalDataSource {
13+
14+
override fun fetchCalendarTheme(): Flow<CalendarTheme> = calendarThemeDao.fetchCalendarTheme()
15+
16+
override suspend fun updateCalendarTheme(theme: CalendarTheme) = withContext(dispatcher) {
17+
calendarThemeDao.updateCalendarTheme(theme)
18+
}
19+
}

app/src/main/java/com/drunkenboys/calendarun/data/room/Database.kt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ package com.drunkenboys.calendarun.data.room
33
import androidx.room.Database
44
import androidx.room.RoomDatabase
55
import androidx.room.TypeConverters
6+
import androidx.room.migration.Migration
7+
import androidx.sqlite.db.SupportSQLiteDatabase
68
import com.drunkenboys.calendarun.data.calendar.entity.Calendar
79
import com.drunkenboys.calendarun.data.calendar.local.CalendarDao
10+
import com.drunkenboys.calendarun.data.calendartheme.entity.CalendarTheme
11+
import com.drunkenboys.calendarun.data.calendartheme.local.CalendarThemeDao
812
import com.drunkenboys.calendarun.data.checkpoint.entity.CheckPoint
913
import com.drunkenboys.calendarun.data.checkpoint.local.CheckPointDao
1014
import com.drunkenboys.calendarun.data.schedule.entity.Schedule
1115
import com.drunkenboys.calendarun.data.schedule.local.ScheduleDao
1216

13-
@Database(entities = [Calendar::class, CheckPoint::class, Schedule::class], version = 1)
17+
@Database(entities = [Calendar::class, CheckPoint::class, Schedule::class, CalendarTheme::class], version = 2)
1418
@TypeConverters(Converters::class)
1519
abstract class Database : RoomDatabase() {
1620

@@ -20,4 +24,28 @@ abstract class Database : RoomDatabase() {
2024

2125
abstract fun scheduleDao(): ScheduleDao
2226

27+
abstract fun calendarThemeDao(): CalendarThemeDao
28+
29+
companion object {
30+
31+
val MIGRATION_1_2 = object : Migration(1, 2) {
32+
override fun migrate(database: SupportSQLiteDatabase) {
33+
database.execSQL(
34+
"CREATE TABLE `CalendarTheme` (" +
35+
"`id` INTEGER NOT NULL, " +
36+
"`weekDayTextColor` INTEGER NOT NULL, " +
37+
"`holidayTextColor` INTEGER NOT NULL, " +
38+
"`saturdayTextColor` INTEGER NOT NULL, " +
39+
"`sundayTextColor` INTEGER NOT NULL, " +
40+
"`selectedFrameColor` INTEGER NOT NULL, " +
41+
"`backgroundColor` INTEGER NOT NULL, " +
42+
"`textSize` INTEGER NOT NULL, " +
43+
"`textAlign` INTEGER NOT NULL, " +
44+
"`languageType` TEXT NOT NULL, " +
45+
"`visibleScheduleCount` INTEGER NOT NULL, " +
46+
"PRIMARY KEY(`id`))"
47+
)
48+
}
49+
}
50+
}
2351
}

app/src/main/java/com/drunkenboys/calendarun/di/DataSourceModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package com.drunkenboys.calendarun.di
22

33
import com.drunkenboys.calendarun.data.calendar.local.CalendarLocalDataSource
44
import com.drunkenboys.calendarun.data.calendar.local.CalendarLocalDataSourceImpl
5+
import com.drunkenboys.calendarun.data.calendartheme.local.CalendarThemeLocalDataSource
6+
import com.drunkenboys.calendarun.data.calendartheme.local.CalendarThemeLocalDataSourceImpl
57
import com.drunkenboys.calendarun.data.checkpoint.local.CheckPointLocalDataSource
68
import com.drunkenboys.calendarun.data.checkpoint.local.CheckPointLocalDataSourceImpl
79
import com.drunkenboys.calendarun.data.schedule.local.ScheduleLocalDataSource
@@ -24,4 +26,7 @@ abstract class DataSourceModule {
2426
@Binds
2527
abstract fun bindScheduleDataSource(dataSource: ScheduleLocalDataSourceImpl): ScheduleLocalDataSource
2628

29+
@Binds
30+
abstract fun bindCalendarThemeDataSource(dataSource: CalendarThemeLocalDataSourceImpl): CalendarThemeLocalDataSource
31+
2732
}

app/src/main/java/com/drunkenboys/calendarun/di/LocalDatabaseModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ object LocalDatabaseModule {
2222
"AppDatabase.db"
2323
)
2424
.createFromAsset("default.db")
25+
.addMigrations(Database.MIGRATION_1_2)
2526
.build()
2627

2728
@Provides
@@ -32,4 +33,7 @@ object LocalDatabaseModule {
3233

3334
@Provides
3435
fun provideScheduleDao(database: Database) = database.scheduleDao()
36+
37+
@Provides
38+
fun provideCalendarThemeDao(database: Database) = database.calendarThemeDao()
3539
}

app/src/main/java/com/drunkenboys/calendarun/ui/maincalendar/MainCalendarFragment.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class MainCalendarFragment : BaseFragment<FragmentMainCalendarBinding>(R.layout.
4444
collectFabClickEvent()
4545
collectDaySecondClickListener()
4646
mainCalendarViewModel.fetchCalendarList()
47+
collectCalendarDesignObject()
4748
}
4849

4950
private fun setupCalendarView() {
@@ -203,6 +204,18 @@ class MainCalendarFragment : BaseFragment<FragmentMainCalendarBinding>(R.layout.
203204
}
204205
}
205206

207+
private fun collectCalendarDesignObject() {
208+
lifecycleScope.launch {
209+
repeatOnLifecycle(Lifecycle.State.STARTED) {
210+
mainCalendarViewModel.fetchCalendarDesignObject()
211+
.collect {
212+
binding.calendarMonth.setDesign(it)
213+
binding.calendarYear.setTheme(it)
214+
}
215+
}
216+
}
217+
}
218+
206219
companion object {
207220

208221
private const val FIRST_HEADER = 0

app/src/main/java/com/drunkenboys/calendarun/ui/maincalendar/MainCalendarViewModel.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.viewModelScope
55
import com.drunkenboys.calendarun.data.calendar.entity.Calendar
66
import com.drunkenboys.calendarun.data.calendar.local.CalendarLocalDataSource
7+
import com.drunkenboys.calendarun.data.calendartheme.local.CalendarThemeLocalDataSource
78
import com.drunkenboys.calendarun.data.checkpoint.entity.CheckPoint
89
import com.drunkenboys.calendarun.data.checkpoint.local.CheckPointLocalDataSource
910
import com.drunkenboys.calendarun.data.schedule.entity.Schedule
1011
import com.drunkenboys.calendarun.data.schedule.local.ScheduleLocalDataSource
1112
import com.drunkenboys.calendarun.util.nextDay
13+
import com.drunkenboys.calendarun.ui.theme.toCalendarDesignObject
1214
import com.drunkenboys.ckscalendar.data.CalendarScheduleObject
1315
import com.drunkenboys.ckscalendar.data.CalendarSet
1416
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -17,6 +19,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
1719
import kotlinx.coroutines.flow.MutableStateFlow
1820
import kotlinx.coroutines.flow.SharedFlow
1921
import kotlinx.coroutines.flow.StateFlow
22+
import kotlinx.coroutines.flow.*
2023
import kotlinx.coroutines.launch
2124
import java.time.LocalDate
2225
import javax.inject.Inject
@@ -25,7 +28,8 @@ import javax.inject.Inject
2528
class MainCalendarViewModel @Inject constructor(
2629
private val calendarLocalDataSource: CalendarLocalDataSource,
2730
private val checkPointLocalDataSource: CheckPointLocalDataSource,
28-
private val scheduleLocalDataSource: ScheduleLocalDataSource
31+
private val scheduleLocalDataSource: ScheduleLocalDataSource,
32+
private val calendarThemeDataSource: CalendarThemeLocalDataSource
2933
) : ViewModel() {
3034

3135
private val _calendar = MutableStateFlow<Calendar?>(null)
@@ -156,4 +160,7 @@ class MainCalendarViewModel @Inject constructor(
156160

157161
return calendarStartDateList to calendarEndDateList
158162
}
163+
164+
fun fetchCalendarDesignObject() = calendarThemeDataSource.fetchCalendarTheme()
165+
.map { it.toCalendarDesignObject() }
159166
}

0 commit comments

Comments
 (0)