diff --git a/.idea/dictionaries/Kuba.xml b/.idea/dictionaries/Kuba.xml
index 7910687c..592a5d5e 100644
--- a/.idea/dictionaries/Kuba.xml
+++ b/.idea/dictionaries/Kuba.xml
@@ -5,6 +5,7 @@
ciasteczko
csrf
edziennik
+ elearning
gson
hebe
idziennik
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.kt
index e6d7e40e..66fa4348 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.kt
@@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.data.db.migration.*
LibrusLesson::class,
TimetableManual::class,
Metadata::class
-], version = 91)
+], version = 92)
@TypeConverters(
ConverterTime::class,
ConverterDate::class,
@@ -176,7 +176,8 @@ abstract class AppDb : RoomDatabase() {
Migration88(),
Migration89(),
Migration90(),
- Migration91()
+ Migration91(),
+ Migration92()
).allowMainThreadQueries().build()
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/dao/EventTypeDao.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/dao/EventTypeDao.kt
index 28be6d65..d5006970 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/dao/EventTypeDao.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/dao/EventTypeDao.kt
@@ -9,30 +9,9 @@ import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
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_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.Companion.SOURCE_DEFAULT
@Dao
abstract class EventTypeDao {
@@ -58,19 +37,18 @@ abstract class EventTypeDao {
abstract val allNow: List
fun addDefaultTypes(context: Context, profileId: Int): List {
- val typeList = listOf(
- EventType(profileId, TYPE_HOMEWORK, context.getString(R.string.event_type_homework), COLOR_HOMEWORK),
- EventType(profileId, TYPE_DEFAULT, context.getString(R.string.event_other), COLOR_DEFAULT),
- EventType(profileId, TYPE_EXAM, context.getString(R.string.event_exam), COLOR_EXAM),
- EventType(profileId, TYPE_SHORT_QUIZ, context.getString(R.string.event_short_quiz), COLOR_SHORT_QUIZ),
- EventType(profileId, TYPE_ESSAY, context.getString(R.string.event_essay), COLOR_ESSAY),
- EventType(profileId, TYPE_PROJECT, context.getString(R.string.event_project), COLOR_PROJECT),
- EventType(profileId, TYPE_PT_MEETING, context.getString(R.string.event_pt_meeting), COLOR_PT_MEETING),
- EventType(profileId, TYPE_EXCURSION, context.getString(R.string.event_excursion), COLOR_EXCURSION),
- EventType(profileId, TYPE_READING, context.getString(R.string.event_reading), COLOR_READING),
- 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)
- )
+ var order = 100
+ val colorMap = EventType.getTypeColorMap()
+ val typeList = EventType.getTypeNameMap().map { (id, name) ->
+ EventType(
+ profileId = profileId,
+ id = id,
+ name = context.getString(name),
+ color = colorMap[id] ?: COLOR_DEFAULT,
+ order = order++,
+ source = SOURCE_DEFAULT
+ )
+ }
addAll(typeList)
return typeList
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Event.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Event.kt
index a3f44585..3e59cc17 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Event.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Event.kt
@@ -45,6 +45,7 @@ open class Event(
var addedDate: Long = System.currentTimeMillis()
) : Keepable() {
companion object {
+ const val TYPE_ELEARNING = -5L
const val TYPE_UNDEFINED = -2L
const val TYPE_HOMEWORK = -1L
const val TYPE_DEFAULT = 0L
@@ -57,7 +58,7 @@ open class Event(
const val TYPE_READING = 7L
const val TYPE_CLASS_EVENT = 8L
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_DEFAULT = 0xffffc107.toInt()
const val COLOR_EXAM = 0xfff44336.toInt()
@@ -69,7 +70,6 @@ open class Event(
const val COLOR_READING = 0xFFFFEB3B.toInt()
const val COLOR_CLASS_EVENT = 0xff388e3c.toInt()
const val COLOR_INFORMATION = 0xff039be5.toInt()
- const val COLOR_TEACHER_ABSENCE = 0xff039be5.toInt()
}
@ColumnInfo(name = "eventAddedManually")
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.java
deleted file mode 100644
index bf981e84..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.java
+++ /dev/null
@@ -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));
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.kt
new file mode 100644
index 00000000..7753b38a
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/EventType.kt
@@ -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
+ )
+ }
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/migration/Migration92.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/migration/Migration92.kt
new file mode 100644
index 00000000..4b36c0e9
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/migration/Migration92.kt
@@ -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)
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 31caf032..566be56b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1450,4 +1450,5 @@
Dodaj podpis przy przekazywaniu wiadomości
Treść podpisu
Ustawienia wiadomości
+ lekcja online