mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-10 00:40:38 +01:00
allow changing the Snooze interval after clicking Snooze
This commit is contained in:
parent
a9eee4ff50
commit
c671727270
@ -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'
|
||||||
|
@ -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"/>
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
@ -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)
|
||||||
|
@ -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)) {
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user