forked from github/szkolny
[App] Refactor getting profile config.
This commit is contained in:
parent
00e077d01f
commit
bfd2e9883a
@ -55,11 +55,9 @@ class Config(db: AppDb) : BaseConfig(db) {
|
|||||||
ConfigMigration(app, this)
|
ConfigMigration(app, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFor(profileId: Int): ProfileConfig {
|
operator fun get(profileId: Int): ProfileConfig {
|
||||||
return profileConfigs[profileId] ?: ProfileConfig(db, profileId, entries).also {
|
return profileConfigs[profileId] ?: ProfileConfig(db, profileId, entries).also {
|
||||||
profileConfigs[profileId] = it
|
profileConfigs[profileId] = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun forProfile() = getFor(App.profileId)
|
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,6 @@ class SzkolnyApi(val app: App) : CoroutineScope {
|
|||||||
val teams = app.db.teamDao().allNow
|
val teams = app.db.teamDao().allNow
|
||||||
|
|
||||||
val users = profiles.mapNotNull { profile ->
|
val users = profiles.mapNotNull { profile ->
|
||||||
val config = app.config.getFor(profile.id)
|
|
||||||
val user = ServerSyncRequest.User(
|
val user = ServerSyncRequest.User(
|
||||||
profile.userCode,
|
profile.userCode,
|
||||||
profile.studentNameLong,
|
profile.studentNameLong,
|
||||||
@ -207,9 +206,9 @@ class SzkolnyApi(val app: App) : CoroutineScope {
|
|||||||
teams.filter { it.profileId == profile.id }.map { it.code }
|
teams.filter { it.profileId == profile.id }.map { it.code }
|
||||||
)
|
)
|
||||||
val hash = user.toString().md5()
|
val hash = user.toString().md5()
|
||||||
if (hash == config.hash)
|
if (hash == profile.config.hash)
|
||||||
return@mapNotNull null
|
return@mapNotNull null
|
||||||
return@mapNotNull user to config
|
return@mapNotNull user to profile.config
|
||||||
}
|
}
|
||||||
|
|
||||||
val response = api.serverSync(ServerSyncRequest(
|
val response = api.serverSync(ServerSyncRequest(
|
||||||
|
@ -55,7 +55,7 @@ class SzkolnyTask(val app: App, val syncingProfiles: List<Profile>) : IApiTask(-
|
|||||||
notificationList
|
notificationList
|
||||||
.mapNotNull { it.profileId }
|
.mapNotNull { it.profileId }
|
||||||
.distinct()
|
.distinct()
|
||||||
.map { app.config.getFor(it).sync.notificationFilter }
|
.map { app.config[it].sync.notificationFilter }
|
||||||
.forEach { filter ->
|
.forEach { filter ->
|
||||||
filter.forEach { type ->
|
filter.forEach { type ->
|
||||||
notificationList.removeAll { it.type == type }
|
notificationList.removeAll { it.type == type }
|
||||||
|
@ -8,7 +8,9 @@ import android.content.Context
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
|
import androidx.room.Ignore
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.LoginType
|
import pl.szczodrzynski.edziennik.data.db.enums.LoginType
|
||||||
import pl.szczodrzynski.edziennik.ext.dateToSemester
|
import pl.szczodrzynski.edziennik.ext.dateToSemester
|
||||||
import pl.szczodrzynski.edziennik.ext.getDrawable
|
import pl.szczodrzynski.edziennik.ext.getDrawable
|
||||||
@ -88,6 +90,9 @@ open class Profile(
|
|||||||
val canShare
|
val canShare
|
||||||
get() = registration == REGISTRATION_ENABLED && !archived
|
get() = registration == REGISTRATION_ENABLED && !archived
|
||||||
|
|
||||||
|
@delegate:Ignore
|
||||||
|
val config by lazy { App.config[this.id] }
|
||||||
|
|
||||||
override fun getImageDrawable(context: Context) = this.getDrawable(context)
|
override fun getImageDrawable(context: Context) = this.getDrawable(context)
|
||||||
override fun getImageHolder(context: Context) = this.getHolder()
|
override fun getImageHolder(context: Context) = this.getHolder()
|
||||||
override fun applyImageTo(imageView: ImageView) {
|
override fun applyImageTo(imageView: ImageView) {
|
||||||
|
@ -176,7 +176,7 @@ class SzkolnyAppFirebase(val app: App, val profiles: List<Profile>, val message:
|
|||||||
)
|
)
|
||||||
|
|
||||||
val type = if (event.isHomework) NotificationType.SHARED_HOMEWORK else NotificationType.SHARED_EVENT
|
val type = if (event.isHomework) NotificationType.SHARED_HOMEWORK else NotificationType.SHARED_EVENT
|
||||||
val notificationFilter = app.config.getFor(event.profileId).sync.notificationFilter
|
val notificationFilter = app.config[event.profileId].sync.notificationFilter
|
||||||
|
|
||||||
if (!notificationFilter.contains(type) && event.sharedBy != "self" && event.date >= Date.getToday()) {
|
if (!notificationFilter.contains(type) && event.sharedBy != "self" && event.date >= Date.getToday()) {
|
||||||
val notification = Notification(
|
val notification = Notification(
|
||||||
@ -211,7 +211,7 @@ class SzkolnyAppFirebase(val app: App, val profiles: List<Profile>, val message:
|
|||||||
val profile = profiles.firstOrNull { it.id == team.profileId } ?: return@forEach
|
val profile = profiles.firstOrNull { it.id == team.profileId } ?: return@forEach
|
||||||
if (!profile.canShare)
|
if (!profile.canShare)
|
||||||
return@forEach
|
return@forEach
|
||||||
val notificationFilter = app.config.getFor(team.profileId).sync.notificationFilter
|
val notificationFilter = app.config[team.profileId].sync.notificationFilter
|
||||||
|
|
||||||
if (!notificationFilter.contains(NotificationType.REMOVED_SHARED_EVENT)) {
|
if (!notificationFilter.contains(NotificationType.REMOVED_SHARED_EVENT)) {
|
||||||
val notification = Notification(
|
val notification = Notification(
|
||||||
@ -265,7 +265,7 @@ class SzkolnyAppFirebase(val app: App, val profiles: List<Profile>, val message:
|
|||||||
return@forEach
|
return@forEach
|
||||||
|
|
||||||
val type = NotificationType.SHARED_NOTE
|
val type = NotificationType.SHARED_NOTE
|
||||||
val notificationFilter = app.config.getFor(note.profileId).sync.notificationFilter
|
val notificationFilter = app.config[note.profileId].sync.notificationFilter
|
||||||
|
|
||||||
if (!notificationFilter.contains(type) && note.sharedBy != "self") {
|
if (!notificationFilter.contains(type) && note.sharedBy != "self") {
|
||||||
val notification = Notification(
|
val notification = Notification(
|
||||||
|
@ -17,7 +17,12 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria
|
|||||||
import com.mikepenz.iconics.utils.colorInt
|
import com.mikepenz.iconics.utils.colorInt
|
||||||
import com.mikepenz.iconics.utils.sizeDp
|
import com.mikepenz.iconics.utils.sizeDp
|
||||||
import eu.szkolny.font.SzkolnyFont
|
import eu.szkolny.font.SzkolnyFont
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.MainActivity
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
@ -53,7 +58,7 @@ class AgendaFragment : Fragment(), CoroutineScope {
|
|||||||
if (getActivity() == null || context == null) return null
|
if (getActivity() == null || context == null) return null
|
||||||
activity = getActivity() as MainActivity
|
activity = getActivity() as MainActivity
|
||||||
context?.theme?.applyStyle(Themes.appTheme, true)
|
context?.theme?.applyStyle(Themes.appTheme, true)
|
||||||
type = app.config.forProfile().ui.agendaViewType
|
type = app.profile.config.ui.agendaViewType
|
||||||
b = when (type) {
|
b = when (type) {
|
||||||
Profile.AGENDA_DEFAULT -> FragmentAgendaDefaultBinding.inflate(inflater, container, false)
|
Profile.AGENDA_DEFAULT -> FragmentAgendaDefaultBinding.inflate(inflater, container, false)
|
||||||
Profile.AGENDA_CALENDAR -> FragmentAgendaCalendarBinding.inflate(inflater, container, false)
|
Profile.AGENDA_CALENDAR -> FragmentAgendaCalendarBinding.inflate(inflater, container, false)
|
||||||
@ -92,7 +97,7 @@ class AgendaFragment : Fragment(), CoroutineScope {
|
|||||||
activity.bottomSheet.close()
|
activity.bottomSheet.close()
|
||||||
type =
|
type =
|
||||||
if (type == Profile.AGENDA_DEFAULT) Profile.AGENDA_CALENDAR else Profile.AGENDA_DEFAULT
|
if (type == Profile.AGENDA_DEFAULT) Profile.AGENDA_CALENDAR else Profile.AGENDA_DEFAULT
|
||||||
app.config.forProfile().ui.agendaViewType = type
|
app.profile.config.ui.agendaViewType = type
|
||||||
activity.reloadTarget()
|
activity.reloadTarget()
|
||||||
},
|
},
|
||||||
BottomSheetSeparatorItem(true),
|
BottomSheetSeparatorItem(true),
|
||||||
|
@ -16,7 +16,12 @@ import com.github.tibolte.agendacalendarview.agenda.AgendaAdapter
|
|||||||
import com.github.tibolte.agendacalendarview.models.BaseCalendarEvent
|
import com.github.tibolte.agendacalendarview.models.BaseCalendarEvent
|
||||||
import com.github.tibolte.agendacalendarview.models.CalendarEvent
|
import com.github.tibolte.agendacalendarview.models.CalendarEvent
|
||||||
import com.github.tibolte.agendacalendarview.models.IDayItem
|
import com.github.tibolte.agendacalendarview.models.IDayItem
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.MainActivity
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
@ -49,7 +54,6 @@ class AgendaFragmentDefault(
|
|||||||
private val unreadDates = mutableSetOf<Int>()
|
private val unreadDates = mutableSetOf<Int>()
|
||||||
private val events = mutableListOf<CalendarEvent>()
|
private val events = mutableListOf<CalendarEvent>()
|
||||||
private var isInitialized = false
|
private var isInitialized = false
|
||||||
private val profileConfig by lazy { app.config.forProfile().ui }
|
|
||||||
|
|
||||||
private val listView
|
private val listView
|
||||||
get() = b.agendaDefaultView.agendaView.agendaListView
|
get() = b.agendaDefaultView.agendaView.agendaListView
|
||||||
@ -107,10 +111,10 @@ class AgendaFragmentDefault(
|
|||||||
isInitialized = false
|
isInitialized = false
|
||||||
|
|
||||||
withContext(Dispatchers.Default) {
|
withContext(Dispatchers.Default) {
|
||||||
if (profileConfig.agendaLessonChanges)
|
if (app.profile.config.ui.agendaLessonChanges)
|
||||||
addLessonChanges(events)
|
addLessonChanges(events)
|
||||||
|
|
||||||
if (profileConfig.agendaTeacherAbsence)
|
if (app.profile.config.ui.agendaTeacherAbsence)
|
||||||
addTeacherAbsence(events)
|
addTeacherAbsence(events)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +131,7 @@ class AgendaFragmentDefault(
|
|||||||
val dateStart = app.profile.dateSemester1Start.asCalendar
|
val dateStart = app.profile.dateSemester1Start.asCalendar
|
||||||
val dateEnd = app.profile.dateYearEnd.asCalendar
|
val dateEnd = app.profile.dateYearEnd.asCalendar
|
||||||
|
|
||||||
val isCompactMode = profileConfig.agendaCompactMode
|
val isCompactMode = app.profile.config.ui.agendaCompactMode
|
||||||
|
|
||||||
b.agendaDefaultView.init(
|
b.agendaDefaultView.init(
|
||||||
events,
|
events,
|
||||||
@ -247,7 +251,7 @@ class AgendaFragmentDefault(
|
|||||||
) {
|
) {
|
||||||
events.removeAll { it is AgendaEvent || it is AgendaEventGroup }
|
events.removeAll { it is AgendaEvent || it is AgendaEventGroup }
|
||||||
|
|
||||||
if (!profileConfig.agendaGroupByType) {
|
if (!app.profile.config.ui.agendaGroupByType) {
|
||||||
events += eventList.map {
|
events += eventList.map {
|
||||||
if (!it.seen)
|
if (!it.seen)
|
||||||
unreadDates.add(it.date.value)
|
unreadDates.add(it.date.value)
|
||||||
|
@ -18,7 +18,6 @@ import kotlinx.coroutines.Job
|
|||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.MainActivity
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
|
import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
|
||||||
import pl.szczodrzynski.edziennik.databinding.AttendanceFragmentBinding
|
import pl.szczodrzynski.edziennik.databinding.AttendanceFragmentBinding
|
||||||
import pl.szczodrzynski.edziennik.ext.Bundle
|
import pl.szczodrzynski.edziennik.ext.Bundle
|
||||||
@ -83,7 +82,7 @@ class AttendanceFragment : Fragment(), CoroutineScope {
|
|||||||
activity.gainAttention()
|
activity.gainAttention()
|
||||||
|
|
||||||
if (pageSelection == 1)
|
if (pageSelection == 1)
|
||||||
pageSelection = app.config.forProfile().attendance.attendancePageSelection
|
pageSelection = app.profile.config.attendance.attendancePageSelection
|
||||||
|
|
||||||
val pagerAdapter = FragmentLazyPagerAdapter(
|
val pagerAdapter = FragmentLazyPagerAdapter(
|
||||||
parentFragmentManager,
|
parentFragmentManager,
|
||||||
@ -114,7 +113,7 @@ class AttendanceFragment : Fragment(), CoroutineScope {
|
|||||||
currentItem = pageSelection
|
currentItem = pageSelection
|
||||||
addOnPageSelectedListener {
|
addOnPageSelectedListener {
|
||||||
pageSelection = it
|
pageSelection = it
|
||||||
app.config.forProfile().attendance.attendancePageSelection = it
|
app.profile.config.attendance.attendancePageSelection = it
|
||||||
}
|
}
|
||||||
b.tabLayout.setupWithViewPager(this)
|
b.tabLayout.setupWithViewPager(this)
|
||||||
}
|
}
|
||||||
|
@ -129,8 +129,8 @@ class AttendanceListFragment : LazyFragment(), CoroutineScope {
|
|||||||
if (attendance.isEmpty())
|
if (attendance.isEmpty())
|
||||||
return mutableListOf()
|
return mutableListOf()
|
||||||
|
|
||||||
val groupConsecutiveDays = app.config.forProfile().attendance.groupConsecutiveDays
|
val groupConsecutiveDays = app.profile.config.attendance.groupConsecutiveDays
|
||||||
val showPresenceInMonth = app.config.forProfile().attendance.showPresenceInMonth
|
val showPresenceInMonth = app.profile.config.attendance.showPresenceInMonth
|
||||||
|
|
||||||
if (viewType == AttendanceFragment.VIEW_DAYS) {
|
if (viewType == AttendanceFragment.VIEW_DAYS) {
|
||||||
val items = attendance
|
val items = attendance
|
||||||
|
@ -12,11 +12,16 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.gson.*
|
import com.google.gson.JsonArray
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import com.google.gson.JsonParser
|
||||||
|
import com.google.gson.JsonPrimitive
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.App
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.databinding.TemplateListPageFragmentBinding
|
import pl.szczodrzynski.edziennik.databinding.TemplateListPageFragmentBinding
|
||||||
import pl.szczodrzynski.edziennik.ext.*
|
import pl.szczodrzynski.edziennik.ext.*
|
||||||
@ -66,7 +71,7 @@ class LabProfileFragment : LazyFragment(), CoroutineScope {
|
|||||||
"LoginStore" -> loginStore
|
"LoginStore" -> loginStore
|
||||||
"LoginStore / data" -> loginStore?.data ?: JsonObject()
|
"LoginStore / data" -> loginStore?.data ?: JsonObject()
|
||||||
"Config" -> app.config.values
|
"Config" -> app.config.values
|
||||||
"Config (profile)" -> app.config.forProfile().values
|
"Config (profile)" -> app.profile.config.values
|
||||||
else -> when (obj) {
|
else -> when (obj) {
|
||||||
is JsonObject -> (obj as JsonObject).get(el)
|
is JsonObject -> (obj as JsonObject).get(el)
|
||||||
is JsonArray -> (obj as JsonArray).get(el.toInt())
|
is JsonArray -> (obj as JsonArray).get(el.toInt())
|
||||||
@ -176,7 +181,7 @@ class LabProfileFragment : LazyFragment(), CoroutineScope {
|
|||||||
json.add("LoginStore", app.gson.toJsonTree(loginStore))
|
json.add("LoginStore", app.gson.toJsonTree(loginStore))
|
||||||
json.add("LoginStore / data", loginStore?.data ?: JsonObject())
|
json.add("LoginStore / data", loginStore?.data ?: JsonObject())
|
||||||
json.add("Config", JsonParser.parseString(app.gson.toJson(app.config.values.toSortedMap())))
|
json.add("Config", JsonParser.parseString(app.gson.toJson(app.config.values.toSortedMap())))
|
||||||
json.add("Config (profile)", JsonParser.parseString(app.gson.toJson(app.config.forProfile().values.toSortedMap())))
|
json.add("Config (profile)", JsonParser.parseString(app.gson.toJson(app.profile.config.values.toSortedMap())))
|
||||||
}
|
}
|
||||||
adapter.items = LabJsonAdapter.expand(json, 0)
|
adapter.items = LabJsonAdapter.expand(json, 0)
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
@ -6,13 +6,11 @@ package pl.szczodrzynski.edziennik.ui.dialogs.settings
|
|||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.*
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.databinding.DialogConfigAgendaBinding
|
import pl.szczodrzynski.edziennik.databinding.DialogConfigAgendaBinding
|
||||||
import pl.szczodrzynski.edziennik.ext.onChange
|
import pl.szczodrzynski.edziennik.ext.onChange
|
||||||
import pl.szczodrzynski.edziennik.ui.dialogs.base.ConfigDialog
|
import pl.szczodrzynski.edziennik.ui.dialogs.base.ConfigDialog
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class AgendaConfigDialog(
|
class AgendaConfigDialog(
|
||||||
activity: AppCompatActivity,
|
activity: AppCompatActivity,
|
||||||
@ -32,11 +30,9 @@ class AgendaConfigDialog(
|
|||||||
override fun inflate(layoutInflater: LayoutInflater) =
|
override fun inflate(layoutInflater: LayoutInflater) =
|
||||||
DialogConfigAgendaBinding.inflate(layoutInflater)
|
DialogConfigAgendaBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.forProfile() }
|
|
||||||
|
|
||||||
override suspend fun loadConfig() {
|
override suspend fun loadConfig() {
|
||||||
b.config = profileConfig
|
b.config = app.profile.config
|
||||||
b.isAgendaMode = profileConfig.ui.agendaViewType == Profile.AGENDA_DEFAULT
|
b.isAgendaMode = app.profile.config.ui.agendaViewType == Profile.AGENDA_DEFAULT
|
||||||
|
|
||||||
var calledFromListener = false
|
var calledFromListener = false
|
||||||
b.eventSharingEnabled.isChecked = app.profile.canShare
|
b.eventSharingEnabled.isChecked = app.profile.canShare
|
||||||
|
@ -29,23 +29,21 @@ class AttendanceConfigDialog(
|
|||||||
override fun inflate(layoutInflater: LayoutInflater) =
|
override fun inflate(layoutInflater: LayoutInflater) =
|
||||||
AttendanceConfigDialogBinding.inflate(layoutInflater)
|
AttendanceConfigDialogBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.getFor(app.profileId).attendance }
|
|
||||||
|
|
||||||
override suspend fun loadConfig() {
|
override suspend fun loadConfig() {
|
||||||
b.useSymbols.isChecked = profileConfig.useSymbols
|
b.useSymbols.isChecked = app.profile.config.attendance.useSymbols
|
||||||
b.groupConsecutiveDays.isChecked = profileConfig.groupConsecutiveDays
|
b.groupConsecutiveDays.isChecked = app.profile.config.attendance.groupConsecutiveDays
|
||||||
b.showPresenceInMonth.isChecked = profileConfig.showPresenceInMonth
|
b.showPresenceInMonth.isChecked = app.profile.config.attendance.showPresenceInMonth
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
b.useSymbols.onChange { _, isChecked ->
|
b.useSymbols.onChange { _, isChecked ->
|
||||||
profileConfig.useSymbols = isChecked
|
app.profile.config.attendance.useSymbols = isChecked
|
||||||
}
|
}
|
||||||
b.groupConsecutiveDays.onChange { _, isChecked ->
|
b.groupConsecutiveDays.onChange { _, isChecked ->
|
||||||
profileConfig.groupConsecutiveDays = isChecked
|
app.profile.config.attendance.groupConsecutiveDays = isChecked
|
||||||
}
|
}
|
||||||
b.showPresenceInMonth.onChange { _, isChecked ->
|
b.showPresenceInMonth.onChange { _, isChecked ->
|
||||||
profileConfig.showPresenceInMonth = isChecked
|
app.profile.config.attendance.showPresenceInMonth = isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,17 +45,15 @@ class GradesConfigDialog(
|
|||||||
override fun inflate(layoutInflater: LayoutInflater) =
|
override fun inflate(layoutInflater: LayoutInflater) =
|
||||||
DialogConfigGradesBinding.inflate(layoutInflater)
|
DialogConfigGradesBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.getFor(app.profileId).grades }
|
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
override suspend fun loadConfig() {
|
override suspend fun loadConfig() {
|
||||||
b.customPlusCheckBox.isChecked = profileConfig.plusValue != null
|
b.customPlusCheckBox.isChecked = app.profile.config.grades.plusValue != null
|
||||||
b.customPlusValue.isVisible = b.customPlusCheckBox.isChecked
|
b.customPlusValue.isVisible = b.customPlusCheckBox.isChecked
|
||||||
b.customMinusCheckBox.isChecked = profileConfig.minusValue != null
|
b.customMinusCheckBox.isChecked = app.profile.config.grades.minusValue != null
|
||||||
b.customMinusValue.isVisible = b.customMinusCheckBox.isChecked
|
b.customMinusValue.isVisible = b.customMinusCheckBox.isChecked
|
||||||
|
|
||||||
b.customPlusValue.progress = profileConfig.plusValue ?: 0.5f
|
b.customPlusValue.progress = app.profile.config.grades.plusValue ?: 0.5f
|
||||||
b.customMinusValue.progress = profileConfig.minusValue ?: 0.25f
|
b.customMinusValue.progress = app.profile.config.grades.minusValue ?: 0.25f
|
||||||
|
|
||||||
when (config.orderBy) {
|
when (config.orderBy) {
|
||||||
ORDER_BY_DATE_DESC -> b.sortGradesByDateRadio
|
ORDER_BY_DATE_DESC -> b.sortGradesByDateRadio
|
||||||
@ -63,13 +61,13 @@ class GradesConfigDialog(
|
|||||||
else -> null
|
else -> null
|
||||||
}?.isChecked = true
|
}?.isChecked = true
|
||||||
|
|
||||||
when (profileConfig.colorMode) {
|
when (app.profile.config.grades.colorMode) {
|
||||||
COLOR_MODE_DEFAULT -> b.gradeColorFromERegister
|
COLOR_MODE_DEFAULT -> b.gradeColorFromERegister
|
||||||
COLOR_MODE_WEIGHTED -> b.gradeColorByValue
|
COLOR_MODE_WEIGHTED -> b.gradeColorByValue
|
||||||
else -> null
|
else -> null
|
||||||
}?.isChecked = true
|
}?.isChecked = true
|
||||||
|
|
||||||
when (profileConfig.yearAverageMode) {
|
when (app.profile.config.grades.yearAverageMode) {
|
||||||
YEAR_ALL_GRADES -> b.gradeAverageMode4
|
YEAR_ALL_GRADES -> b.gradeAverageMode4
|
||||||
YEAR_1_AVG_2_AVG -> b.gradeAverageMode0
|
YEAR_1_AVG_2_AVG -> b.gradeAverageMode0
|
||||||
YEAR_1_SEM_2_AVG -> b.gradeAverageMode1
|
YEAR_1_SEM_2_AVG -> b.gradeAverageMode1
|
||||||
@ -79,21 +77,21 @@ class GradesConfigDialog(
|
|||||||
}?.isChecked = true
|
}?.isChecked = true
|
||||||
|
|
||||||
b.dontCountGrades.isChecked =
|
b.dontCountGrades.isChecked =
|
||||||
profileConfig.dontCountEnabled && profileConfig.dontCountGrades.isNotEmpty()
|
app.profile.config.grades.dontCountEnabled && app.profile.config.grades.dontCountGrades.isNotEmpty()
|
||||||
b.hideImproved.isChecked = profileConfig.hideImproved
|
b.hideImproved.isChecked = app.profile.config.grades.hideImproved
|
||||||
b.averageWithoutWeight.isChecked = profileConfig.averageWithoutWeight
|
b.averageWithoutWeight.isChecked = app.profile.config.grades.averageWithoutWeight
|
||||||
|
|
||||||
if (profileConfig.dontCountGrades.isEmpty()) {
|
if (app.profile.config.grades.dontCountGrades.isEmpty()) {
|
||||||
b.dontCountGradesText.setText("nb, 0, bz, bd")
|
b.dontCountGradesText.setText("nb, 0, bz, bd")
|
||||||
} else {
|
} else {
|
||||||
b.dontCountGradesText.setText(profileConfig.dontCountGrades.join(", "))
|
b.dontCountGradesText.setText(app.profile.config.grades.dontCountGrades.join(", "))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun saveConfig() {
|
override suspend fun saveConfig() {
|
||||||
profileConfig.plusValue =
|
app.profile.config.grades.plusValue =
|
||||||
if (b.customPlusCheckBox.isChecked) b.customPlusValue.progress else null
|
if (b.customPlusCheckBox.isChecked) b.customPlusValue.progress else null
|
||||||
profileConfig.minusValue =
|
app.profile.config.grades.minusValue =
|
||||||
if (b.customMinusCheckBox.isChecked) b.customMinusValue.progress else null
|
if (b.customMinusCheckBox.isChecked) b.customMinusValue.progress else null
|
||||||
|
|
||||||
b.dontCountGradesText.setText(
|
b.dontCountGradesText.setText(
|
||||||
@ -103,8 +101,8 @@ class GradesConfigDialog(
|
|||||||
?.lowercase()
|
?.lowercase()
|
||||||
?.replace(", ", ",")
|
?.replace(", ", ",")
|
||||||
)
|
)
|
||||||
profileConfig.dontCountEnabled = b.dontCountGrades.isChecked
|
app.profile.config.grades.dontCountEnabled = b.dontCountGrades.isChecked
|
||||||
profileConfig.dontCountGrades = b.dontCountGradesText.text
|
app.profile.config.grades.dontCountGrades = b.dontCountGradesText.text
|
||||||
?.split(",")
|
?.split(",")
|
||||||
?.map { it.trim() }
|
?.map { it.trim() }
|
||||||
?: listOf()
|
?: listOf()
|
||||||
@ -121,39 +119,39 @@ class GradesConfigDialog(
|
|||||||
// who the hell named those methods
|
// who the hell named those methods
|
||||||
// THIS SHIT DOES NOT EVEN WORK
|
// THIS SHIT DOES NOT EVEN WORK
|
||||||
b.customPlusValue.doOnStopTrackingTouch {
|
b.customPlusValue.doOnStopTrackingTouch {
|
||||||
profileConfig.plusValue = it.progress
|
app.profile.config.grades.plusValue = it.progress
|
||||||
}
|
}
|
||||||
b.customMinusValue.doOnStopTrackingTouch {
|
b.customMinusValue.doOnStopTrackingTouch {
|
||||||
profileConfig.minusValue = it.progress
|
app.profile.config.grades.minusValue = it.progress
|
||||||
}
|
}
|
||||||
|
|
||||||
b.sortGradesByDateRadio.setOnSelectedListener { config.orderBy = ORDER_BY_DATE_DESC }
|
b.sortGradesByDateRadio.setOnSelectedListener { config.orderBy = ORDER_BY_DATE_DESC }
|
||||||
b.sortGradesBySubjectRadio.setOnSelectedListener { config.orderBy = ORDER_BY_SUBJECT_ASC }
|
b.sortGradesBySubjectRadio.setOnSelectedListener { config.orderBy = ORDER_BY_SUBJECT_ASC }
|
||||||
|
|
||||||
b.gradeColorFromERegister.setOnSelectedListener {
|
b.gradeColorFromERegister.setOnSelectedListener {
|
||||||
profileConfig.colorMode = COLOR_MODE_DEFAULT
|
app.profile.config.grades.colorMode = COLOR_MODE_DEFAULT
|
||||||
}
|
}
|
||||||
b.gradeColorByValue.setOnSelectedListener { profileConfig.colorMode = COLOR_MODE_WEIGHTED }
|
b.gradeColorByValue.setOnSelectedListener { app.profile.config.grades.colorMode = COLOR_MODE_WEIGHTED }
|
||||||
|
|
||||||
b.gradeAverageMode4.setOnSelectedListener {
|
b.gradeAverageMode4.setOnSelectedListener {
|
||||||
profileConfig.yearAverageMode = YEAR_ALL_GRADES
|
app.profile.config.grades.yearAverageMode = YEAR_ALL_GRADES
|
||||||
}
|
}
|
||||||
b.gradeAverageMode0.setOnSelectedListener {
|
b.gradeAverageMode0.setOnSelectedListener {
|
||||||
profileConfig.yearAverageMode = YEAR_1_AVG_2_AVG
|
app.profile.config.grades.yearAverageMode = YEAR_1_AVG_2_AVG
|
||||||
}
|
}
|
||||||
b.gradeAverageMode1.setOnSelectedListener {
|
b.gradeAverageMode1.setOnSelectedListener {
|
||||||
profileConfig.yearAverageMode = YEAR_1_SEM_2_AVG
|
app.profile.config.grades.yearAverageMode = YEAR_1_SEM_2_AVG
|
||||||
}
|
}
|
||||||
b.gradeAverageMode2.setOnSelectedListener {
|
b.gradeAverageMode2.setOnSelectedListener {
|
||||||
profileConfig.yearAverageMode = YEAR_1_AVG_2_SEM
|
app.profile.config.grades.yearAverageMode = YEAR_1_AVG_2_SEM
|
||||||
}
|
}
|
||||||
b.gradeAverageMode3.setOnSelectedListener {
|
b.gradeAverageMode3.setOnSelectedListener {
|
||||||
profileConfig.yearAverageMode = YEAR_1_SEM_2_SEM
|
app.profile.config.grades.yearAverageMode = YEAR_1_SEM_2_SEM
|
||||||
}
|
}
|
||||||
|
|
||||||
b.hideImproved.onChange { _, isChecked -> profileConfig.hideImproved = isChecked }
|
b.hideImproved.onChange { _, isChecked -> app.profile.config.grades.hideImproved = isChecked }
|
||||||
b.averageWithoutWeight.onChange { _, isChecked ->
|
b.averageWithoutWeight.onChange { _, isChecked ->
|
||||||
profileConfig.averageWithoutWeight = isChecked
|
app.profile.config.grades.averageWithoutWeight = isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
b.averageWithoutWeightHelp.onClick {
|
b.averageWithoutWeightHelp.onClick {
|
||||||
|
@ -28,13 +28,11 @@ class MessagesConfigDialog(
|
|||||||
override fun inflate(layoutInflater: LayoutInflater) =
|
override fun inflate(layoutInflater: LayoutInflater) =
|
||||||
MessagesConfigDialogBinding.inflate(layoutInflater)
|
MessagesConfigDialogBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.getFor(app.profileId).ui }
|
|
||||||
|
|
||||||
override suspend fun loadConfig() {
|
override suspend fun loadConfig() {
|
||||||
b.config = profileConfig
|
b.config = app.profile.config.ui
|
||||||
|
|
||||||
b.greetingText.setText(
|
b.greetingText.setText(
|
||||||
profileConfig.messagesGreetingText
|
app.profile.config.ui.messagesGreetingText
|
||||||
?: "\n\nZ poważaniem\n${app.profile.accountOwnerName}"
|
?: "\n\nZ poważaniem\n${app.profile.accountOwnerName}"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -42,8 +40,8 @@ class MessagesConfigDialog(
|
|||||||
override suspend fun saveConfig() {
|
override suspend fun saveConfig() {
|
||||||
val greetingText = b.greetingText.text?.toString()?.trim()
|
val greetingText = b.greetingText.text?.toString()?.trim()
|
||||||
if (greetingText.isNullOrEmpty())
|
if (greetingText.isNullOrEmpty())
|
||||||
profileConfig.messagesGreetingText = null
|
app.profile.config.ui.messagesGreetingText = null
|
||||||
else
|
else
|
||||||
profileConfig.messagesGreetingText = "\n\n$greetingText"
|
app.profile.config.ui.messagesGreetingText = "\n\n$greetingText"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class NotificationFilterDialog(
|
|||||||
.associateBy { it.titleRes.resolveString(activity) as CharSequence }
|
.associateBy { it.titleRes.resolveString(activity) as CharSequence }
|
||||||
|
|
||||||
override fun getDefaultSelectedItems() = NotificationType.values()
|
override fun getDefaultSelectedItems() = NotificationType.values()
|
||||||
.filter { it.enabledByDefault != null && it !in app.config.forProfile().sync.notificationFilter }
|
.filter { it.enabledByDefault != null && it !in app.profile.config.sync.notificationFilter }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|
||||||
override suspend fun onShow() = Unit
|
override suspend fun onShow() = Unit
|
||||||
@ -47,7 +47,7 @@ class NotificationFilterDialog(
|
|||||||
.setTitle(R.string.are_you_sure)
|
.setTitle(R.string.are_you_sure)
|
||||||
.setMessage(R.string.notification_filter_warning)
|
.setMessage(R.string.notification_filter_warning)
|
||||||
.setPositiveButton(R.string.ok) { _, _ ->
|
.setPositiveButton(R.string.ok) { _, _ ->
|
||||||
app.config.forProfile().sync.notificationFilter = disabledTypes
|
app.profile.config.sync.notificationFilter = disabledTypes
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
@ -55,7 +55,7 @@ class NotificationFilterDialog(
|
|||||||
return NO_DISMISS
|
return NO_DISMISS
|
||||||
}
|
}
|
||||||
|
|
||||||
app.config.forProfile().sync.notificationFilter = disabledTypes
|
app.profile.config.sync.notificationFilter = disabledTypes
|
||||||
|
|
||||||
return DISMISS
|
return DISMISS
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,11 @@ package pl.szczodrzynski.edziennik.ui.dialogs.settings
|
|||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi
|
import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi
|
||||||
@ -117,7 +121,7 @@ class RegistrationConfigDialog(
|
|||||||
profile.registration = Profile.REGISTRATION_ENABLED
|
profile.registration = Profile.REGISTRATION_ENABLED
|
||||||
|
|
||||||
// force full registration of the user
|
// force full registration of the user
|
||||||
App.config.getFor(profile.id).hash = ""
|
profile.config.hash = ""
|
||||||
|
|
||||||
SzkolnyApi(app).runCatching(activity) {
|
SzkolnyApi(app).runCatching(activity) {
|
||||||
AppSync(app, mutableListOf(), listOf(profile), this).run(
|
AppSync(app, mutableListOf(), listOf(profile), this).run(
|
||||||
|
@ -30,14 +30,12 @@ class TimetableConfigDialog(
|
|||||||
override fun inflate(layoutInflater: LayoutInflater) =
|
override fun inflate(layoutInflater: LayoutInflater) =
|
||||||
TimetableConfigDialogBinding.inflate(layoutInflater)
|
TimetableConfigDialogBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.getFor(app.profileId).ui }
|
|
||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
b.features = app.profile.loginStoreType.features
|
b.features = app.profile.loginStoreType.features
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun loadConfig() {
|
override suspend fun loadConfig() {
|
||||||
b.config = profileConfig
|
b.config = app.profile.config.ui
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun saveConfig() {
|
override suspend fun saveConfig() {
|
||||||
|
@ -13,23 +13,33 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.jaredrummler.android.colorpicker.ColorPickerDialog
|
import com.jaredrummler.android.colorpicker.ColorPickerDialog
|
||||||
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
|
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import org.greenrobot.eventbus.Subscribe
|
import org.greenrobot.eventbus.Subscribe
|
||||||
import org.greenrobot.eventbus.ThreadMode
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.EdziennikTask
|
import pl.szczodrzynski.edziennik.data.api.edziennik.EdziennikTask
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskAllFinishedEvent
|
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskAllFinishedEvent
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskErrorEvent
|
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskErrorEvent
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskFinishedEvent
|
import pl.szczodrzynski.edziennik.data.api.events.ApiTaskFinishedEvent
|
||||||
import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi
|
import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.*
|
import pl.szczodrzynski.edziennik.data.db.entity.Event
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Subject
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
|
import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
|
import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
||||||
import pl.szczodrzynski.edziennik.databinding.DialogEventManualV2Binding
|
import pl.szczodrzynski.edziennik.databinding.DialogEventManualV2Binding
|
||||||
import pl.szczodrzynski.edziennik.ext.*
|
import pl.szczodrzynski.edziennik.ext.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.ext.getStudentData
|
||||||
|
import pl.szczodrzynski.edziennik.ext.onChange
|
||||||
|
import pl.szczodrzynski.edziennik.ext.onClick
|
||||||
|
import pl.szczodrzynski.edziennik.ext.setText
|
||||||
|
import pl.szczodrzynski.edziennik.ext.setTintColor
|
||||||
import pl.szczodrzynski.edziennik.ui.dialogs.base.BindingDialog
|
import pl.szczodrzynski.edziennik.ui.dialogs.base.BindingDialog
|
||||||
import pl.szczodrzynski.edziennik.ui.dialogs.settings.RegistrationConfigDialog
|
import pl.szczodrzynski.edziennik.ui.dialogs.settings.RegistrationConfigDialog
|
||||||
import pl.szczodrzynski.edziennik.ui.views.TimeDropdown.Companion.DISPLAY_LESSONS
|
import pl.szczodrzynski.edziennik.ui.views.TimeDropdown.Companion.DISPLAY_LESSONS
|
||||||
@ -80,8 +90,6 @@ class EventManualDialog(
|
|||||||
SzkolnyApi(app)
|
SzkolnyApi(app)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.forProfile() }
|
|
||||||
|
|
||||||
private var enqueuedWeekDialog: AlertDialog? = null
|
private var enqueuedWeekDialog: AlertDialog? = null
|
||||||
private var enqueuedWeekStart = Date.getToday()
|
private var enqueuedWeekStart = Date.getToday()
|
||||||
|
|
||||||
@ -137,7 +145,7 @@ class EventManualDialog(
|
|||||||
|
|
||||||
loadLists()
|
loadLists()
|
||||||
|
|
||||||
val shareByDefault = profileConfig.shareByDefault && profile.canShare
|
val shareByDefault = app.profile.config.shareByDefault && profile.canShare
|
||||||
|
|
||||||
b.shareSwitch.isChecked = editingShared || editingEvent == null && shareByDefault
|
b.shareSwitch.isChecked = editingShared || editingEvent == null && shareByDefault
|
||||||
b.shareSwitch.isEnabled = !editingShared || editingOwn
|
b.shareSwitch.isEnabled = !editingShared || editingOwn
|
||||||
|
@ -81,7 +81,7 @@ class GradesListFragment : Fragment(), CoroutineScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val items = when {
|
val items = when {
|
||||||
app.config.forProfile().grades.hideSticksFromOld && App.devMode -> grades.filter { it.value != 1.0f }
|
app.profile.config.grades.hideSticksFromOld && App.devMode -> grades.filter { it.value != 1.0f }
|
||||||
else -> grades
|
else -> grades
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,9 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.App
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade
|
||||||
import pl.szczodrzynski.edziennik.databinding.FragmentGradesEditorBinding
|
import pl.szczodrzynski.edziennik.databinding.FragmentGradesEditorBinding
|
||||||
import pl.szczodrzynski.edziennik.ext.getFloat
|
import pl.szczodrzynski.edziennik.ext.getFloat
|
||||||
@ -37,7 +39,7 @@ class GradesEditorFragment : Fragment() {
|
|||||||
private val navController: NavController by lazy { Navigation.findNavController(b.root) }
|
private val navController: NavController by lazy { Navigation.findNavController(b.root) }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private val config by lazy { app.config.getFor(App.profileId).grades }
|
private val config by lazy { app.profile.config.grades }
|
||||||
|
|
||||||
private var subjectId: Long = -1
|
private var subjectId: Long = -1
|
||||||
private var semester: Int = 1
|
private var semester: Int = 1
|
||||||
|
@ -37,18 +37,17 @@ class HomeConfigDialog(
|
|||||||
).mapKeys { (resId, _) -> activity.getString(resId) }
|
).mapKeys { (resId, _) -> activity.getString(resId) }
|
||||||
|
|
||||||
override fun getDefaultSelectedItems() =
|
override fun getDefaultSelectedItems() =
|
||||||
profileConfig.homeCards
|
app.profile.config.ui.homeCards
|
||||||
.filter { it.profileId == App.profileId }
|
.filter { it.profileId == App.profileId }
|
||||||
.map { it.cardId }
|
.map { it.cardId }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|
||||||
override suspend fun onShow() = Unit
|
override suspend fun onShow() = Unit
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.getFor(app.profileId).ui }
|
|
||||||
private var configChanged = false
|
private var configChanged = false
|
||||||
|
|
||||||
override suspend fun onPositiveClick(): Boolean {
|
override suspend fun onPositiveClick(): Boolean {
|
||||||
val homeCards = profileConfig.homeCards.toMutableList()
|
val homeCards = app.profile.config.ui.homeCards.toMutableList()
|
||||||
homeCards.removeAll { it.profileId == App.profileId }
|
homeCards.removeAll { it.profileId == App.profileId }
|
||||||
homeCards += getMultiSelection().mapNotNull {
|
homeCards += getMultiSelection().mapNotNull {
|
||||||
HomeCardModel(
|
HomeCardModel(
|
||||||
@ -56,7 +55,7 @@ class HomeConfigDialog(
|
|||||||
cardId = it as? Int ?: return@mapNotNull null
|
cardId = it as? Int ?: return@mapNotNull null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
profileConfig.homeCards = homeCards
|
app.profile.config.ui.homeCards = homeCards
|
||||||
return DISMISS
|
return DISMISS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,18 +50,18 @@ class HomeFragment : Fragment(), CoroutineScope {
|
|||||||
cardAdapter.items[toPosition] = fromCard
|
cardAdapter.items[toPosition] = fromCard
|
||||||
cardAdapter.notifyItemMoved(fromPosition, toPosition)
|
cardAdapter.notifyItemMoved(fromPosition, toPosition)
|
||||||
|
|
||||||
val homeCards = App.config.forProfile().ui.homeCards.toMutableList()
|
val homeCards = App.profile.config.ui.homeCards.toMutableList()
|
||||||
val fromIndex = homeCards.indexOfFirst { it.cardId == fromCard.id }
|
val fromIndex = homeCards.indexOfFirst { it.cardId == fromCard.id }
|
||||||
val toIndex = homeCards.indexOfFirst { it.cardId == toCard.id }
|
val toIndex = homeCards.indexOfFirst { it.cardId == toCard.id }
|
||||||
val fromPair = homeCards[fromIndex]
|
val fromPair = homeCards[fromIndex]
|
||||||
homeCards[fromIndex] = homeCards[toIndex]
|
homeCards[fromIndex] = homeCards[toIndex]
|
||||||
homeCards[toIndex] = fromPair
|
homeCards[toIndex] = fromPair
|
||||||
App.config.forProfile().ui.homeCards = homeCards
|
App.profile.config.ui.homeCards = homeCards
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeCard(position: Int, cardAdapter: HomeCardAdapter) {
|
fun removeCard(position: Int, cardAdapter: HomeCardAdapter) {
|
||||||
val homeCards = App.config.forProfile().ui.homeCards.toMutableList()
|
val homeCards = App.profile.config.ui.homeCards.toMutableList()
|
||||||
if (position >= homeCards.size)
|
if (position >= homeCards.size)
|
||||||
return
|
return
|
||||||
val card = cardAdapter.items[position]
|
val card = cardAdapter.items[position]
|
||||||
@ -71,7 +71,7 @@ class HomeFragment : Fragment(), CoroutineScope {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
homeCards.removeAll { it.cardId == card.id }
|
homeCards.removeAll { it.cardId == card.id }
|
||||||
App.config.forProfile().ui.homeCards = homeCards
|
App.profile.config.ui.homeCards = homeCards
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ class HomeFragment : Fragment(), CoroutineScope {
|
|||||||
b.refreshLayout.isEnabled = scrollY == 0
|
b.refreshLayout.isEnabled = scrollY == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
val cards = app.config.forProfile().ui.homeCards.filter { it.profileId == app.profile.id }.toMutableList()
|
val cards = app.profile.config.ui.homeCards.filter { it.profileId == app.profile.id }.toMutableList()
|
||||||
if (cards.isEmpty()) {
|
if (cards.isEmpty()) {
|
||||||
cards += listOfNotNull(
|
cards += listOfNotNull(
|
||||||
HomeCardModel(app.profile.id, HomeCard.CARD_LUCKY_NUMBER).takeIf { app.profile.hasUIFeature(FeatureType.LUCKY_NUMBER) },
|
HomeCardModel(app.profile.id, HomeCard.CARD_LUCKY_NUMBER).takeIf { app.profile.hasUIFeature(FeatureType.LUCKY_NUMBER) },
|
||||||
@ -153,7 +153,7 @@ class HomeFragment : Fragment(), CoroutineScope {
|
|||||||
HomeCardModel(app.profile.id, HomeCard.CARD_GRADES).takeIf { app.profile.hasUIFeature(FeatureType.GRADES) },
|
HomeCardModel(app.profile.id, HomeCard.CARD_GRADES).takeIf { app.profile.hasUIFeature(FeatureType.GRADES) },
|
||||||
HomeCardModel(app.profile.id, HomeCard.CARD_NOTES),
|
HomeCardModel(app.profile.id, HomeCard.CARD_NOTES),
|
||||||
)
|
)
|
||||||
app.config.forProfile().ui.homeCards = app.config.forProfile().ui.homeCards.toMutableList().also { it.addAll(cards) }
|
app.profile.config.ui.homeCards = app.profile.config.ui.homeCards.toMutableList().also { it.addAll(cards) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val items = mutableListOf<HomeCard>()
|
val items = mutableListOf<HomeCard>()
|
||||||
|
@ -11,7 +11,11 @@ import android.view.ViewGroup
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import org.greenrobot.eventbus.Subscribe
|
import org.greenrobot.eventbus.Subscribe
|
||||||
import org.greenrobot.eventbus.ThreadMode
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
@ -73,9 +77,8 @@ class LoginSyncFragment : Fragment(), CoroutineScope {
|
|||||||
Profile.REGISTRATION_DISABLED
|
Profile.REGISTRATION_DISABLED
|
||||||
|
|
||||||
val data = AppData.get(it.loginStoreType)
|
val data = AppData.get(it.loginStoreType)
|
||||||
val config = app.config.getFor(it.id)
|
|
||||||
for ((key, value) in data.configOverrides) {
|
for ((key, value) in data.configOverrides) {
|
||||||
config.set(key, value)
|
it.config.set(key, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
app.db.eventTypeDao().addDefaultTypes(it)
|
app.db.eventTypeDao().addDefaultTypes(it)
|
||||||
|
@ -67,9 +67,8 @@ class MessagesComposeFragment : Fragment(), CoroutineScope {
|
|||||||
get() = app.messageManager
|
get() = app.messageManager
|
||||||
private val textStylingManager
|
private val textStylingManager
|
||||||
get() = app.textStylingManager
|
get() = app.textStylingManager
|
||||||
private val profileConfig by lazy { app.config.forProfile().ui }
|
|
||||||
private val greetingText
|
private val greetingText
|
||||||
get() = profileConfig.messagesGreetingText ?: "\n\nZ poważaniem\n${app.profile.accountOwnerName}"
|
get() = app.profile.config.ui.messagesGreetingText ?: "\n\nZ poważaniem\n${app.profile.accountOwnerName}"
|
||||||
|
|
||||||
private val teachers = mutableListOf<Teacher>()
|
private val teachers = mutableListOf<Teacher>()
|
||||||
|
|
||||||
@ -242,9 +241,9 @@ class MessagesComposeFragment : Fragment(), CoroutineScope {
|
|||||||
subject = b.subject,
|
subject = b.subject,
|
||||||
body = b.text,
|
body = b.text,
|
||||||
teachers = teachers,
|
teachers = teachers,
|
||||||
greetingOnCompose = profileConfig.messagesGreetingOnCompose,
|
greetingOnCompose = app.profile.config.ui.messagesGreetingOnCompose,
|
||||||
greetingOnReply = profileConfig.messagesGreetingOnReply,
|
greetingOnReply = app.profile.config.ui.messagesGreetingOnReply,
|
||||||
greetingOnForward = profileConfig.messagesGreetingOnForward,
|
greetingOnForward = app.profile.config.ui.messagesGreetingOnForward,
|
||||||
greetingText = greetingText,
|
greetingText = greetingText,
|
||||||
)
|
)
|
||||||
stylingConfig = StylingConfig(
|
stylingConfig = StylingConfig(
|
||||||
|
@ -13,7 +13,6 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria
|
|||||||
import com.mikepenz.iconics.utils.colorInt
|
import com.mikepenz.iconics.utils.colorInt
|
||||||
import com.mikepenz.iconics.utils.sizeDp
|
import com.mikepenz.iconics.utils.sizeDp
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Note
|
import pl.szczodrzynski.edziennik.data.db.entity.Note
|
||||||
@ -60,8 +59,6 @@ class NoteEditorDialog(
|
|||||||
private val textStylingManager
|
private val textStylingManager
|
||||||
get() = app.textStylingManager
|
get() = app.textStylingManager
|
||||||
|
|
||||||
private val profileConfig by lazy { app.config.forProfile() }
|
|
||||||
|
|
||||||
private var progressDialog: AlertDialog? = null
|
private var progressDialog: AlertDialog? = null
|
||||||
|
|
||||||
override suspend fun onPositiveClick(): Boolean {
|
override suspend fun onPositiveClick(): Boolean {
|
||||||
@ -136,7 +133,7 @@ class NoteEditorDialog(
|
|||||||
|
|
||||||
b.ownerType = owner?.getNoteType() ?: Note.OwnerType.NONE
|
b.ownerType = owner?.getNoteType() ?: Note.OwnerType.NONE
|
||||||
b.editingNote = editingNote
|
b.editingNote = editingNote
|
||||||
b.shareByDefault = profileConfig.shareByDefault && profile?.canShare == true
|
b.shareByDefault = app.profile.config.shareByDefault && profile?.canShare == true
|
||||||
|
|
||||||
b.color.clear().append(Note.Color.values().map { color ->
|
b.color.clear().append(Note.Color.values().map { color ->
|
||||||
TextInputDropDown.Item(
|
TextInputDropDown.Item(
|
||||||
|
@ -16,7 +16,7 @@ abstract class SettingsCard(
|
|||||||
protected val activity: MainActivity = util.activity
|
protected val activity: MainActivity = util.activity
|
||||||
|
|
||||||
protected val configGlobal by lazy { app.config }
|
protected val configGlobal by lazy { app.config }
|
||||||
protected val configProfile by lazy { app.config.forProfile() }
|
protected val configProfile by lazy { app.profile.config }
|
||||||
|
|
||||||
val card by lazy {
|
val card by lazy {
|
||||||
buildCard()
|
buildCard()
|
||||||
|
@ -14,25 +14,48 @@ import android.widget.LinearLayout
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.asynclayoutinflater.view.AsyncLayoutInflater
|
import androidx.asynclayoutinflater.view.AsyncLayoutInflater
|
||||||
import androidx.core.graphics.ColorUtils
|
import androidx.core.graphics.ColorUtils
|
||||||
import androidx.core.view.*
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.view.marginTop
|
||||||
|
import androidx.core.view.setPadding
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
|
import androidx.core.view.updateMargins
|
||||||
import com.linkedin.android.tachyon.DayView
|
import com.linkedin.android.tachyon.DayView
|
||||||
import com.linkedin.android.tachyon.DayViewConfig
|
import com.linkedin.android.tachyon.DayViewConfig
|
||||||
import com.mikepenz.iconics.IconicsDrawable
|
import com.mikepenz.iconics.IconicsDrawable
|
||||||
import com.mikepenz.iconics.utils.colorInt
|
import com.mikepenz.iconics.utils.colorInt
|
||||||
import com.mikepenz.iconics.utils.sizeDp
|
import com.mikepenz.iconics.utils.sizeDp
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import pl.szczodrzynski.edziennik.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import pl.szczodrzynski.edziennik.App
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.EdziennikTask
|
import pl.szczodrzynski.edziennik.data.api.edziennik.EdziennikTask
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Lesson
|
import pl.szczodrzynski.edziennik.data.db.entity.Lesson
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
|
import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
|
||||||
import pl.szczodrzynski.edziennik.data.db.enums.LoginType
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.AttendanceFull
|
import pl.szczodrzynski.edziennik.data.db.full.AttendanceFull
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
import pl.szczodrzynski.edziennik.data.db.full.LessonFull
|
||||||
import pl.szczodrzynski.edziennik.databinding.TimetableDayFragmentBinding
|
import pl.szczodrzynski.edziennik.databinding.TimetableDayFragmentBinding
|
||||||
import pl.szczodrzynski.edziennik.databinding.TimetableLessonBinding
|
import pl.szczodrzynski.edziennik.databinding.TimetableLessonBinding
|
||||||
import pl.szczodrzynski.edziennik.databinding.TimetableNoTimetableBinding
|
import pl.szczodrzynski.edziennik.databinding.TimetableNoTimetableBinding
|
||||||
import pl.szczodrzynski.edziennik.ext.*
|
import pl.szczodrzynski.edziennik.ext.Intent
|
||||||
|
import pl.szczodrzynski.edziennik.ext.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.ext.asColoredSpannable
|
||||||
|
import pl.szczodrzynski.edziennik.ext.asStrikethroughSpannable
|
||||||
|
import pl.szczodrzynski.edziennik.ext.concat
|
||||||
|
import pl.szczodrzynski.edziennik.ext.dp
|
||||||
|
import pl.szczodrzynski.edziennik.ext.findParentById
|
||||||
|
import pl.szczodrzynski.edziennik.ext.getStudentData
|
||||||
|
import pl.szczodrzynski.edziennik.ext.listOfNotEmpty
|
||||||
|
import pl.szczodrzynski.edziennik.ext.onClick
|
||||||
|
import pl.szczodrzynski.edziennik.ext.resolveAttr
|
||||||
|
import pl.szczodrzynski.edziennik.ext.resolveDrawable
|
||||||
|
import pl.szczodrzynski.edziennik.ext.setText
|
||||||
|
import pl.szczodrzynski.edziennik.ext.setTintColor
|
||||||
|
import pl.szczodrzynski.edziennik.ext.startCoroutineTimer
|
||||||
import pl.szczodrzynski.edziennik.ui.base.lazypager.LazyFragment
|
import pl.szczodrzynski.edziennik.ui.base.lazypager.LazyFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.timetable.TimetableFragment.Companion.DEFAULT_END_HOUR
|
import pl.szczodrzynski.edziennik.ui.timetable.TimetableFragment.Companion.DEFAULT_END_HOUR
|
||||||
import pl.szczodrzynski.edziennik.ui.timetable.TimetableFragment.Companion.DEFAULT_START_HOUR
|
import pl.szczodrzynski.edziennik.ui.timetable.TimetableFragment.Companion.DEFAULT_START_HOUR
|
||||||
@ -76,7 +99,6 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope {
|
|||||||
|
|
||||||
// find SwipeRefreshLayout in the hierarchy
|
// find SwipeRefreshLayout in the hierarchy
|
||||||
private val refreshLayout by lazy { view?.findParentById(R.id.refreshLayout) }
|
private val refreshLayout by lazy { view?.findParentById(R.id.refreshLayout) }
|
||||||
private val profileConfig by lazy { app.config.forProfile().ui }
|
|
||||||
|
|
||||||
private val dayViewDelegate = mutableLazy {
|
private val dayViewDelegate = mutableLazy {
|
||||||
val dayView = DayView(activity, DayViewConfig(
|
val dayView = DayView(activity, DayViewConfig(
|
||||||
@ -186,7 +208,7 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope {
|
|||||||
val minStartHour = lessonsActual.minOf { it.displayStartTime?.hour ?: DEFAULT_END_HOUR }
|
val minStartHour = lessonsActual.minOf { it.displayStartTime?.hour ?: DEFAULT_END_HOUR }
|
||||||
val maxEndHour = lessonsActual.maxOf { it.displayEndTime?.hour?.plus(1) ?: DEFAULT_START_HOUR }
|
val maxEndHour = lessonsActual.maxOf { it.displayEndTime?.hour?.plus(1) ?: DEFAULT_START_HOUR }
|
||||||
|
|
||||||
if (profileConfig.timetableTrimHourRange) {
|
if (app.profile.config.ui.timetableTrimHourRange) {
|
||||||
dayViewDelegate.deinitialize()
|
dayViewDelegate.deinitialize()
|
||||||
// end/start defaults are swapped on purpose
|
// end/start defaults are swapped on purpose
|
||||||
startHour = minStartHour
|
startHour = minStartHour
|
||||||
@ -238,7 +260,7 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope {
|
|||||||
val colorSecondary = android.R.attr.textColorSecondary.resolveAttr(activity)
|
val colorSecondary = android.R.attr.textColorSecondary.resolveAttr(activity)
|
||||||
|
|
||||||
for (lesson in lessons) {
|
for (lesson in lessons) {
|
||||||
val attendance = if (profileConfig.timetableShowAttendance)
|
val attendance = if (app.profile.config.ui.timetableShowAttendance)
|
||||||
attendanceList.find { it.startTime == lesson.startTime }
|
attendanceList.find { it.startTime == lesson.startTime }
|
||||||
else
|
else
|
||||||
null
|
null
|
||||||
@ -272,7 +294,7 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val eventIcons = listOf(lb.event1, lb.event2, lb.event3)
|
val eventIcons = listOf(lb.event1, lb.event2, lb.event3)
|
||||||
if (profileConfig.timetableShowEvents) {
|
if (app.profile.config.ui.timetableShowEvents) {
|
||||||
val eventList = events.filter { it.time != null && it.time == lesson.displayStartTime }.take(3)
|
val eventList = events.filter { it.time != null && it.time == lesson.displayStartTime }.take(3)
|
||||||
for ((i, eventIcon) in eventIcons.withIndex()) {
|
for ((i, eventIcon) in eventIcons.withIndex()) {
|
||||||
eventList.getOrNull(i).let {
|
eventList.getOrNull(i).let {
|
||||||
@ -323,7 +345,7 @@ class TimetableDayFragment : LazyFragment(), CoroutineScope {
|
|||||||
val lessonText =
|
val lessonText =
|
||||||
lesson.getNoteSubstituteText(showNotes = true) ?: lesson.displaySubjectName
|
lesson.getNoteSubstituteText(showNotes = true) ?: lesson.displaySubjectName
|
||||||
|
|
||||||
val (subjectTextPrimary, subjectTextSecondary) = if (profileConfig.timetableColorSubjectName) {
|
val (subjectTextPrimary, subjectTextSecondary) = if (app.profile.config.ui.timetableColorSubjectName) {
|
||||||
val subjectColor = lesson.color ?: Colors.stringToMaterialColorCRC(lessonText?.toString() ?: "")
|
val subjectColor = lesson.color ?: Colors.stringToMaterialColorCRC(lessonText?.toString() ?: "")
|
||||||
if (lb.annotationVisible) {
|
if (lb.annotationVisible) {
|
||||||
lb.subjectContainer.background = ColorDrawable(subjectColor)
|
lb.subjectContainer.background = ColorDrawable(subjectColor)
|
||||||
|
@ -58,7 +58,6 @@ class TimetableFragment : Fragment(), CoroutineScope {
|
|||||||
|
|
||||||
private var fabShown = false
|
private var fabShown = false
|
||||||
private val items = mutableListOf<Date>()
|
private val items = mutableListOf<Date>()
|
||||||
private val profileConfig by lazy { app.config.forProfile().ui }
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
activity = (getActivity() as MainActivity?) ?: return null
|
activity = (getActivity() as MainActivity?) ?: return null
|
||||||
|
@ -24,7 +24,7 @@ class AttendanceManager(val app: App) : CoroutineScope {
|
|||||||
get() = job + Dispatchers.Default
|
get() = job + Dispatchers.Default
|
||||||
|
|
||||||
val useSymbols
|
val useSymbols
|
||||||
get() = app.config.forProfile().attendance.useSymbols
|
get() = app.profile.config.attendance.useSymbols
|
||||||
|
|
||||||
fun getTypeShort(baseType: Int): String {
|
fun getTypeShort(baseType: Int): String {
|
||||||
return when (baseType) {
|
return when (baseType) {
|
||||||
|
@ -16,7 +16,13 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_POINT_AVG
|
|||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_POINT_SUM
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_POINT_SUM
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_YEAR_FINAL
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_YEAR_FINAL
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.GradeFull
|
import pl.szczodrzynski.edziennik.data.db.full.GradeFull
|
||||||
import pl.szczodrzynski.edziennik.ext.*
|
import pl.szczodrzynski.edziennik.ext.asColoredSpannable
|
||||||
|
import pl.szczodrzynski.edziennik.ext.get
|
||||||
|
import pl.szczodrzynski.edziennik.ext.ifNotNull
|
||||||
|
import pl.szczodrzynski.edziennik.ext.notEmptyOrNull
|
||||||
|
import pl.szczodrzynski.edziennik.ext.plural
|
||||||
|
import pl.szczodrzynski.edziennik.ext.resolveAttr
|
||||||
|
import pl.szczodrzynski.edziennik.ext.startCoroutineTimer
|
||||||
import pl.szczodrzynski.edziennik.ui.grades.models.GradesAverages
|
import pl.szczodrzynski.edziennik.ui.grades.models.GradesAverages
|
||||||
import pl.szczodrzynski.edziennik.ui.grades.models.GradesSemester
|
import pl.szczodrzynski.edziennik.ui.grades.models.GradesSemester
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
@ -48,21 +54,21 @@ class GradesManager(val app: App) : CoroutineScope {
|
|||||||
val orderBy
|
val orderBy
|
||||||
get() = app.config.grades.orderBy
|
get() = app.config.grades.orderBy
|
||||||
val yearAverageMode
|
val yearAverageMode
|
||||||
get() = app.config.forProfile().grades.yearAverageMode
|
get() = app.profile.config.grades.yearAverageMode
|
||||||
val colorMode
|
val colorMode
|
||||||
get() = app.config.forProfile().grades.colorMode
|
get() = app.profile.config.grades.colorMode
|
||||||
val plusValue
|
val plusValue
|
||||||
get() = app.config.forProfile().grades.plusValue
|
get() = app.profile.config.grades.plusValue
|
||||||
val minusValue
|
val minusValue
|
||||||
get() = app.config.forProfile().grades.minusValue
|
get() = app.profile.config.grades.minusValue
|
||||||
val dontCountEnabled
|
val dontCountEnabled
|
||||||
get() = app.config.forProfile().grades.dontCountEnabled
|
get() = app.profile.config.grades.dontCountEnabled
|
||||||
val dontCountGrades
|
val dontCountGrades
|
||||||
get() = app.config.forProfile().grades.dontCountGrades
|
get() = app.profile.config.grades.dontCountGrades
|
||||||
val hideImproved
|
val hideImproved
|
||||||
get() = app.config.forProfile().grades.hideImproved
|
get() = app.profile.config.grades.hideImproved
|
||||||
val averageWithoutWeight
|
val averageWithoutWeight
|
||||||
get() = app.config.forProfile().grades.averageWithoutWeight
|
get() = app.profile.config.grades.averageWithoutWeight
|
||||||
|
|
||||||
|
|
||||||
fun getOrderByString() = when (orderBy) {
|
fun getOrderByString() = when (orderBy) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user