Skip to content

Commit d3aaf31

Browse files
authored
teams: smoother calendar meetup alert splitting (fixes #13087) (#13020)
1 parent 152a126 commit d3aaf31

2 files changed

Lines changed: 110 additions & 76 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "org.ole.planet.myplanet"
1313
minSdk = 26
1414
targetSdk = 36
15-
versionCode = 5361
16-
versionName = "0.53.61"
15+
versionCode = 5362
16+
versionName = "0.53.62"
1717
ndkVersion = '26.3.11579264'
1818
vectorDrawables.useSupportLibrary = true
1919
}

app/src/main/java/org/ole/planet/myplanet/ui/teams/TeamCalendarFragment.kt

Lines changed: 108 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -85,83 +85,29 @@ class TeamCalendarFragment : BaseTeamFragment() {
8585
private fun showMeetupAlert() {
8686
if (addMeetupDialog?.isShowing == true) return
8787
val addMeetupBinding = AddMeetupBinding.inflate(layoutInflater)
88-
setDatePickerListener(addMeetupBinding.tvStartDate, start, end)
89-
setDatePickerListener(addMeetupBinding.tvEndDate, end, null)
90-
setTimePicker(addMeetupBinding.tvStartTime)
91-
setTimePicker(addMeetupBinding.tvEndTime)
88+
setupMeetupDialogPickers(addMeetupBinding)
89+
9290
if (!::clickedCalendar.isInitialized) {
9391
clickedCalendar = Calendar.getInstance()
9492
}
9593
addMeetupDialog = AlertDialog.Builder(requireActivity()).setView(addMeetupBinding.root).create()
96-
addMeetupBinding.btnSave.setOnClickListener {
97-
val title = "${addMeetupBinding.etTitle.text.trim()}"
98-
val link = "${addMeetupBinding.etLink.text.trim()}"
99-
val description = "${addMeetupBinding.etDescription.text.trim()}"
100-
val location = "${addMeetupBinding.etLocation.text.trim()}"
101-
if (title.isEmpty()) {
102-
Utilities.toast(activity, getString(R.string.title_is_required))
103-
} else if (description.isEmpty()) {
104-
Utilities.toast(activity, getString(R.string.description_is_required))
105-
} else if (!link.isValidWebLink() && link.isNotEmpty()) {
106-
Utilities.toast(activity, getString(R.string.invalid_url))
107-
} else {
108-
val defaultPlaceholder = getString(R.string.click_here_to_pick_time)
109-
val startTimeText = "${addMeetupBinding.tvStartTime.text}"
110-
val endTimeText = "${addMeetupBinding.tvEndTime.text}"
111-
val recurringId = addMeetupBinding.rgRecuring.checkedRadioButtonId
112-
val rb = addMeetupBinding.rgRecuring.findViewById<RadioButton>(recurringId)
113-
val recurringText = rb?.text?.toString()
114-
val teamPlanetCode = team?.teamPlanetCode
115-
val userName = user?.name
116-
val startMillis = start.timeInMillis
117-
val endMillis = end.timeInMillis
118-
val currentTeamId = teamId
11994

120-
lifecycleScope.launch {
121-
val meetup = RealmMeetup().apply {
122-
id = "${UUID.randomUUID()}"
123-
this.title = title
124-
meetupLink = link
125-
this.description = description
126-
meetupLocation = location
127-
creator = userName
128-
startDate = startMillis
129-
endDate = endMillis
130-
if (startTimeText == defaultPlaceholder) {
131-
startTime = ""
132-
} else {
133-
startTime = startTimeText
134-
}
135-
if (endTimeText == defaultPlaceholder) {
136-
endTime = ""
137-
} else {
138-
endTime = endTimeText
139-
}
140-
createdDate = System.currentTimeMillis()
141-
sourcePlanet = teamPlanetCode
142-
val jo = JsonObject()
143-
jo.addProperty("type", "local")
144-
jo.addProperty("planetCode", teamPlanetCode)
145-
sync = Gson().toJson(jo)
146-
if (recurringText != null) {
147-
recurring = recurringText
148-
}
149-
val ob = JsonObject()
150-
ob.addProperty("teams", currentTeamId)
151-
this.link = Gson().toJson(ob)
152-
this.teamId = currentTeamId
153-
}
154-
val success = eventsRepository.createMeetup(meetup)
155-
if (success) {
156-
Utilities.toast(activity, getString(R.string.meetup_added))
157-
addMeetupDialog?.dismiss()
158-
refreshCalendarView()
159-
refreshMeetupDialog()
160-
} else {
161-
Utilities.toast(activity, getString(R.string.meetup_not_added))
162-
}
163-
}
164-
}
95+
setupMeetupDialogButtons(addMeetupBinding)
96+
97+
addMeetupDialog?.show()
98+
addMeetupDialog?.window?.setBackgroundDrawableResource(R.color.card_bg)
99+
}
100+
101+
private fun setupMeetupDialogPickers(addMeetupBinding: AddMeetupBinding) {
102+
setDatePickerListener(addMeetupBinding.tvStartDate, start, end)
103+
setDatePickerListener(addMeetupBinding.tvEndDate, end, null)
104+
setTimePicker(addMeetupBinding.tvStartTime)
105+
setTimePicker(addMeetupBinding.tvEndTime)
106+
}
107+
108+
private fun setupMeetupDialogButtons(addMeetupBinding: AddMeetupBinding) {
109+
addMeetupBinding.btnSave.setOnClickListener {
110+
handleMeetupSave(addMeetupBinding)
165111
}
166112

167113
addMeetupBinding.btnCancel.setOnClickListener {
@@ -174,8 +120,88 @@ class TeamCalendarFragment : BaseTeamFragment() {
174120
refreshCalendarView()
175121
}
176122
}
177-
addMeetupDialog?.show()
178-
addMeetupDialog?.window?.setBackgroundDrawableResource(R.color.card_bg)
123+
}
124+
125+
private fun handleMeetupSave(addMeetupBinding: AddMeetupBinding) {
126+
val title = "${addMeetupBinding.etTitle.text.trim()}"
127+
val link = "${addMeetupBinding.etLink.text.trim()}"
128+
val description = "${addMeetupBinding.etDescription.text.trim()}"
129+
val location = "${addMeetupBinding.etLocation.text.trim()}"
130+
131+
if (title.isEmpty()) {
132+
Utilities.toast(activity, getString(R.string.title_is_required))
133+
} else if (description.isEmpty()) {
134+
Utilities.toast(activity, getString(R.string.description_is_required))
135+
} else if (!link.isValidWebLink() && link.isNotEmpty()) {
136+
Utilities.toast(activity, getString(R.string.invalid_url))
137+
} else {
138+
saveMeetupToDatabase(addMeetupBinding, title, link, description, location)
139+
}
140+
}
141+
142+
private fun saveMeetupToDatabase(
143+
addMeetupBinding: AddMeetupBinding,
144+
title: String,
145+
link: String,
146+
description: String,
147+
location: String
148+
) {
149+
val defaultPlaceholder = getString(R.string.click_here_to_pick_time)
150+
val startTimeText = "${addMeetupBinding.tvStartTime.text}"
151+
val endTimeText = "${addMeetupBinding.tvEndTime.text}"
152+
val recurringId = addMeetupBinding.rgRecuring.checkedRadioButtonId
153+
val rb = addMeetupBinding.rgRecuring.findViewById<RadioButton>(recurringId)
154+
val recurringText = rb?.text?.toString()
155+
val teamPlanetCode = team?.teamPlanetCode
156+
val userName = user?.name
157+
val startMillis = start.timeInMillis
158+
val endMillis = end.timeInMillis
159+
val currentTeamId = teamId
160+
161+
lifecycleScope.launch {
162+
val meetup = RealmMeetup().apply {
163+
id = "${UUID.randomUUID()}"
164+
this.title = title
165+
meetupLink = link
166+
this.description = description
167+
meetupLocation = location
168+
creator = userName
169+
startDate = startMillis
170+
endDate = endMillis
171+
if (startTimeText == defaultPlaceholder) {
172+
startTime = ""
173+
} else {
174+
startTime = startTimeText
175+
}
176+
if (endTimeText == defaultPlaceholder) {
177+
endTime = ""
178+
} else {
179+
endTime = endTimeText
180+
}
181+
createdDate = System.currentTimeMillis()
182+
sourcePlanet = teamPlanetCode
183+
val jo = JsonObject()
184+
jo.addProperty("type", "local")
185+
jo.addProperty("planetCode", teamPlanetCode)
186+
sync = Gson().toJson(jo)
187+
if (recurringText != null) {
188+
recurring = recurringText
189+
}
190+
val ob = JsonObject()
191+
ob.addProperty("teams", currentTeamId)
192+
this.link = Gson().toJson(ob)
193+
this.teamId = currentTeamId
194+
}
195+
val success = eventsRepository.createMeetup(meetup)
196+
if (success) {
197+
Utilities.toast(activity, getString(R.string.meetup_added))
198+
addMeetupDialog?.dismiss()
199+
refreshCalendarView()
200+
refreshMeetupDialog()
201+
} else {
202+
Utilities.toast(activity, getString(R.string.meetup_not_added))
203+
}
204+
}
179205
}
180206

181207
private fun setDatePickerListener(view: TextView, date: Calendar?, endDate: Calendar?) {
@@ -319,6 +345,10 @@ class TeamCalendarFragment : BaseTeamFragment() {
319345
meetupDialog?.setOnDismissListener {
320346
eventDates.add(clickedCalendar)
321347
lifecycleScope.launch {
348+
val calendarDays = eventDates.map { CalendarDay(it).apply {
349+
imageResource = R.drawable.ic_calendar
350+
} }
351+
binding.calendarView.setCalendarDays(calendarDays)
322352
binding.calendarView.selectedDates = emptyList()
323353
binding.calendarView.selectedDates = eventDates.toList()
324354
}
@@ -342,6 +372,10 @@ class TeamCalendarFragment : BaseTeamFragment() {
342372
if (isAdded && activity != null) {
343373
eventDates.clear()
344374
eventDates.addAll(newDates)
375+
val calendarDays = newDates.map { CalendarDay(it).apply {
376+
imageResource = R.drawable.ic_calendar
377+
} }
378+
binding.calendarView.setCalendarDays(calendarDays)
345379
binding.calendarView.selectedDates = ArrayList(newDates)
346380
}
347381
}

0 commit comments

Comments
 (0)