diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt index 5ce237a0..ca22cb76 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigUI.kt @@ -15,6 +15,36 @@ class ProfileConfigUI(private val config: ProfileConfig) { get() { mAgendaViewType = mAgendaViewType ?: config.values.get("agendaViewType", 0); return mAgendaViewType ?: AGENDA_DEFAULT } set(value) { config.set("agendaViewType", value); mAgendaViewType = value } + private var mAgendaCompactMode: Boolean? = null + var agendaCompactMode: Boolean + get() { mAgendaCompactMode = mAgendaCompactMode ?: config.values.get("agendaCompactMode", false); return mAgendaCompactMode ?: false } + set(value) { config.set("agendaCompactMode", value); mAgendaCompactMode = value } + + private var mAgendaGroupByType: Boolean? = null + var agendaGroupByType: Boolean + get() { mAgendaGroupByType = mAgendaGroupByType ?: config.values.get("agendaGroupByType", false); return mAgendaGroupByType ?: false } + set(value) { config.set("agendaGroupByType", value); mAgendaGroupByType = value } + + private var mAgendaLessonChanges: Boolean? = null + var agendaLessonChanges: Boolean + get() { mAgendaLessonChanges = mAgendaLessonChanges ?: config.values.get("agendaLessonChanges", true); return mAgendaLessonChanges ?: true } + set(value) { config.set("agendaLessonChanges", value); mAgendaLessonChanges = value } + + private var mAgendaTeacherAbsence: Boolean? = null + var agendaTeacherAbsence: Boolean + get() { mAgendaTeacherAbsence = mAgendaTeacherAbsence ?: config.values.get("agendaTeacherAbsence", true); return mAgendaTeacherAbsence ?: true } + set(value) { config.set("agendaTeacherAbsence", value); mAgendaTeacherAbsence = value } + + private var mAgendaElearningMark: Boolean? = null + var agendaElearningMark: Boolean + get() { mAgendaElearningMark = mAgendaElearningMark ?: config.values.get("agendaElearningMark", false); return mAgendaElearningMark ?: false } + set(value) { config.set("agendaElearningMark", value); mAgendaElearningMark = value } + + private var mAgendaElearningGroup: Boolean? = null + var agendaElearningGroup: Boolean + get() { mAgendaElearningGroup = mAgendaElearningGroup ?: config.values.get("agendaElearningGroup", true); return mAgendaElearningGroup ?: true } + set(value) { config.set("agendaElearningGroup", value); mAgendaElearningGroup = value } + private var mHomeCards: List? = null var homeCards: List get() { mHomeCards = mHomeCards ?: config.values.get("homeCards", listOf(), HomeCardModel::class.java); return mHomeCards ?: listOf() } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/agenda/AgendaConfigDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/agenda/AgendaConfigDialog.kt new file mode 100644 index 00000000..150d7d65 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/agenda/AgendaConfigDialog.kt @@ -0,0 +1,93 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2021-4-10. + */ + +package pl.szczodrzynski.edziennik.ui.dialogs.agenda + +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.db.entity.Profile +import pl.szczodrzynski.edziennik.data.db.entity.Profile.Companion.REGISTRATION_ENABLED +import pl.szczodrzynski.edziennik.databinding.DialogConfigAgendaBinding +import pl.szczodrzynski.edziennik.ui.dialogs.sync.RegistrationConfigDialog +import java.util.* + +class AgendaConfigDialog( + private val activity: AppCompatActivity, + private val reloadOnDismiss: Boolean = true, + private val onShowListener: ((tag: String) -> Unit)? = null, + private val onDismissListener: ((tag: String) -> Unit)? = null +) { + companion object { + const val TAG = "AgendaConfigDialog" + } + + private val app by lazy { activity.application as App } + private val config by lazy { app.config.ui } + private val profileConfig by lazy { app.config.forProfile().ui } + + private lateinit var b: DialogConfigAgendaBinding + private lateinit var dialog: AlertDialog + + init { run { + if (activity.isFinishing) + return@run + b = DialogConfigAgendaBinding.inflate(activity.layoutInflater) + onShowListener?.invoke(TAG) + dialog = MaterialAlertDialogBuilder(activity) + .setTitle(R.string.menu_agenda_config) + .setView(b.root) + .setPositiveButton(R.string.ok) { dialog, _ -> dialog.dismiss() } + .setOnDismissListener { + saveConfig() + onDismissListener?.invoke(TAG) + if (reloadOnDismiss) (activity as? MainActivity)?.reloadTarget() + } + .create() + loadConfig() + dialog.show() + }} + + private fun loadConfig() { + b.config = profileConfig + b.isAgendaMode = profileConfig.agendaViewType == Profile.AGENDA_DEFAULT + + b.eventSharingEnabled.isChecked = app.profile.enableSharedEvents + && app.profile.registration == REGISTRATION_ENABLED + b.eventSharingEnabled.onChange { _, isChecked -> + if (isChecked && app.profile.registration != REGISTRATION_ENABLED) { + b.eventSharingEnabled.isChecked = false + val dialog = RegistrationConfigDialog(activity, app.profile, onChangeListener = { enabled -> + b.eventSharingEnabled.isChecked = enabled + setEventSharingEnabled(enabled) + }, onShowListener, onDismissListener) + dialog.showEnableDialog() + return@onChange + } + setEventSharingEnabled(isChecked) + } + } + + private fun setEventSharingEnabled(enabled: Boolean) { + if (enabled == app.profile.enableSharedEvents) + return + app.profile.enableSharedEvents = enabled + app.profileSave() + MaterialAlertDialogBuilder(activity) + .setTitle(R.string.event_sharing) + .setMessage( + if (enabled) + R.string.settings_register_shared_events_dialog_enabled_text + else + R.string.settings_register_shared_events_dialog_disabled_text + ) + .setPositiveButton(R.string.ok, null) + .show() + } + + private fun saveConfig() { + + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.kt index 0d5fd425..8d228dcc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragment.kt @@ -25,6 +25,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Metadata import pl.szczodrzynski.edziennik.data.db.entity.Profile import pl.szczodrzynski.edziennik.databinding.FragmentAgendaCalendarBinding import pl.szczodrzynski.edziennik.databinding.FragmentAgendaDefaultBinding +import pl.szczodrzynski.edziennik.ui.dialogs.agenda.AgendaConfigDialog import pl.szczodrzynski.edziennik.ui.dialogs.day.DayDialog import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog import pl.szczodrzynski.edziennik.utils.Themes @@ -78,6 +79,13 @@ class AgendaFragment : Fragment(), CoroutineScope { defaultDate = AgendaFragmentDefault.selectedDate ) }, + BottomSheetPrimaryItem(true) + .withTitle(R.string.menu_agenda_config) + .withIcon(CommunityMaterial.Icon.cmd_cog_outline) + .withOnClickListener { + activity.bottomSheet.close() + AgendaConfigDialog(activity, true, null, null) + }, BottomSheetPrimaryItem(true) .withTitle(R.string.menu_agenda_change_view) .withIcon(if (type == Profile.AGENDA_DEFAULT) CommunityMaterial.Icon.cmd_calendar_outline else CommunityMaterial.Icon2.cmd_format_list_bulleted_square) @@ -135,8 +143,6 @@ class AgendaFragment : Fragment(), CoroutineScope { agendaDefault = AgendaFragmentDefault(activity, app, b) agendaDefault?.initView(this@AgendaFragment) - - b.progressBar.visibility = View.GONE }}} private fun createCalendarAgendaView() { (b as? FragmentAgendaCalendarBinding)?.let { b -> launch { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt index dff2722c..680eeb18 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/AgendaFragmentDefault.kt @@ -7,6 +7,7 @@ package pl.szczodrzynski.edziennik.ui.modules.agenda import android.util.SparseIntArray import androidx.core.util.forEach import androidx.core.util.set +import androidx.core.view.isVisible import com.github.tibolte.agendacalendarview.CalendarManager import com.github.tibolte.agendacalendarview.CalendarPickerController import com.github.tibolte.agendacalendarview.agenda.AgendaAdapter @@ -21,6 +22,7 @@ import pl.szczodrzynski.edziennik.MainActivity import pl.szczodrzynski.edziennik.data.db.full.EventFull import pl.szczodrzynski.edziennik.databinding.FragmentAgendaDefaultBinding import pl.szczodrzynski.edziennik.ui.dialogs.day.DayDialog +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventDetailsDialog import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog import pl.szczodrzynski.edziennik.ui.dialogs.teacherabsence.TeacherAbsenceDialog import pl.szczodrzynski.edziennik.ui.modules.agenda.event.AgendaEvent @@ -44,17 +46,17 @@ class AgendaFragmentDefault( private val unreadDates = mutableSetOf() private val events = mutableListOf() private var isInitialized = false + private val profileConfig by lazy { app.config.forProfile().ui } suspend fun initView(fragment: AgendaFragment) { isInitialized = false withContext(Dispatchers.Default) { - addLessonChanges(events) + if (profileConfig.agendaLessonChanges) + addLessonChanges(events) - val showTeacherAbsences = app.profile.getStudentData("showTeacherAbsences", true) - if (showTeacherAbsences) { + if (profileConfig.agendaTeacherAbsence) addTeacherAbsence(events) - } } app.db.eventDao().getAll(app.profileId).observe(fragment) { @@ -70,6 +72,8 @@ class AgendaFragmentDefault( val dateStart = app.profile.dateSemester1Start.asCalendar val dateEnd = app.profile.dateYearEnd.asCalendar + val isCompactMode = profileConfig.agendaCompactMode + b.agendaDefaultView.init( events, dateStart, @@ -82,13 +86,15 @@ class AgendaFragmentDefault( val date = Date.fromCalendar(event.instanceDay) when (event) { - is AgendaEvent -> DayDialog(activity, app.profileId, date) + is AgendaEvent -> EventDetailsDialog(activity, event.event) is LessonChangesEvent -> LessonChangeDialog(activity, app.profileId, date) is TeacherAbsenceEvent -> TeacherAbsenceDialog( activity, app.profileId, date ) + is BaseCalendarEvent -> if (event.isPlaceHolder) + DayDialog(activity, app.profileId, date) } } @@ -104,12 +110,13 @@ class AgendaFragmentDefault( } } }, - AgendaEventRenderer(), + AgendaEventRenderer(isCompactMode), LessonChangesEventRenderer(), TeacherAbsenceEventRenderer() ) isInitialized = true + b.progressBar.isVisible = false } private fun updateView() { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt index da28ffd5..6e78776a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/event/AgendaEventRenderer.kt @@ -11,13 +11,17 @@ import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.databinding.AgendaWrappedEventBinding import pl.szczodrzynski.edziennik.utils.Colors -class AgendaEventRenderer : EventRenderer() { +class AgendaEventRenderer( + private val isCompact: Boolean +) : EventRenderer() { @SuppressLint("SetTextI18n") override fun render(view: View, aEvent: AgendaEvent) { val b = AgendaWrappedEventBinding.bind(view).item val event = aEvent.event + b.isCompact = isCompact + b.card.setCardBackgroundColor(event.eventColor) b.eventTitle.setTextColor(Colors.legibleTextColor(event.eventColor)) b.eventSubtitle.setTextColor(Colors.legibleTextColor(event.eventColor)) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsRegisterCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsRegisterCard.kt index 36239083..3dacd82d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsRegisterCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsRegisterCard.kt @@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.after import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_LIBRUS import pl.szczodrzynski.edziennik.data.db.entity.Profile.Companion.REGISTRATION_ENABLED +import pl.szczodrzynski.edziennik.ui.dialogs.agenda.AgendaConfigDialog import pl.szczodrzynski.edziennik.ui.dialogs.bell.BellSyncConfigDialog import pl.szczodrzynski.edziennik.ui.dialogs.grade.GradesConfigDialog import pl.szczodrzynski.edziennik.ui.dialogs.settings.AttendanceConfigDialog @@ -58,6 +59,13 @@ class SettingsRegisterCard(util: SettingsUtil) : SettingsCard(util) { } override fun getItems() = listOfNotNull( + util.createActionItem( + text = R.string.menu_agenda_config, + icon = CommunityMaterial.Icon.cmd_calendar_outline + ) { + AgendaConfigDialog(activity, reloadOnDismiss = false) + }, + util.createActionItem( text = R.string.menu_grades_config, icon = CommunityMaterial.Icon3.cmd_numeric_5_box_outline diff --git a/app/src/main/res/layout/agenda_event_item.xml b/app/src/main/res/layout/agenda_event_item.xml index 5f4ff89a..c70c4a95 100644 --- a/app/src/main/res/layout/agenda_event_item.xml +++ b/app/src/main/res/layout/agenda_event_item.xml @@ -3,37 +3,50 @@ ~ Copyright (c) Kuba Szczodrzyński 2021-4-8. --> - + xmlns:tools="http://schemas.android.com/tools"> - + + + + + + + + app:cardCornerRadius="5dp" + tools:cardBackgroundColor="@color/blue_selected"> - - - - - + android:orientation="vertical" + android:padding="10dp"> + + + + + + + diff --git a/app/src/main/res/layout/dialog_config_agenda.xml b/app/src/main/res/layout/dialog_config_agenda.xml new file mode 100644 index 00000000..475c9d84 --- /dev/null +++ b/app/src/main/res/layout/dialog_config_agenda.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5f21e05..6f3021e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1425,4 +1425,18 @@ Aby móc zapisać wygenerowany plan lekcji musisz przyznać uprawnienia dostępu do pamięci urządzenia.\n\nKliknij OK, aby przyznać uprawnienia. przeczytanie Polityki prywatności i akceptujesz jej postanowienia.

Autorzy aplikacji nie biorą odpowiedzialności za korzystanie z aplikacji Szkolny.eu.]]>
Szkolny.eu v%s\n%s + Ustawienia terminarza + Wygląd + Pokazuj zmiany planu lekcji + Pokazuj nieobecności nauczycieli + Tryb kompaktowy + Mniejszy rozmiar wydarzeń na liście + Grupuj wydarzenia tego samego typu + Niedostępne w trybie kalendarza + Udostępnianie wydarzeń + Włącz Udostępnianie wydarzeń + Nauczanie zdalne + Ustaw wydarzenia jako lekcje on-line + Wybierz rodzaj wydarzeń + Grupuj lekcje on-line na liście