From 87cf2871a7e98c3d8d153f56cd43e725aeea7ab9 Mon Sep 17 00:00:00 2001 From: TruffelNL <16107161+TruffelNL@users.noreply.github.com> Date: Tue, 15 Aug 2017 23:02:58 +0200 Subject: [PATCH 1/3] Added bundled notifications Added bundled/grouped/stacked notifications as per https://github.com/iSoron/uhabits/issues/243 --- .../notifications/AndroidNotificationTray.kt | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index 1a13d417f..054b41ec1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -22,6 +22,7 @@ package org.isoron.uhabits.notifications import android.app.* import android.content.* import android.graphics.BitmapFactory.* +import android.support.annotation.NonNull import android.support.v4.app.* import android.support.v4.app.NotificationCompat.* import org.isoron.androidbase.* @@ -40,16 +41,44 @@ class AndroidNotificationTray private val pendingIntents: PendingIntentFactory, private val preferences: Preferences, private val ringtoneManager: RingtoneManager + ) : NotificationTray.SystemTray { - override fun removeNotification(id: Int) { + val generalLoopNotificationGroup = "generalLoopHabitsNotificationGroup" + + var summaryShown = false + + override fun removeNotification(id: Int) + { NotificationManagerCompat.from(context).cancel(id) } override fun showNotification(habit: Habit, notificationId: Int, 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( R.drawable.ic_action_check, @@ -71,7 +100,7 @@ class AndroidNotificationTray .addAction(checkAction) .addAction(snoozeAction) - val notification = NotificationCompat.Builder(context) + return NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(habit.name) .setContentText(habit.description) @@ -84,11 +113,20 @@ class AndroidNotificationTray .setWhen(reminderTime) .setShowWhen(true) .setOngoing(preferences.shouldMakeNotificationsSticky()) + .setGroup(generalLoopNotificationGroup) .build() + } - val notificationManager = context.getSystemService( - Activity.NOTIFICATION_SERVICE) as NotificationManager - - notificationManager.notify(notificationId, notification) + @NonNull + fun buildSummary(@NonNull reminderTime: Long) : 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() } } From 1c2abb543bc360428e6d1006610d21c52b6453de Mon Sep 17 00:00:00 2001 From: TruffelNL <16107161+TruffelNL@users.noreply.github.com> Date: Tue, 15 Aug 2017 23:09:19 +0200 Subject: [PATCH 2/3] Added private variables --- .../isoron/uhabits/notifications/AndroidNotificationTray.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index 054b41ec1..cb267326a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -44,9 +44,9 @@ class AndroidNotificationTray ) : NotificationTray.SystemTray { - val generalLoopNotificationGroup = "generalLoopHabitsNotificationGroup" + private val generalLoopNotificationGroup = "generalLoopHabitsNotificationGroup" - var summaryShown = false + private var summaryShown = false override fun removeNotification(id: Int) { From f6620be2d9a5633d2a27cfed96f813a6923fcf49 Mon Sep 17 00:00:00 2001 From: TruffelNL <16107161+TruffelNL@users.noreply.github.com> Date: Tue, 15 Aug 2017 23:44:41 +0200 Subject: [PATCH 3/3] Removed an if statement Removed the check if a summary was already shown. --- .../uhabits/notifications/AndroidNotificationTray.kt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index cb267326a..5240605bb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -46,8 +46,6 @@ class AndroidNotificationTray private val generalLoopNotificationGroup = "generalLoopHabitsNotificationGroup" - private var summaryShown = false - override fun removeNotification(id: Int) { NotificationManagerCompat.from(context).cancel(id) @@ -60,14 +58,9 @@ class AndroidNotificationTray { val notificationManager = NotificationManagerCompat.from(context) - if(! summaryShown) - { - val summary = buildSummary(reminderTime) - - notificationManager.notify(Int.MAX_VALUE, summary) + val summary = buildSummary(reminderTime) - summaryShown = true - } + notificationManager.notify(Int.MAX_VALUE, summary) val notification = buildNotification(habit, reminderTime, timestamp)