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 { dependencies {
implementation 'com.simplemobiletools:commons:3.8.11' implementation 'com.simplemobiletools:commons:3.9.7'
implementation 'joda-time:joda-time:2.9.9' implementation 'joda-time:joda-time:2.9.9'
implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.android.support:multidex:1.0.2' implementation 'com.android.support:multidex:1.0.2'

View File

@ -119,6 +119,10 @@
android:label="@string/event_types" android:label="@string/event_types"
android:parentActivityName=".activities.SettingsActivity"/> android:parentActivityName=".activities.SettingsActivity"/>
<activity
android:name=".activities.SnoozeReminderActivity"
android:theme="@style/Theme.Transparent"/>
<receiver <receiver
android:name=".helpers.MyWidgetMonthlyProvider" android:name=".helpers.MyWidgetMonthlyProvider"
android:icon="@drawable/img_widget_monthly_preview" android:icon="@drawable/img_widget_monthly_preview"
@ -149,8 +153,6 @@
android:name=".services.WidgetService" android:name=".services.WidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"/> android:permission="android.permission.BIND_REMOTEVIEWS"/>
<service android:name=".services.SnoozeService"/>
<receiver android:name=".receivers.NotificationReceiver"/> <receiver android:name=".receivers.NotificationReceiver"/>
<receiver android:name=".receivers.CalDAVSyncReceiver"/> <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") 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() hideKeyboard()
val minutes = TreeSet<Int>() val minutes = TreeSet<Int>()
minutes.apply { minutes.apply {
add(-1) if (!isSnoozePicker) {
add(0) add(-1)
add(0)
}
add(5)
add(10) add(10)
add(20)
add(30) add(30)
add(60)
add(curMinutes) add(curMinutes)
} }
val items = ArrayList<RadioItem>(minutes.size + 1) val items = ArrayList<RadioItem>(minutes.size + 1)
minutes.mapIndexedTo(items, { index, value -> minutes.mapIndexedTo(items, { index, value ->
RadioItem(index, getFormattedMinutes(value), value) RadioItem(index, getFormattedMinutes(value, !isSnoozePicker), value)
}) })
var selectedIndex = 0 var selectedIndex = 0
minutes.forEachIndexed { index, value -> minutes.forEachIndexed { index, value ->
if (value == curMinutes) if (value == curMinutes) {
selectedIndex = index selectedIndex = index
}
} }
items.add(RadioItem(-2, getString(R.string.custom))) items.add(RadioItem(-2, getString(R.string.custom)))
RadioGroupDialog(this, items, selectedIndex) { RadioGroupDialog(this, items, selectedIndex, showOKButton = isSnoozePicker, cancelCallback = cancelCallback) {
if (it == -2) { if (it == -2) {
CustomEventReminderDialog(this) { CustomEventReminderDialog(this) {
callback(it) callback(it)

View File

@ -23,12 +23,12 @@ import com.simplemobiletools.calendar.BuildConfig
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.EventActivity
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.activities.SnoozeReminderActivity
import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.*
import com.simplemobiletools.calendar.helpers.Formatter import com.simplemobiletools.calendar.helpers.Formatter
import com.simplemobiletools.calendar.models.* import com.simplemobiletools.calendar.models.*
import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver
import com.simplemobiletools.calendar.receivers.NotificationReceiver import com.simplemobiletools.calendar.receivers.NotificationReceiver
import com.simplemobiletools.calendar.services.SnoozeService
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import org.joda.time.DateTime import org.joda.time.DateTime
import org.joda.time.DateTimeZone import org.joda.time.DateTimeZone
@ -217,11 +217,13 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even
.setChannelId(channelId) .setChannelId(channelId)
.addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event)) .addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event))
if (context.isLollipopPlus()) if (context.isLollipopPlus()) {
builder.setVisibility(Notification.VISIBILITY_PUBLIC) builder.setVisibility(Notification.VISIBILITY_PUBLIC)
}
if (context.config.vibrateOnReminder) if (context.config.vibrateOnReminder) {
builder.setVibrate(longArrayOf(0, 300, 300, 300)) builder.setVibrate(longArrayOf(0, 300, 300, 300))
}
return builder.build() return builder.build()
} }
@ -236,10 +238,9 @@ private fun getPendingIntent(context: Context, event: Event): PendingIntent {
} }
private fun getSnoozePendingIntent(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_ID, event.id)
intent.putExtra(EVENT_OCCURRENCE_TS, event.startTS) return PendingIntent.getActivity(context, event.id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
return PendingIntent.getService(context, event.id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
} }
fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode(this)) { 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)
}
}
}