Added bundled notifications

Added bundled/grouped/stacked notifications as per https://github.com/iSoron/uhabits/issues/243
pull/322/head
TruffelNL 8 years ago
parent dccf5eae47
commit 87cf2871a7

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

Loading…
Cancel
Save