forked from github/szkolny
[UI] Add setting to share events/notes by default.
This commit is contained in:
parent
2c34924052
commit
ffd81f8b82
@ -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)
|
||||
}
|
||||
|
@ -29,6 +29,8 @@ class ProfileConfig(
|
||||
var dataVersion by config<Int>(DATA_VERSION)
|
||||
var hash by config<String>("")
|
||||
|
||||
var shareByDefault by config<Boolean>(false)
|
||||
|
||||
init {
|
||||
if (dataVersion < DATA_VERSION)
|
||||
ProfileConfigMigration(this)
|
||||
|
@ -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
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -18,6 +18,10 @@
|
||||
<variable
|
||||
name="editingNote"
|
||||
type="Note" />
|
||||
|
||||
<variable
|
||||
name="shareByDefault"
|
||||
type="boolean" />
|
||||
</data>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
@ -89,7 +93,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:checked="@{editingNote.sharedBy != null}"
|
||||
android:checked="@{editingNote.sharedBy != null || editingNote == null && shareByDefault}"
|
||||
android:isVisible="@{ownerType.shareable}"
|
||||
android:minHeight="32dp"
|
||||
android:text="@string/dialog_event_manual_share_enabled" />
|
||||
|
@ -83,8 +83,9 @@
|
||||
},
|
||||
"university": {
|
||||
"configOverrides": {
|
||||
"timetableTrimHourRange": true,
|
||||
"timetableColorSubjectName": true
|
||||
"shareByDefault": true,
|
||||
"timetableColorSubjectName": true,
|
||||
"timetableTrimHourRange": true
|
||||
},
|
||||
"uiConfig": {
|
||||
"lessonHeight": 45
|
||||
|
@ -1551,4 +1551,6 @@
|
||||
<string name="app_cannot_load_data">Nie można załadować danych aplikacji</string>
|
||||
<string name="legend_event_shared_received">{cmd-share-variant} udostępnione w klasie</string>
|
||||
<string name="legend_event_shared_sent">{cmd-share-variant} udostępnione przez Ciebie</string>
|
||||
<string name="settings_register_share_by_default_text">Domyślnie udostępniaj wydarzenia</string>
|
||||
<string name="settings_register_share_by_default_subtext">Ustaw tworzone wydarzenia domyślnie jako udostępnione</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user