diff --git a/app/build.gradle b/app/build.gradle index 45b9baf4b..b6a9abe16 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,7 +43,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.8.11' + implementation 'com.simplemobiletools:commons:3.9.7' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7bdfe96d0..bf49ce368 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -119,6 +119,10 @@ android:label="@string/event_types" android:parentActivityName=".activities.SettingsActivity"/> + + - - diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt new file mode 100644 index 000000000..fce53b522 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt @@ -0,0 +1,39 @@ +package com.simplemobiletools.calendar.activities + +import android.app.NotificationManager +import android.content.Context +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import com.simplemobiletools.calendar.extensions.config +import com.simplemobiletools.calendar.extensions.dbHelper +import com.simplemobiletools.calendar.extensions.scheduleEventIn +import com.simplemobiletools.calendar.extensions.showEventReminderDialog +import com.simplemobiletools.calendar.helpers.EVENT_ID + +class SnoozeReminderActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + showEventReminderDialog(config.snoozeDelay, true, cancelCallback = { dialogCancelled() }) { + val eventId = intent.getIntExtra(EVENT_ID, 0) + val event = dbHelper.getEventWithId(eventId) + config.snoozeDelay = it + + if (eventId != 0 && event != null) { + applicationContext.scheduleEventIn(System.currentTimeMillis() + it * 60000, event) + val manager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + manager.cancel(eventId) + } + finishActivity() + } + } + + private fun dialogCancelled() { + finishActivity() + } + + private fun finishActivity() { + finish() + overridePendingTransition(0, 0) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt index d2099fae0..41c540e9e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt @@ -45,31 +45,37 @@ fun BaseSimpleActivity.getTempFile(): File? { return File(folder, "events.ics") } -fun Activity.showEventReminderDialog(curMinutes: Int, callback: (minutes: Int) -> Unit) { +fun Activity.showEventReminderDialog(curMinutes: Int, isSnoozePicker: Boolean = false, cancelCallback: (() -> Unit)? = null, callback: (minutes: Int) -> Unit) { hideKeyboard() val minutes = TreeSet() minutes.apply { - add(-1) - add(0) + if (!isSnoozePicker) { + add(-1) + add(0) + } + add(5) add(10) + add(20) add(30) + add(60) add(curMinutes) } val items = ArrayList(minutes.size + 1) minutes.mapIndexedTo(items, { index, value -> - RadioItem(index, getFormattedMinutes(value), value) + RadioItem(index, getFormattedMinutes(value, !isSnoozePicker), value) }) var selectedIndex = 0 minutes.forEachIndexed { index, value -> - if (value == curMinutes) + if (value == curMinutes) { selectedIndex = index + } } items.add(RadioItem(-2, getString(R.string.custom))) - RadioGroupDialog(this, items, selectedIndex) { + RadioGroupDialog(this, items, selectedIndex, showOKButton = isSnoozePicker, cancelCallback = cancelCallback) { if (it == -2) { CustomEventReminderDialog(this) { callback(it) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 1a2940808..7e941a940 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -23,12 +23,12 @@ import com.simplemobiletools.calendar.BuildConfig import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.SimpleActivity +import com.simplemobiletools.calendar.activities.SnoozeReminderActivity import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.Formatter import com.simplemobiletools.calendar.models.* import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver import com.simplemobiletools.calendar.receivers.NotificationReceiver -import com.simplemobiletools.calendar.services.SnoozeService import com.simplemobiletools.commons.extensions.* import org.joda.time.DateTime import org.joda.time.DateTimeZone @@ -217,11 +217,13 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even .setChannelId(channelId) .addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event)) - if (context.isLollipopPlus()) + if (context.isLollipopPlus()) { builder.setVisibility(Notification.VISIBILITY_PUBLIC) + } - if (context.config.vibrateOnReminder) + if (context.config.vibrateOnReminder) { builder.setVibrate(longArrayOf(0, 300, 300, 300)) + } return builder.build() } @@ -236,10 +238,9 @@ private fun getPendingIntent(context: Context, event: Event): PendingIntent { } private fun getSnoozePendingIntent(context: Context, event: Event): PendingIntent { - val intent = Intent(context, SnoozeService::class.java).setAction("snooze") + val intent = Intent(context, SnoozeReminderActivity::class.java).setAction("snooze") intent.putExtra(EVENT_ID, event.id) - intent.putExtra(EVENT_OCCURRENCE_TS, event.startTS) - return PendingIntent.getService(context, event.id, intent, PendingIntent.FLAG_UPDATE_CURRENT) + return PendingIntent.getActivity(context, event.id, intent, PendingIntent.FLAG_UPDATE_CURRENT) } fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode(this)) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/services/SnoozeService.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/services/SnoozeService.kt deleted file mode 100644 index 03f06176b..000000000 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/services/SnoozeService.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.simplemobiletools.calendar.services - -import android.app.IntentService -import android.app.NotificationManager -import android.content.Context -import android.content.Intent -import com.simplemobiletools.calendar.extensions.config -import com.simplemobiletools.calendar.extensions.dbHelper -import com.simplemobiletools.calendar.extensions.scheduleEventIn -import com.simplemobiletools.calendar.helpers.EVENT_ID - -class SnoozeService : IntentService("Snooze") { - override fun onHandleIntent(intent: Intent) { - val eventId = intent.getIntExtra(EVENT_ID, 0) - val event = dbHelper.getEventWithId(eventId) - - if (eventId != 0 && event != null) { - applicationContext.scheduleEventIn(System.currentTimeMillis() + applicationContext.config.snoozeDelay * 60000, event) - val manager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - manager.cancel(eventId) - } - } -}