mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-04 20:47:42 +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 {
|
||||
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'
|
||||
|
@ -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"/>
|
||||
|
@ -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")
|
||||
}
|
||||
|
||||
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)
|
||||
|
@ -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)) {
|
||||
|
@ -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