mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Added bundled notifications
Added bundled/grouped/stacked notifications as per https://github.com/iSoron/uhabits/issues/243
This commit is contained in:
@@ -22,6 +22,7 @@ package org.isoron.uhabits.notifications
|
|||||||
import android.app.*
|
import android.app.*
|
||||||
import android.content.*
|
import android.content.*
|
||||||
import android.graphics.BitmapFactory.*
|
import android.graphics.BitmapFactory.*
|
||||||
|
import android.support.annotation.NonNull
|
||||||
import android.support.v4.app.*
|
import android.support.v4.app.*
|
||||||
import android.support.v4.app.NotificationCompat.*
|
import android.support.v4.app.NotificationCompat.*
|
||||||
import org.isoron.androidbase.*
|
import org.isoron.androidbase.*
|
||||||
@@ -40,16 +41,44 @@ class AndroidNotificationTray
|
|||||||
private val pendingIntents: PendingIntentFactory,
|
private val pendingIntents: PendingIntentFactory,
|
||||||
private val preferences: Preferences,
|
private val preferences: Preferences,
|
||||||
private val ringtoneManager: RingtoneManager
|
private val ringtoneManager: RingtoneManager
|
||||||
|
|
||||||
) : NotificationTray.SystemTray {
|
) : NotificationTray.SystemTray {
|
||||||
|
|
||||||
override fun removeNotification(id: Int) {
|
val generalLoopNotificationGroup = "generalLoopHabitsNotificationGroup"
|
||||||
|
|
||||||
|
var summaryShown = false
|
||||||
|
|
||||||
|
override fun removeNotification(id: Int)
|
||||||
|
{
|
||||||
NotificationManagerCompat.from(context).cancel(id)
|
NotificationManagerCompat.from(context).cancel(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showNotification(habit: Habit,
|
override fun showNotification(habit: Habit,
|
||||||
notificationId: Int,
|
notificationId: Int,
|
||||||
timestamp: Timestamp,
|
timestamp: Timestamp,
|
||||||
reminderTime: Long) {
|
reminderTime: Long)
|
||||||
|
{
|
||||||
|
val notificationManager = NotificationManagerCompat.from(context)
|
||||||
|
|
||||||
|
if(! summaryShown)
|
||||||
|
{
|
||||||
|
val summary = buildSummary(reminderTime)
|
||||||
|
|
||||||
|
notificationManager.notify(Int.MAX_VALUE, summary)
|
||||||
|
|
||||||
|
summaryShown = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val notification = buildNotification(habit, reminderTime, timestamp)
|
||||||
|
|
||||||
|
notificationManager.notify(notificationId, notification)
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
fun buildNotification(@NonNull habit: Habit,
|
||||||
|
@NonNull reminderTime: Long,
|
||||||
|
@NonNull timestamp: Timestamp) : Notification
|
||||||
|
{
|
||||||
|
|
||||||
val checkAction = Action(
|
val checkAction = Action(
|
||||||
R.drawable.ic_action_check,
|
R.drawable.ic_action_check,
|
||||||
@@ -71,7 +100,7 @@ class AndroidNotificationTray
|
|||||||
.addAction(checkAction)
|
.addAction(checkAction)
|
||||||
.addAction(snoozeAction)
|
.addAction(snoozeAction)
|
||||||
|
|
||||||
val notification = NotificationCompat.Builder(context)
|
return NotificationCompat.Builder(context)
|
||||||
.setSmallIcon(R.drawable.ic_notification)
|
.setSmallIcon(R.drawable.ic_notification)
|
||||||
.setContentTitle(habit.name)
|
.setContentTitle(habit.name)
|
||||||
.setContentText(habit.description)
|
.setContentText(habit.description)
|
||||||
@@ -84,11 +113,20 @@ class AndroidNotificationTray
|
|||||||
.setWhen(reminderTime)
|
.setWhen(reminderTime)
|
||||||
.setShowWhen(true)
|
.setShowWhen(true)
|
||||||
.setOngoing(preferences.shouldMakeNotificationsSticky())
|
.setOngoing(preferences.shouldMakeNotificationsSticky())
|
||||||
|
.setGroup(generalLoopNotificationGroup)
|
||||||
.build()
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
val notificationManager = context.getSystemService(
|
@NonNull
|
||||||
Activity.NOTIFICATION_SERVICE) as NotificationManager
|
fun buildSummary(@NonNull reminderTime: Long) : Notification
|
||||||
|
{
|
||||||
notificationManager.notify(notificationId, notification)
|
return NotificationCompat.Builder(context)
|
||||||
|
.setSmallIcon(R.drawable.ic_notification)
|
||||||
|
.setContentTitle(context.getString(R.string.app_name))
|
||||||
|
.setWhen(reminderTime)
|
||||||
|
.setShowWhen(true)
|
||||||
|
.setGroup(generalLoopNotificationGroup)
|
||||||
|
.setGroupSummary(true)
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user