summaryrefslogtreecommitdiff
path: root/src/com/android/calendar/alerts/AlertService.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/calendar/alerts/AlertService.kt')
-rw-r--r--src/com/android/calendar/alerts/AlertService.kt167
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