diff --git a/Examples/OneSignalDemo/app/build.gradle b/Examples/OneSignalDemo/app/build.gradle index b516efdad8..4586129d61 100644 --- a/Examples/OneSignalDemo/app/build.gradle +++ b/Examples/OneSignalDemo/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'kotlin-android' } android { diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java deleted file mode 100644 index 6f1c603da5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.util.Log; - -import com.onesignal.notifications.IActionButton; -import com.onesignal.notifications.IDisplayableMutableNotification; -import com.onesignal.notifications.INotificationReceivedEvent; -import com.onesignal.notifications.INotificationServiceExtension; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Tag; - -public class NotificationServiceExtension implements INotificationServiceExtension { - - @Override - public void onNotificationReceived(INotificationReceivedEvent event) { - Log.v(Tag.LOG_TAG, "IRemoteNotificationReceivedHandler fired" + " with INotificationReceivedEvent: " + event.toString()); - - IDisplayableMutableNotification notification = event.getNotification(); - - if (notification.getActionButtons() != null) { - for (IActionButton button : notification.getActionButtons()) { - Log.v(Tag.LOG_TAG, "ActionButton: " + button.toString()); - } - } - - notification.setExtender(builder -> builder.setColor(event.getContext().getResources().getColor(R.color.colorPrimary))); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.kt b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.kt new file mode 100644 index 0000000000..a20f32ff89 --- /dev/null +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.kt @@ -0,0 +1,33 @@ +package com.onesignal.sdktest.notification + +import android.graphics.Color +import android.util.Log +import androidx.core.app.NotificationCompat +import com.onesignal.notifications.INotificationReceivedEvent +import com.onesignal.notifications.INotificationServiceExtension +import com.onesignal.sdktest.R +import com.onesignal.sdktest.constant.Tag + +class NotificationServiceExtension : INotificationServiceExtension { + override fun onNotificationReceived(event: INotificationReceivedEvent) { + Log.v( + Tag.LOG_TAG, + "IRemoteNotificationReceivedHandler fired with INotificationReceivedEvent: $event" + ) + + val notification = event.notification + + if (notification.actionButtons != null) { + for (button in notification.actionButtons!!) { + Log.v( + Tag.LOG_TAG, + "ActionButton: $button" + ) + } + } + + notification.setExtender { builder: NotificationCompat.Builder -> + builder.setColor(Color.GREEN) + } + } +} diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/common/NotificationGenerationJob.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/common/NotificationGenerationJob.kt index 71f3ccc1d2..8249f321e1 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/common/NotificationGenerationJob.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/common/NotificationGenerationJob.kt @@ -27,8 +27,10 @@ class NotificationGenerationJob( var overriddenTitleFromExtender: CharSequence? = null var overriddenSound: Uri? = null var overriddenFlags: Int? = null + var overriddenColor: Int? = null var orgFlags: Int? = null var orgSound: Uri? = null + var orgColor: Int? = null constructor(jsonPayload: JSONObject, time: ITime) : this( Notification(jsonPayload, time), @@ -73,8 +75,10 @@ class NotificationGenerationJob( ", overriddenTitleFromExtender=" + overriddenTitleFromExtender + ", overriddenSound=" + overriddenSound + ", overriddenFlags=" + overriddenFlags + + ", overriddenColor=" + overriddenColor + ", orgFlags=" + orgFlags + ", orgSound=" + orgSound + + ", orgColor=" + orgColor + ", notification=" + notification + '}' } diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/NotificationDisplayer.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/NotificationDisplayer.kt index fe24d9e765..84573131a3 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/NotificationDisplayer.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/NotificationDisplayer.kt @@ -202,6 +202,8 @@ internal class NotificationDisplayer( var mNotification = mNotificationField[notificationBuilder] as Notification notificationJob.orgFlags = mNotification.flags notificationJob.orgSound = mNotification.sound + notificationJob.orgColor = mNotification.color + notificationBuilder!!.extend(notificationJob.notification!!.notificationExtender!!) mNotification = mNotificationField[notificationBuilder] as Notification val mContentTextField = @@ -214,6 +216,15 @@ internal class NotificationDisplayer( val mContentTitle = mContentTitleField[notificationBuilder] as CharSequence? notificationJob.overriddenBodyFromExtender = mContentText notificationJob.overriddenTitleFromExtender = mContentTitle + + val mColor = + NotificationCompat.Builder::class.java.getDeclaredField("mColor") + mColor.isAccessible = true + val color = mColor[notificationBuilder] as Int? + if (color != notificationJob.orgColor) { + notificationJob.overriddenColor = color + } + if (!notificationJob.isRestoring) { notificationJob.overriddenFlags = mNotification.flags notificationJob.overriddenSound = mNotification.sound diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/SummaryNotificationDisplayer.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/SummaryNotificationDisplayer.kt index 807844e94d..9c96530169 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/SummaryNotificationDisplayer.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/display/impl/SummaryNotificationDisplayer.kt @@ -217,6 +217,13 @@ internal class SummaryNotificationDisplayer( for (line in summaryList) inboxStyle.addLine(line) inboxStyle.setBigContentTitle(summaryMessage) summaryBuilder.setStyle(inboxStyle) + + if (notificationJob.overriddenColor != null) { + summaryBuilder.setColor( + notificationJob.overriddenColor!!, + ) + } + summaryNotification = summaryBuilder.build() } else { // First notification with this group key, post like a normal notification. @@ -244,6 +251,13 @@ internal class SummaryNotificationDisplayer( } catch (t: Throwable) { // do nothing in this case...Android support lib 26 isn't in the project } + + if (notificationJob.overriddenColor != null) { + summaryBuilder.setColor( + notificationJob.overriddenColor!!, + ) + } + summaryNotification = summaryBuilder.build() _notificationDisplayBuilder.addXiaomiSettings(notifBuilder, summaryNotification) } @@ -282,6 +296,11 @@ internal class SummaryNotificationDisplayer( notificationJob.overriddenFlags!!, ) } + if (notificationJob.overriddenColor != null) { + summaryBuilder!!.setColor( + notificationJob.overriddenColor!!, + ) + } // The summary is designed to fit all notifications. // Default small and large icons are used instead of the payload options to enforce this.