package com.tommasoberlose.anotherwidget.helpers import android.Manifest import android.content.Context import android.content.Intent import android.provider.CalendarContract import com.tommasoberlose.anotherwidget.services.EventListenerJob import com.tommasoberlose.anotherwidget.models.Event import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.services.UpdateCalendarService 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) { UpdateCalendarService.enqueueWork(context) } fun getCalendarList(context: Context): List { val calendarList = ArrayList() 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 { return Preferences.calendarFilter.split(",").map { it.replace(" ", "") } .filter { it != "" }.map { it.toLong() } } fun filterCalendar(list: List) { Preferences.calendarFilter = list.joinToString(separator = ",", prefix = " ") } fun setEventUpdatesAndroidN(context: Context) { EventListenerJob.schedule(context) } fun removeEventUpdatesAndroidN(context: Context) { EventListenerJob.remove(context) } fun List.applyFilters() : List { 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.sortEvents(): List { 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) } } } }