allow changing the Snooze interval after clicking Snooze

This commit is contained in:
tibbi 2018-02-01 16:10:32 +01:00
parent a9eee4ff50
commit c671727270
6 changed files with 63 additions and 38 deletions

View File

@ -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'

View File

@ -119,6 +119,10 @@
android:label="@string/event_types"
android:parentActivityName=".activities.SettingsActivity"/>
<activity
android:name=".activities.SnoozeReminderActivity"
android:theme="@style/Theme.Transparent"/>
<receiver
android:name=".helpers.MyWidgetMonthlyProvider"
android:icon="@drawable/img_widget_monthly_preview"
@ -149,8 +153,6 @@
android:name=".services.WidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"/>
<service android:name=".services.SnoozeService"/>
<receiver android:name=".receivers.NotificationReceiver"/>
<receiver android:name=".receivers.CalDAVSyncReceiver"/>

View File

@ -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)
}
}

View File

@ -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<Int>()
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<RadioItem>(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)

View File

@ -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)) {

View File

@ -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)
}
}
}