From ffd81f8b823833de2e6894fb35bc221b4cab94a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 24 Oct 2022 23:32:09 +0200 Subject: [PATCH] [UI] Add setting to share events/notes by default. --- .../java/pl/szczodrzynski/edziennik/App.kt | 2 ++ .../edziennik/config/ProfileConfig.kt | 2 ++ .../edziennik/ui/event/EventManualDialog.kt | 26 +++++++++++++++--- .../edziennik/ui/notes/NoteEditorDialog.kt | 27 +++++++++++++++++++ .../ui/settings/cards/SettingsRegisterCard.kt | 27 ++++++++++++++++++- .../main/res/layout/note_editor_dialog.xml | 6 ++++- app/src/main/res/raw/app_data.json | 5 ++-- app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 90 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt index 283d83ef..30225982 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt @@ -462,6 +462,8 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope { } fun profileSave() = profileSave(profile) fun profileSave(profile: Profile) { + if (profile.id == profileId) + App.profile = profile launch(Dispatchers.Default) { App.db.profileDao().add(profile) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt index 502f0cd6..4df2ef47 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt @@ -29,6 +29,8 @@ class ProfileConfig( var dataVersion by config(DATA_VERSION) var hash by config("") + var shareByDefault by config(false) + init { if (dataVersion < DATA_VERSION) ProfileConfigMigration(this) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventManualDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventManualDialog.kt index 24b0aded..8b39d0c0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventManualDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/event/EventManualDialog.kt @@ -80,6 +80,8 @@ class EventManualDialog( SzkolnyApi(app) } + private val profileConfig by lazy { app.config.forProfile() } + private var enqueuedWeekDialog: AlertDialog? = null private var enqueuedWeekStart = Date.getToday() @@ -107,9 +109,6 @@ class EventManualDialog( } override suspend fun onShow() { - b.shareSwitch.isChecked = editingShared - b.shareSwitch.isEnabled = !editingShared || (editingShared && editingOwn) - b.showMore.onClick { // TODO iconics is broken it.apply { refreshDrawableState() @@ -137,6 +136,13 @@ class EventManualDialog( } loadLists() + + val shareByDefault = profileConfig.shareByDefault + && profile.enableSharedEvents + && profile.registration == Profile.REGISTRATION_ENABLED + + b.shareSwitch.isChecked = editingShared || editingEvent == null && shareByDefault + b.shareSwitch.isEnabled = !editingShared || editingOwn } private fun updateShareText(checked: Boolean = b.shareSwitch.isChecked) { @@ -411,6 +417,20 @@ class EventManualDialog( return } + if (share && !profile.enableSharedEvents) { + MaterialAlertDialogBuilder(activity) + .setTitle(R.string.event_sharing) + .setMessage(R.string.settings_register_shared_events_dialog_enabled_text) + .setPositiveButton(R.string.ok) { _, _ -> + profile.enableSharedEvents = true + app.profileSave(profile) + saveEvent() + } + .setNegativeButton(R.string.cancel, null) + .show() + return + } + b.dateDropdown.error = null b.teamDropdown.error = null b.typeDropdown.error = null diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/notes/NoteEditorDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/notes/NoteEditorDialog.kt index ea77e2d3..dd5e7db0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/notes/NoteEditorDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/notes/NoteEditorDialog.kt @@ -13,6 +13,7 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria import com.mikepenz.iconics.utils.colorInt import com.mikepenz.iconics.utils.sizeDp import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.data.db.entity.Note @@ -59,6 +60,8 @@ class NoteEditorDialog( private val textStylingManager get() = app.textStylingManager + private val profileConfig by lazy { app.config.forProfile() } + private var progressDialog: AlertDialog? = null override suspend fun onPositiveClick(): Boolean { @@ -76,6 +79,23 @@ class NoteEditorDialog( return NO_DISMISS } + if (note.isShared && !profile.enableSharedEvents) { + MaterialAlertDialogBuilder(activity) + .setTitle(R.string.event_sharing) + .setMessage(R.string.settings_register_shared_events_dialog_enabled_text) + .setPositiveButton(R.string.ok) { _, _ -> + profile.enableSharedEvents = true + app.profileSave(profile) + launch { + if (onPositiveClick()) + dismiss() + } + } + .setNegativeButton(R.string.cancel, null) + .show() + return NO_DISMISS + } + if (note.isShared || editingNote?.isShared == true) { progressDialog = MaterialAlertDialogBuilder(activity) .setTitle(R.string.please_wait) @@ -127,8 +147,15 @@ class NoteEditorDialog( topicStylingConfig = StylingConfigBase(editText = b.topic, htmlMode = HtmlMode.SIMPLE) bodyStylingConfig = StylingConfigBase(editText = b.body, htmlMode = HtmlMode.SIMPLE) + val profile = withContext(Dispatchers.IO) { + app.db.profileDao().getByIdNow(profileId) + } + b.ownerType = owner?.getNoteType() ?: Note.OwnerType.NONE b.editingNote = editingNote + b.shareByDefault = profileConfig.shareByDefault + && profile?.enableSharedEvents == true + && profile.registration == Profile.REGISTRATION_ENABLED b.color.clear().append(Note.Color.values().map { color -> TextInputDropDown.Item( diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsRegisterCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsRegisterCard.kt index ad405263..6e2c989a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsRegisterCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsRegisterCard.kt @@ -39,7 +39,7 @@ class SettingsRegisterCard(util: SettingsUtil) : SettingsCard(util) { subText = R.string.settings_register_shared_events_subtext, icon = CommunityMaterial.Icon3.cmd_share_outline, value = app.profile.enableSharedEvents - ) { _, value -> + ) { item, value -> app.profile.enableSharedEvents = value app.profileSave() MaterialAlertDialogBuilder(activity) @@ -52,6 +52,23 @@ class SettingsRegisterCard(util: SettingsUtil) : SettingsCard(util) { ) .setPositiveButton(R.string.ok, null) .show() + if (value) { + card.items.after(item, sharedEventsDefaultItem) + } else { + card.items.remove(sharedEventsDefaultItem) + } + util.refresh() + } + } + + private val sharedEventsDefaultItem by lazy { + util.createPropertyItem( + text = R.string.settings_register_share_by_default_text, + subText = R.string.settings_register_share_by_default_subtext, + icon = CommunityMaterial.Icon3.cmd_toggle_switch_outline, + value = configProfile.shareByDefault + ) { _, value -> + configProfile.shareByDefault = value } } @@ -112,8 +129,11 @@ class SettingsRegisterCard(util: SettingsUtil) : SettingsCard(util) { item.isChecked = enabled if (value) { card.items.after(item, sharedEventsItem) + if (app.profile.enableSharedEvents) + card.items.after(item, sharedEventsDefaultItem) } else { card.items.remove(sharedEventsItem) + card.items.remove(sharedEventsDefaultItem) } util.refresh() }) @@ -127,6 +147,11 @@ class SettingsRegisterCard(util: SettingsUtil) : SettingsCard(util) { if (app.profile.canShare) sharedEventsItem + else + null, + + if (app.profile.enableSharedEvents) + sharedEventsDefaultItem else null ) diff --git a/app/src/main/res/layout/note_editor_dialog.xml b/app/src/main/res/layout/note_editor_dialog.xml index f52b3bb0..2335bda1 100644 --- a/app/src/main/res/layout/note_editor_dialog.xml +++ b/app/src/main/res/layout/note_editor_dialog.xml @@ -18,6 +18,10 @@ + + diff --git a/app/src/main/res/raw/app_data.json b/app/src/main/res/raw/app_data.json index a5cddfcb..7fbbee2d 100644 --- a/app/src/main/res/raw/app_data.json +++ b/app/src/main/res/raw/app_data.json @@ -83,8 +83,9 @@ }, "university": { "configOverrides": { - "timetableTrimHourRange": true, - "timetableColorSubjectName": true + "shareByDefault": true, + "timetableColorSubjectName": true, + "timetableTrimHourRange": true }, "uiConfig": { "lessonHeight": 45 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3046e976..0abf9423 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1551,4 +1551,6 @@ Nie można załadować danych aplikacji {cmd-share-variant} udostępnione w klasie {cmd-share-variant} udostępnione przez Ciebie + Domyślnie udostępniaj wydarzenia + Ustaw tworzone wydarzenia domyślnie jako udostępnione