2017-10-10 14:52:12 +02:00

128 lines
5.1 KiB
Kotlin

package com.tommasoberlose.anotherwidget.util
import android.Manifest
import android.annotation.SuppressLint
import android.content.ContentUris
import android.content.Context
import android.content.SharedPreferences
import android.preference.PreferenceManager
import android.provider.CalendarContract
import android.util.Log
import com.tommasoberlose.anotherwidget.`object`.CalendarSelector
import com.tommasoberlose.anotherwidget.`object`.Constants
import com.tommasoberlose.anotherwidget.`object`.Event
import java.util.*
/**
* Created by tommaso on 08/10/17.
*/
object CalendarUtil {
fun updateEventList(context: Context) {
val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
val eventList = ArrayList<Event>()
val now = Calendar.getInstance()
val hourLimit = Calendar.getInstance()
hourLimit.add(Calendar.HOUR, 6)
val builder = CalendarContract.Instances.CONTENT_URI.buildUpon()
ContentUris.appendId(builder, now.timeInMillis)
ContentUris.appendId(builder, hourLimit.timeInMillis)
if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) {
resetNextEventData(context)
}
val instanceCursor = context.contentResolver.query(builder.build(), arrayOf(CalendarContract.Instances.EVENT_ID, CalendarContract.Instances.BEGIN, CalendarContract.Instances.END), null, null, null)
instanceCursor.moveToFirst()
for (i in 0 until instanceCursor.count) {
val ID = instanceCursor.getInt(0)
val eventCursor = context.contentResolver.query(CalendarContract.Events.CONTENT_URI, arrayOf(CalendarContract.Events.TITLE, CalendarContract.Events.ALL_DAY, CalendarContract.Events.CALENDAR_ID),
CalendarContract.Events._ID + " is ?",
arrayOf(Integer.toString(ID)), null)
eventCursor.moveToFirst()
for (j in 0 until eventCursor.count) {
val e = Event(eventCursor, instanceCursor)
val allDay: Boolean = !eventCursor.getString(1).equals("0")
if (e.endDate - now.timeInMillis > 1000 * 60 * 30 && (SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false) || !allDay) && !(SP.getString(Constants.PREF_CALENDAR_FILTER, "").contains(" " + e.calendarID + ","))) {
eventList.add(e)
}
eventCursor.moveToNext()
}
eventCursor.close()
instanceCursor.moveToNext()
}
instanceCursor.close()
if (eventList.isEmpty()) {
resetNextEventData(context)
} else {
saveNextEventData(context, eventList.get(0))
}
}
fun getCalendarList(context: Context): List<CalendarSelector> {
val calendarList = ArrayList<CalendarSelector>()
if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) {
return calendarList
}
val calendarCursor = context.contentResolver.query(CalendarContract.Calendars.CONTENT_URI,
arrayOf(CalendarContract.Calendars._ID, CalendarContract.Calendars.NAME, CalendarContract.Calendars.ACCOUNT_NAME),
null,
null,
null) ?: return calendarList
calendarCursor.moveToFirst()
for (j in 0 until calendarCursor.count) {
calendarList.add(CalendarSelector(calendarCursor.getInt(0), calendarCursor.getString(1), calendarCursor.getString(2)))
calendarCursor.moveToNext()
}
calendarCursor.close()
return calendarList
}
fun resetNextEventData(context: Context) {
val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
SP.edit()
.remove(Constants.PREF_NEXT_EVENT_ID)
.remove(Constants.PREF_NEXT_EVENT_NAME)
.remove(Constants.PREF_NEXT_EVENT_START_DATE)
.remove(Constants.PREF_NEXT_EVENT_END_DATE)
.remove(Constants.PREF_NEXT_EVENT_CALENDAR_ID)
.apply()
}
@SuppressLint("ApplySharedPref")
fun saveNextEventData(context: Context, event: Event) {
val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
SP.edit()
.putInt(Constants.PREF_NEXT_EVENT_ID, event.id)
.putString(Constants.PREF_NEXT_EVENT_NAME, event.title)
.putLong(Constants.PREF_NEXT_EVENT_START_DATE, event.startDate)
.putLong(Constants.PREF_NEXT_EVENT_END_DATE, event.endDate)
.putInt(Constants.PREF_NEXT_EVENT_CALENDAR_ID, event.calendarID)
.commit()
Util.updateWidget(context)
}
fun getNextEvent(context: Context): Event {
val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
return Event(SP.getInt(Constants.PREF_NEXT_EVENT_ID, 0), SP.getString(Constants.PREF_NEXT_EVENT_NAME, ""), SP.getLong(Constants.PREF_NEXT_EVENT_START_DATE, 0), SP.getLong(Constants.PREF_NEXT_EVENT_END_DATE, 0), SP.getInt(Constants.PREF_NEXT_EVENT_CALENDAR_ID, 0))
}
}