1. Adapt the location callback in WeatherWorker to coroutines 2. Merge EventListenerJob into UpdateCalendarWorker 3. Remove BatteryListenerJob, as it's impossible to use Jobs to detect battery status
92 lines
3.4 KiB
Kotlin
92 lines
3.4 KiB
Kotlin
package com.tommasoberlose.anotherwidget.helpers
|
|
|
|
import android.Manifest
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.provider.CalendarContract
|
|
import com.tommasoberlose.anotherwidget.models.Event
|
|
import com.tommasoberlose.anotherwidget.global.Preferences
|
|
import com.tommasoberlose.anotherwidget.services.UpdateCalendarWorker
|
|
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
|
import me.everything.providers.android.calendar.CalendarProvider
|
|
import java.util.*
|
|
import kotlin.collections.ArrayList
|
|
|
|
/**
|
|
* Created by tommaso on 08/10/17.
|
|
*/
|
|
|
|
object CalendarHelper {
|
|
fun updateEventList(context: Context) {
|
|
UpdateCalendarWorker.enqueue(context)
|
|
}
|
|
|
|
fun getCalendarList(context: Context): List<me.everything.providers.android.calendar.Calendar> {
|
|
val calendarList = ArrayList<me.everything.providers.android.calendar.Calendar>()
|
|
|
|
if (!context.checkGrantedPermission(
|
|
Manifest.permission.READ_CALENDAR
|
|
)
|
|
) {
|
|
return calendarList
|
|
}
|
|
val provider = CalendarProvider(context)
|
|
val data = provider.calendars
|
|
return if (data != null) {
|
|
data.list
|
|
} else {
|
|
calendarList
|
|
}
|
|
}
|
|
|
|
fun getFilteredCalendarIdList(): List<Long> {
|
|
return Preferences.calendarFilter.split(",").map { it.replace(" ", "") }
|
|
.filter { it != "" }.map { it.toLong() }
|
|
}
|
|
|
|
fun filterCalendar(list: List<Long>) {
|
|
Preferences.calendarFilter = list.joinToString(separator = ",", prefix = " ")
|
|
}
|
|
|
|
fun setEventUpdatesAndroidN(context: Context) {
|
|
UpdateCalendarWorker.enqueueTrigger(context)
|
|
}
|
|
|
|
fun removeEventUpdatesAndroidN(context: Context) {
|
|
UpdateCalendarWorker.cancelTrigger(context)
|
|
}
|
|
|
|
fun List<Event>.applyFilters() : List<Event> {
|
|
return this
|
|
.asSequence()
|
|
.filter { (Preferences.showDeclinedEvents || it.selfAttendeeStatus != CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED) }
|
|
.filter { (Preferences.showAcceptedEvents || it.selfAttendeeStatus != CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED) }
|
|
.filter { (Preferences.showInvitedEvents || it.selfAttendeeStatus != CalendarContract.Attendees.ATTENDEE_STATUS_INVITED) }
|
|
.filter { (Preferences.calendarAllDay || !it.allDay) }
|
|
.filter { (!Preferences.showOnlyBusyEvents || it.availability != CalendarContract.EventsEntity.AVAILABILITY_FREE) }
|
|
.toList()
|
|
}
|
|
|
|
fun List<Event>.sortEvents(): List<Event> {
|
|
return sortedWith { event: Event, event1: Event ->
|
|
val date = Calendar.getInstance().apply { timeInMillis = event.startDate }
|
|
val date1 = Calendar.getInstance().apply { timeInMillis = event1.startDate }
|
|
|
|
if (date.get(Calendar.DAY_OF_YEAR) == date1.get(Calendar.DAY_OF_YEAR) && date.get(
|
|
Calendar.YEAR) == date1.get(Calendar.YEAR)
|
|
) {
|
|
if (event.allDay && event1.allDay) {
|
|
event.startDate.compareTo(event1.startDate)
|
|
} else if (event.allDay) {
|
|
1
|
|
} else if (event1.allDay) {
|
|
-1
|
|
} else {
|
|
event.startDate.compareTo(event1.startDate)
|
|
}
|
|
} else {
|
|
event.startDate.compareTo(event1.startDate)
|
|
}
|
|
}
|
|
}
|
|
} |