Skip to content

Commit 01643c9

Browse files
authored
Use SimpleAdapter and PagingAdapter for submitting new events (alamkanak#162)
* Introduce SimpleAdapter and PagingAdapter This means WeekView must no longer be generic. * Update JodaTime, JSR310 and ThreeTenABP date extensions
1 parent 86b3813 commit 01643c9

40 files changed

+770
-1239
lines changed

core/src/main/java/com/alamkanak/weekview/AllDayEventsUpdater.kt

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import android.text.SpannableStringBuilder
55
import android.text.StaticLayout
66
import kotlin.math.roundToInt
77

8-
internal class AllDayEventsUpdater<T : Any>(
8+
internal class AllDayEventsUpdater(
99
private val viewState: ViewState,
10-
private val cache: WeekViewCache<T>,
11-
private val chipsCache: EventChipsCache<T>
10+
private val cache: WeekViewCache,
11+
private val chipsCache: EventChipsCache
1212
) : Updater {
1313

14-
private val boundsCalculator = EventChipBoundsCalculator<T>(viewState)
14+
private val boundsCalculator = EventChipBoundsCalculator(viewState)
1515
private val spannableStringBuilder = SpannableStringBuilder()
1616

1717
private var previousHorizontalOrigin: Float? = null
@@ -25,7 +25,7 @@ internal class AllDayEventsUpdater<T : Any>(
2525
}
2626

2727
override fun update() {
28-
cache.clearAllDayEventLayouts()
28+
cache.allDayEventLayouts.clear()
2929

3030
val datesWithStartPixels = viewState.dateRangeWithStartPixels
3131
for ((date, startPixel) in datesWithStartPixels) {
@@ -50,7 +50,7 @@ internal class AllDayEventsUpdater<T : Any>(
5050
}
5151

5252
private fun calculateTextLayout(
53-
eventChip: EventChip<T>,
53+
eventChip: EventChip,
5454
startPixel: Float
5555
) {
5656
val chipRect = boundsCalculator.calculateAllDayEvent(eventChip, startPixel)
@@ -64,9 +64,7 @@ internal class AllDayEventsUpdater<T : Any>(
6464
}
6565
}
6666

67-
private fun calculateChipTextLayout(
68-
eventChip: EventChip<T>
69-
): StaticLayout? {
67+
private fun calculateChipTextLayout(eventChip: EventChip): StaticLayout? {
7068
val event = eventChip.event
7169
val bounds = checkNotNull(eventChip.bounds)
7270

@@ -120,7 +118,7 @@ internal class AllDayEventsUpdater<T : Any>(
120118
* Creates a dummy text layout that is only used to determine the height of all-day events.
121119
*/
122120
private fun createDummyTextLayout(
123-
event: ResolvedWeekViewEvent<T>
121+
event: ResolvedWeekViewEvent<*>
124122
): StaticLayout {
125123
if (dummyTextLayout == null) {
126124
val textPaint = viewState.getTextPaint(event)
@@ -129,7 +127,7 @@ internal class AllDayEventsUpdater<T : Any>(
129127
return checkNotNull(dummyTextLayout)
130128
}
131129

132-
private fun EventChip<T>.ellipsizeText(
130+
private fun EventChip.ellipsizeText(
133131
text: CharSequence,
134132
availableWidth: Int,
135133
existingTextLayout: StaticLayout

core/src/main/java/com/alamkanak/weekview/DayLabelsDrawer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package com.alamkanak.weekview
33
import android.graphics.Canvas
44
import java.util.Calendar
55

6-
internal class DayLabelsDrawer<T>(
6+
internal class DayLabelsDrawer(
77
private val viewState: ViewState,
8-
private val cache: WeekViewCache<T>
8+
private val cache: WeekViewCache
99
) : Drawer {
1010

1111
override fun draw(canvas: Canvas) {

core/src/main/java/com/alamkanak/weekview/EventChip.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,24 @@ import android.graphics.RectF
1212
* The original [ResolvedWeekViewEvent] is accessible via [originalEvent]. The
1313
* [ResolvedWeekViewEvent] that corresponds to the drawn rectangle is accessible via [event].
1414
*/
15-
internal data class EventChip<T>(
15+
internal data class EventChip(
1616
/**
1717
* The [ResolvedWeekViewEvent] corresponding to the drawn rectangle. It might differ from
1818
* [originalEvent], which may be a multi-day event.
1919
*/
20-
val event: ResolvedWeekViewEvent<T>,
20+
val event: ResolvedWeekViewEvent<*>,
2121
/**
2222
* The original [ResolvedWeekViewEvent], which may be a multi-day event.
2323
*/
24-
val originalEvent: ResolvedWeekViewEvent<T>
24+
val originalEvent: ResolvedWeekViewEvent<*>
2525
) {
2626

27+
/**
28+
* The ID of the [ResolvedWeekViewEvent] that this [EventChip] represents.
29+
*/
30+
val eventId: Long
31+
get() = originalEvent.id
32+
2733
/**
2834
* The rectangle in which the [ResolvedWeekViewEvent] will be drawn.
2935
*/

core/src/main/java/com/alamkanak/weekview/EventChipBoundsCalculator.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package com.alamkanak.weekview
22

33
import android.graphics.RectF
44

5-
internal class EventChipBoundsCalculator<T>(
5+
internal class EventChipBoundsCalculator(
66
private val viewState: ViewState
77
) {
88

99
fun calculateSingleEvent(
10-
eventChip: EventChip<T>,
10+
eventChip: EventChip,
1111
startPixel: Float
1212
): RectF {
1313
val widthPerDay = viewState.widthPerDay
@@ -47,7 +47,7 @@ internal class EventChipBoundsCalculator<T>(
4747
}
4848

4949
fun calculateAllDayEvent(
50-
eventChip: EventChip<T>,
50+
eventChip: EventChip,
5151
startPixel: Float
5252
): RectF {
5353
val top = viewState.headerTextHeight + viewState.headerRowPadding * 1.5f

core/src/main/java/com/alamkanak/weekview/EventChipDrawer.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ import android.text.SpannableStringBuilder
88
import android.text.StaticLayout
99
import android.text.style.StyleSpan
1010

11-
internal class EventChipDrawer<T>(
11+
internal class EventChipDrawer(
1212
private val viewState: ViewState
1313
) {
1414

15-
private val textFitter = TextFitter<T>(viewState)
15+
private val textFitter = TextFitter(viewState)
1616
private val textLayoutCache = mutableMapOf<Long, StaticLayout>()
1717

1818
private val backgroundPaint = Paint()
1919
private val borderPaint = Paint()
2020

2121
internal fun draw(
22-
eventChip: EventChip<T>,
22+
eventChip: EventChip,
2323
canvas: Canvas,
2424
textLayout: StaticLayout? = null
2525
) {
@@ -51,7 +51,7 @@ internal class EventChipDrawer<T>(
5151
}
5252

5353
private fun drawCornersForMultiDayEvents(
54-
eventChip: EventChip<T>,
54+
eventChip: EventChip,
5555
cornerRadius: Float,
5656
canvas: Canvas
5757
) {
@@ -77,7 +77,7 @@ internal class EventChipDrawer<T>(
7777
}
7878

7979
private fun drawStroke(
80-
eventChip: EventChip<T>,
80+
eventChip: EventChip,
8181
canvas: Canvas
8282
) {
8383
val event = eventChip.event
@@ -110,7 +110,7 @@ internal class EventChipDrawer<T>(
110110
}
111111

112112
private fun drawEventTitle(
113-
eventChip: EventChip<T>,
113+
eventChip: EventChip,
114114
textLayout: StaticLayout,
115115
canvas: Canvas
116116
) {
@@ -127,7 +127,7 @@ internal class EventChipDrawer<T>(
127127
}
128128

129129
private fun calculateTextHeightAndDrawTitle(
130-
eventChip: EventChip<T>,
130+
eventChip: EventChip,
131131
canvas: Canvas
132132
) {
133133
val event = eventChip.event
@@ -183,7 +183,7 @@ internal class EventChipDrawer<T>(
183183
}
184184

185185
private fun updateBackgroundPaint(
186-
event: ResolvedWeekViewEvent<T>,
186+
event: ResolvedWeekViewEvent<*>,
187187
paint: Paint
188188
) {
189189
paint.color = event.style.backgroundColor ?: viewState.defaultEventColor
@@ -193,7 +193,7 @@ internal class EventChipDrawer<T>(
193193
}
194194

195195
private fun updateBorderPaint(
196-
event: ResolvedWeekViewEvent<T>,
196+
event: ResolvedWeekViewEvent<*>,
197197
paint: Paint
198198
) {
199199
paint.color = event.style.borderColor ?: viewState.defaultEventColor

core/src/main/java/com/alamkanak/weekview/EventChipsCache.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ package com.alamkanak.weekview
33
import java.util.Calendar
44
import java.util.concurrent.ConcurrentHashMap
55

6-
internal class EventChipsCache<T> {
6+
internal class EventChipsCache {
77

8-
val allEventChips: List<EventChip<T>>
8+
val allEventChips: List<EventChip>
99
get() = normalEventChipsByDate.values.flatten() + allDayEventChipsByDate.values.flatten()
1010

11-
private val normalEventChipsByDate = ConcurrentHashMap<Long, MutableList<EventChip<T>>>()
12-
private val allDayEventChipsByDate = ConcurrentHashMap<Long, MutableList<EventChip<T>>>()
11+
private val normalEventChipsByDate = ConcurrentHashMap<Long, MutableList<EventChip>>()
12+
private val allDayEventChipsByDate = ConcurrentHashMap<Long, MutableList<EventChip>>()
1313

1414
fun allEventChipsInDateRange(
1515
dateRange: List<Calendar>
16-
): List<EventChip<T>> {
17-
val results = mutableListOf<EventChip<T>>()
16+
): List<EventChip> {
17+
val results = mutableListOf<EventChip>()
1818
for (date in dateRange) {
1919
results += allDayEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
2020
results += normalEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
@@ -24,23 +24,23 @@ internal class EventChipsCache<T> {
2424

2525
fun normalEventChipsByDate(
2626
date: Calendar
27-
): List<EventChip<T>> = normalEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
27+
): List<EventChip> = normalEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
2828

2929
fun allDayEventChipsByDate(
3030
date: Calendar
31-
): List<EventChip<T>> = allDayEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
31+
): List<EventChip> = allDayEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
3232

3333
fun allDayEventChipsInDateRange(
3434
dateRange: List<Calendar>
35-
): List<EventChip<T>> {
36-
val results = mutableListOf<EventChip<T>>()
35+
): List<EventChip> {
36+
val results = mutableListOf<EventChip>()
3737
for (date in dateRange) {
3838
results += allDayEventChipsByDate[date.atStartOfDay.timeInMillis].orEmpty()
3939
}
4040
return results
4141
}
4242

43-
private fun put(newChips: List<EventChip<T>>) {
43+
private fun put(newChips: List<EventChip>) {
4444
for (eventChip in newChips) {
4545
val key = eventChip.event.startTime.atStartOfDay.timeInMillis
4646
if (eventChip.event.isAllDay) {
@@ -51,20 +51,20 @@ internal class EventChipsCache<T> {
5151
}
5252
}
5353

54-
operator fun plusAssign(newChips: List<EventChip<T>>) = put(newChips)
54+
operator fun plusAssign(newChips: List<EventChip>) = put(newChips)
5555

5656
fun clearSingleEventsCache() {
57-
allEventChips.filter { it.originalEvent.isNotAllDay }.forEach(EventChip<T>::clearCache)
57+
allEventChips.filter { it.originalEvent.isNotAllDay }.forEach(EventChip::clearCache)
5858
}
5959

6060
fun clear() {
6161
allDayEventChipsByDate.clear()
6262
normalEventChipsByDate.clear()
6363
}
6464

65-
private fun <T> ConcurrentHashMap<Long, MutableList<EventChip<T>>>.addOrReplace(
65+
private fun ConcurrentHashMap<Long, MutableList<EventChip>>.addOrReplace(
6666
key: Long,
67-
eventChip: EventChip<T>
67+
eventChip: EventChip
6868
) {
6969
val results = getOrElse(key) { mutableListOf() }
7070
val indexOfExisting = results.indexOfFirst { it.event.id == eventChip.event.id }

0 commit comments

Comments
 (0)