diff options
Diffstat (limited to 'src/com/android/calendar/alerts/AlertService.kt')
-rw-r--r-- | src/com/android/calendar/alerts/AlertService.kt | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/src/com/android/calendar/alerts/AlertService.kt b/src/com/android/calendar/alerts/AlertService.kt new file mode 100644 index 00000000..bc1b4e04 --- /dev/null +++ b/src/com/android/calendar/alerts/AlertService.kt @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.calendar.alerts + +import android.app.Notification +import android.app.NotificationManager +import android.app.Service +import android.content.Intent +import android.os.IBinder +import android.os.Looper +import android.provider.CalendarContract.CalendarAlerts +import java.util.ArrayList + +/** + * This service is used to handle calendar event reminders. + */ +class AlertService : Service() { + @Volatile + private var mServiceLooper: Looper? = null + + // Added wrapper for testing + class NotificationWrapper { + var mNotification: Notification + var mEventId: Long = 0 + var mBegin: Long = 0 + var mEnd: Long = 0 + var mNw: ArrayList<NotificationWrapper>? = null + + constructor( + n: Notification, + notificationId: Int, + eventId: Long, + startMillis: Long, + endMillis: Long, + doPopup: Boolean + ) { + mNotification = n + mEventId = eventId + mBegin = startMillis + mEnd = endMillis + + // popup? + // notification id? + } + + constructor(n: Notification) { + mNotification = n + } + + fun add(nw: NotificationWrapper?) { + val temp = mNw + if (temp == null) { + mNw = ArrayList<NotificationWrapper>() + } + mNw?.add(nw as AlertService.NotificationWrapper) + } + } + + // Added wrapper for testing + class NotificationMgrWrapper(nm: NotificationManager) : NotificationMgr() { + var mNm: NotificationManager + @Override + override fun cancel(id: Int) { + mNm.cancel(id) + } + + @Override + override fun notify(id: Int, nw: NotificationWrapper?) { + mNm.notify(id, nw?.mNotification) + } + + init { + mNm = nm + } + } + + internal class NotificationInfo( + var eventName: String, + var location: String, + var description: String, + var startMillis: Long, + var endMillis: Long, + var eventId: Long, + var allDay: Boolean, + var newAlert: Boolean + ) + + @Override + override fun onCreate() { + } + + @Override + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + return START_REDELIVER_INTENT + } + + @Override + override fun onDestroy() { + mServiceLooper?.quit() + } + + @Override + override fun onBind(intent: Intent?): IBinder? { + return null + } + + companion object { + const val DEBUG = true + private const val TAG = "AlertService" + val ALERT_PROJECTION = arrayOf<String>( + CalendarAlerts._ID, // 0 + CalendarAlerts.EVENT_ID, // 1 + CalendarAlerts.STATE, // 2 + CalendarAlerts.TITLE, // 3 + CalendarAlerts.EVENT_LOCATION, // 4 + CalendarAlerts.SELF_ATTENDEE_STATUS, // 5 + CalendarAlerts.ALL_DAY, // 6 + CalendarAlerts.ALARM_TIME, // 7 + CalendarAlerts.MINUTES, // 8 + CalendarAlerts.BEGIN, // 9 + CalendarAlerts.END, // 10 + CalendarAlerts.DESCRIPTION + ) + private const val ALERT_INDEX_ID = 0 + private const val ALERT_INDEX_EVENT_ID = 1 + private const val ALERT_INDEX_STATE = 2 + private const val ALERT_INDEX_TITLE = 3 + private const val ALERT_INDEX_EVENT_LOCATION = 4 + private const val ALERT_INDEX_SELF_ATTENDEE_STATUS = 5 + private const val ALERT_INDEX_ALL_DAY = 6 + private const val ALERT_INDEX_ALARM_TIME = 7 + private const val ALERT_INDEX_MINUTES = 8 + private const val ALERT_INDEX_BEGIN = 9 + private const val ALERT_INDEX_END = 10 + private const val ALERT_INDEX_DESCRIPTION = 11 + private val ACTIVE_ALERTS_SELECTION = ("(" + CalendarAlerts.STATE.toString() + "=? OR " + + CalendarAlerts.STATE.toString() + "=?) AND " + + CalendarAlerts.ALARM_TIME.toString() + "<=") + private val ACTIVE_ALERTS_SELECTION_ARGS = arrayOf<String>( + Integer.toString(CalendarAlerts.STATE_FIRED), + Integer.toString(CalendarAlerts.STATE_SCHEDULED) + ) + private const val ACTIVE_ALERTS_SORT = "begin DESC, end DESC" + private val DISMISS_OLD_SELECTION: String = (CalendarAlerts.END.toString() + "<? AND " + + CalendarAlerts.STATE + "=?") + private const val MINUTE_MS = 60 * 1000 + + // The grace period before changing a notification's priority bucket. + private const val MIN_DEPRIORITIZE_GRACE_PERIOD_MS = 15 * MINUTE_MS + + // Hard limit to the number of notifications displayed. + const val MAX_NOTIFICATIONS = 20 + } +}
\ No newline at end of file |