mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2024-11-24 10:54:36 -06:00
[Agenda] Add e-learning event type and DB migration.
This commit is contained in:
parent
99021f6b3a
commit
a31c68e87a
@ -5,6 +5,7 @@
|
|||||||
<w>ciasteczko</w>
|
<w>ciasteczko</w>
|
||||||
<w>csrf</w>
|
<w>csrf</w>
|
||||||
<w>edziennik</w>
|
<w>edziennik</w>
|
||||||
|
<w>elearning</w>
|
||||||
<w>gson</w>
|
<w>gson</w>
|
||||||
<w>hebe</w>
|
<w>hebe</w>
|
||||||
<w>idziennik</w>
|
<w>idziennik</w>
|
||||||
|
@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.data.db.migration.*
|
|||||||
LibrusLesson::class,
|
LibrusLesson::class,
|
||||||
TimetableManual::class,
|
TimetableManual::class,
|
||||||
Metadata::class
|
Metadata::class
|
||||||
], version = 91)
|
], version = 92)
|
||||||
@TypeConverters(
|
@TypeConverters(
|
||||||
ConverterTime::class,
|
ConverterTime::class,
|
||||||
ConverterDate::class,
|
ConverterDate::class,
|
||||||
@ -176,7 +176,8 @@ abstract class AppDb : RoomDatabase() {
|
|||||||
Migration88(),
|
Migration88(),
|
||||||
Migration89(),
|
Migration89(),
|
||||||
Migration90(),
|
Migration90(),
|
||||||
Migration91()
|
Migration91(),
|
||||||
|
Migration92()
|
||||||
).allowMainThreadQueries().build()
|
).allowMainThreadQueries().build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,30 +9,9 @@ import androidx.room.Dao
|
|||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
import androidx.room.OnConflictStrategy
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import pl.szczodrzynski.edziennik.R
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_CLASS_EVENT
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_DEFAULT
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_DEFAULT
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_ESSAY
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_EXAM
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_EXCURSION
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_HOMEWORK
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_INFORMATION
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_PROJECT
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_PT_MEETING
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_READING
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_SHORT_QUIZ
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_CLASS_EVENT
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_DEFAULT
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_ESSAY
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_EXAM
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_EXCURSION
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_HOMEWORK
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_INFORMATION
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_PROJECT
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_PT_MEETING
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_READING
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_SHORT_QUIZ
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.EventType
|
import pl.szczodrzynski.edziennik.data.db.entity.EventType
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.EventType.Companion.SOURCE_DEFAULT
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
abstract class EventTypeDao {
|
abstract class EventTypeDao {
|
||||||
@ -58,19 +37,18 @@ abstract class EventTypeDao {
|
|||||||
abstract val allNow: List<EventType>
|
abstract val allNow: List<EventType>
|
||||||
|
|
||||||
fun addDefaultTypes(context: Context, profileId: Int): List<EventType> {
|
fun addDefaultTypes(context: Context, profileId: Int): List<EventType> {
|
||||||
val typeList = listOf(
|
var order = 100
|
||||||
EventType(profileId, TYPE_HOMEWORK, context.getString(R.string.event_type_homework), COLOR_HOMEWORK),
|
val colorMap = EventType.getTypeColorMap()
|
||||||
EventType(profileId, TYPE_DEFAULT, context.getString(R.string.event_other), COLOR_DEFAULT),
|
val typeList = EventType.getTypeNameMap().map { (id, name) ->
|
||||||
EventType(profileId, TYPE_EXAM, context.getString(R.string.event_exam), COLOR_EXAM),
|
EventType(
|
||||||
EventType(profileId, TYPE_SHORT_QUIZ, context.getString(R.string.event_short_quiz), COLOR_SHORT_QUIZ),
|
profileId = profileId,
|
||||||
EventType(profileId, TYPE_ESSAY, context.getString(R.string.event_essay), COLOR_ESSAY),
|
id = id,
|
||||||
EventType(profileId, TYPE_PROJECT, context.getString(R.string.event_project), COLOR_PROJECT),
|
name = context.getString(name),
|
||||||
EventType(profileId, TYPE_PT_MEETING, context.getString(R.string.event_pt_meeting), COLOR_PT_MEETING),
|
color = colorMap[id] ?: COLOR_DEFAULT,
|
||||||
EventType(profileId, TYPE_EXCURSION, context.getString(R.string.event_excursion), COLOR_EXCURSION),
|
order = order++,
|
||||||
EventType(profileId, TYPE_READING, context.getString(R.string.event_reading), COLOR_READING),
|
source = SOURCE_DEFAULT
|
||||||
EventType(profileId, TYPE_CLASS_EVENT, context.getString(R.string.event_class_event), COLOR_CLASS_EVENT),
|
)
|
||||||
EventType(profileId, TYPE_INFORMATION, context.getString(R.string.event_information), COLOR_INFORMATION)
|
}
|
||||||
)
|
|
||||||
addAll(typeList)
|
addAll(typeList)
|
||||||
return typeList
|
return typeList
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,7 @@ open class Event(
|
|||||||
var addedDate: Long = System.currentTimeMillis()
|
var addedDate: Long = System.currentTimeMillis()
|
||||||
) : Keepable() {
|
) : Keepable() {
|
||||||
companion object {
|
companion object {
|
||||||
|
const val TYPE_ELEARNING = -5L
|
||||||
const val TYPE_UNDEFINED = -2L
|
const val TYPE_UNDEFINED = -2L
|
||||||
const val TYPE_HOMEWORK = -1L
|
const val TYPE_HOMEWORK = -1L
|
||||||
const val TYPE_DEFAULT = 0L
|
const val TYPE_DEFAULT = 0L
|
||||||
@ -57,7 +58,7 @@ open class Event(
|
|||||||
const val TYPE_READING = 7L
|
const val TYPE_READING = 7L
|
||||||
const val TYPE_CLASS_EVENT = 8L
|
const val TYPE_CLASS_EVENT = 8L
|
||||||
const val TYPE_INFORMATION = 9L
|
const val TYPE_INFORMATION = 9L
|
||||||
const val TYPE_TEACHER_ABSENCE = 10L
|
const val COLOR_ELEARNING = 0xfff57f17.toInt()
|
||||||
const val COLOR_HOMEWORK = 0xff795548.toInt()
|
const val COLOR_HOMEWORK = 0xff795548.toInt()
|
||||||
const val COLOR_DEFAULT = 0xffffc107.toInt()
|
const val COLOR_DEFAULT = 0xffffc107.toInt()
|
||||||
const val COLOR_EXAM = 0xfff44336.toInt()
|
const val COLOR_EXAM = 0xfff44336.toInt()
|
||||||
@ -69,7 +70,6 @@ open class Event(
|
|||||||
const val COLOR_READING = 0xFFFFEB3B.toInt()
|
const val COLOR_READING = 0xFFFFEB3B.toInt()
|
||||||
const val COLOR_CLASS_EVENT = 0xff388e3c.toInt()
|
const val COLOR_CLASS_EVENT = 0xff388e3c.toInt()
|
||||||
const val COLOR_INFORMATION = 0xff039be5.toInt()
|
const val COLOR_INFORMATION = 0xff039be5.toInt()
|
||||||
const val COLOR_TEACHER_ABSENCE = 0xff039be5.toInt()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ColumnInfo(name = "eventAddedManually")
|
@ColumnInfo(name = "eventAddedManually")
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2020-1-6
|
|
||||||
*/
|
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.db.entity;
|
|
||||||
|
|
||||||
import android.graphics.Color;
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo;
|
|
||||||
import androidx.room.Entity;
|
|
||||||
|
|
||||||
@Entity(tableName = "eventTypes",
|
|
||||||
primaryKeys = {"profileId", "eventType"})
|
|
||||||
public class EventType {
|
|
||||||
public int profileId;
|
|
||||||
|
|
||||||
@ColumnInfo(name = "eventType")
|
|
||||||
public long id;
|
|
||||||
|
|
||||||
@ColumnInfo(name = "eventTypeName")
|
|
||||||
public String name;
|
|
||||||
@ColumnInfo(name = "eventTypeColor")
|
|
||||||
public int color;
|
|
||||||
|
|
||||||
public EventType(int profileId, long id, String name, int color) {
|
|
||||||
this.profileId = profileId;
|
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
|
||||||
this.color = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventType(int profileId, int id, String name, String color) {
|
|
||||||
this(profileId, id, name, Color.parseColor(color));
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2021-4-19.
|
||||||
|
*/
|
||||||
|
package pl.szczodrzynski.edziennik.data.db.entity
|
||||||
|
|
||||||
|
import androidx.room.ColumnInfo
|
||||||
|
import androidx.room.Entity
|
||||||
|
import pl.szczodrzynski.edziennik.R
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_CLASS_EVENT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_DEFAULT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_ELEARNING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_ESSAY
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_EXAM
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_EXCURSION
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_INFORMATION
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_PROJECT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_PT_MEETING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_READING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_SHORT_QUIZ
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_CLASS_EVENT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_DEFAULT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_ELEARNING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_ESSAY
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_EXAM
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_EXCURSION
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_INFORMATION
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_PROJECT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_PT_MEETING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_READING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_SHORT_QUIZ
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "eventTypes",
|
||||||
|
primaryKeys = ["profileId", "eventType"]
|
||||||
|
)
|
||||||
|
class EventType(
|
||||||
|
val profileId: Int,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "eventType")
|
||||||
|
val id: Long,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "eventTypeName")
|
||||||
|
val name: String,
|
||||||
|
@ColumnInfo(name = "eventTypeColor")
|
||||||
|
val color: Int,
|
||||||
|
@ColumnInfo(name = "eventTypeOrder")
|
||||||
|
var order: Int = id.toInt(),
|
||||||
|
@ColumnInfo(name = "eventTypeSource")
|
||||||
|
val source: Int = SOURCE_REGISTER
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
const val SOURCE_DEFAULT = 0
|
||||||
|
const val SOURCE_REGISTER = 1
|
||||||
|
const val SOURCE_CUSTOM = 2
|
||||||
|
const val SOURCE_SHARED = 3
|
||||||
|
|
||||||
|
fun getTypeColorMap() = mapOf(
|
||||||
|
TYPE_ELEARNING to COLOR_ELEARNING,
|
||||||
|
TYPE_HOMEWORK to COLOR_HOMEWORK,
|
||||||
|
TYPE_DEFAULT to COLOR_DEFAULT,
|
||||||
|
TYPE_EXAM to COLOR_EXAM,
|
||||||
|
TYPE_SHORT_QUIZ to COLOR_SHORT_QUIZ,
|
||||||
|
TYPE_ESSAY to COLOR_ESSAY,
|
||||||
|
TYPE_PROJECT to COLOR_PROJECT,
|
||||||
|
TYPE_PT_MEETING to COLOR_PT_MEETING,
|
||||||
|
TYPE_EXCURSION to COLOR_EXCURSION,
|
||||||
|
TYPE_READING to COLOR_READING,
|
||||||
|
TYPE_CLASS_EVENT to COLOR_CLASS_EVENT,
|
||||||
|
TYPE_INFORMATION to COLOR_INFORMATION
|
||||||
|
)
|
||||||
|
|
||||||
|
fun getTypeNameMap() = mapOf(
|
||||||
|
TYPE_ELEARNING to R.string.event_type_elearning,
|
||||||
|
TYPE_HOMEWORK to R.string.event_type_homework,
|
||||||
|
TYPE_DEFAULT to R.string.event_other,
|
||||||
|
TYPE_EXAM to R.string.event_exam,
|
||||||
|
TYPE_SHORT_QUIZ to R.string.event_short_quiz,
|
||||||
|
TYPE_ESSAY to R.string.event_essay,
|
||||||
|
TYPE_PROJECT to R.string.event_project,
|
||||||
|
TYPE_PT_MEETING to R.string.event_pt_meeting,
|
||||||
|
TYPE_EXCURSION to R.string.event_excursion,
|
||||||
|
TYPE_READING to R.string.event_reading,
|
||||||
|
TYPE_CLASS_EVENT to R.string.event_class_event,
|
||||||
|
TYPE_INFORMATION to R.string.event_information
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2021-4-15.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.db.migration
|
||||||
|
|
||||||
|
import android.content.ContentValues
|
||||||
|
import android.database.sqlite.SQLiteDatabase
|
||||||
|
import androidx.room.migration.Migration
|
||||||
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.COLOR_ELEARNING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_ELEARNING
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Event.Companion.TYPE_INFORMATION
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.EventType.Companion.SOURCE_DEFAULT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.EventType.Companion.SOURCE_REGISTER
|
||||||
|
import pl.szczodrzynski.edziennik.getInt
|
||||||
|
|
||||||
|
class Migration92 : Migration(91, 92) {
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
// make eventTypeName not nullable
|
||||||
|
database.execSQL("ALTER TABLE eventTypes RENAME TO _eventTypes;")
|
||||||
|
database.execSQL("CREATE TABLE eventTypes (" +
|
||||||
|
"profileId INTEGER NOT NULL, " +
|
||||||
|
"eventType INTEGER NOT NULL, " +
|
||||||
|
"eventTypeName TEXT NOT NULL, " +
|
||||||
|
"eventTypeColor INTEGER NOT NULL, " +
|
||||||
|
"PRIMARY KEY(profileId,eventType)" +
|
||||||
|
");")
|
||||||
|
database.execSQL("INSERT INTO eventTypes " +
|
||||||
|
"(profileId, eventType, eventTypeName, eventTypeColor) " +
|
||||||
|
"SELECT profileId, eventType, eventTypeName, eventTypeColor " +
|
||||||
|
"FROM _eventTypes;")
|
||||||
|
database.execSQL("DROP TABLE _eventTypes;")
|
||||||
|
|
||||||
|
// add columns for order and source
|
||||||
|
database.execSQL("ALTER TABLE eventTypes ADD COLUMN eventTypeOrder INTEGER NOT NULL DEFAULT 0;")
|
||||||
|
database.execSQL("ALTER TABLE eventTypes ADD COLUMN eventTypeSource INTEGER NOT NULL DEFAULT 0;")
|
||||||
|
|
||||||
|
// migrate existing types to show correct order and source
|
||||||
|
database.execSQL("UPDATE eventTypes SET eventTypeOrder = eventType + 102;")
|
||||||
|
database.execSQL("UPDATE eventTypes SET eventTypeSource = $SOURCE_REGISTER WHERE eventType > $TYPE_INFORMATION;")
|
||||||
|
|
||||||
|
// add new e-learning type
|
||||||
|
val cursor = database.query("SELECT profileId FROM profiles;")
|
||||||
|
cursor.use {
|
||||||
|
while (it.moveToNext()) {
|
||||||
|
val values = ContentValues().apply {
|
||||||
|
put("profileId", it.getInt("profileId"))
|
||||||
|
put("eventType", TYPE_ELEARNING)
|
||||||
|
put("eventTypeName", "lekcja online")
|
||||||
|
put("eventTypeColor", COLOR_ELEARNING)
|
||||||
|
put("eventTypeOrder", 100)
|
||||||
|
put("eventTypeSource", SOURCE_DEFAULT)
|
||||||
|
}
|
||||||
|
|
||||||
|
database.insert("eventTypes", SQLiteDatabase.CONFLICT_REPLACE, values)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1450,4 +1450,5 @@
|
|||||||
<string name="messages_config_greeting_on_forward">Dodaj podpis przy przekazywaniu wiadomości</string>
|
<string name="messages_config_greeting_on_forward">Dodaj podpis przy przekazywaniu wiadomości</string>
|
||||||
<string name="messages_config_greeting_text">Treść podpisu</string>
|
<string name="messages_config_greeting_text">Treść podpisu</string>
|
||||||
<string name="menu_messages_config">Ustawienia wiadomości</string>
|
<string name="menu_messages_config">Ustawienia wiadomości</string>
|
||||||
|
<string name="event_type_elearning">lekcja online</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user