From f52f97c26a052505271af09931b51573986a0698 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 6 Jan 2019 16:55:31 +0100 Subject: [PATCH] Allow showing network name in notifications --- .../service/QuasselNotificationBackend.kt | 16 ++++++------ .../QuasseldroidNotificationManager.kt | 25 +++++++++++-------- .../settings/NotificationSettings.kt | 3 ++- .../kuschku/quasseldroid/settings/Settings.kt | 4 +++ .../quasseldroid/util/NotificationBuffer.kt | 11 ++++++++ .../main/res/values/strings_preferences.xml | 3 +++ app/src/main/res/xml/preferences.xml | 5 ++++ .../persistence/QuasselDatabase.kt | 8 +++++- 8 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/de/kuschku/quasseldroid/util/NotificationBuffer.kt diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt index 823e0715b..3472396d8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt @@ -42,6 +42,7 @@ import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.settings.NotificationSettings import de.kuschku.quasseldroid.settings.Settings +import de.kuschku.quasseldroid.util.NotificationBuffer import de.kuschku.quasseldroid.util.NotificationMessage import de.kuschku.quasseldroid.util.avatars.AvatarHelper import de.kuschku.quasseldroid.util.helper.getColorCompat @@ -221,7 +222,8 @@ class QuasselNotificationBackend @Inject constructor( }.filter { it.messageId > session.bufferSyncer.lastSeenMsg(it.bufferInfo.bufferId) }.map { - val me = session.network(it.bufferInfo.networkId)?.me() + val network = session.network(it.bufferInfo.networkId) + val me = network?.me() QuasselDatabase.NotificationData( messageId = it.messageId, creationTime = now, @@ -232,6 +234,7 @@ class QuasselNotificationBackend @Inject constructor( bufferName = it.bufferInfo.bufferName ?: "", bufferType = it.bufferInfo.type, networkId = it.bufferInfo.networkId, + networkName = network?.networkName() ?: "", sender = it.sender, senderPrefixes = it.senderPrefixes, realName = it.realName, @@ -278,12 +281,11 @@ class QuasselNotificationBackend @Inject constructor( val max = data.maxBy { it.creationTime } val isLoud = max?.creationTime?.isAfter(initTime) == true - val bufferInfo = BufferInfo( - bufferId = it.bufferId, - bufferName = it.bufferName, + val buffer = NotificationBuffer( + id = it.bufferId, + name = it.bufferName, type = it.bufferType, - networkId = it.networkId, - groupId = 0 + networkName = it.networkName ) val size = context.resources.getDimensionPixelSize(R.dimen.notification_avatar_width) @@ -364,7 +366,7 @@ class QuasselNotificationBackend @Inject constructor( ) } val notification = notificationHandler.notificationMessage( - notificationSettings, bufferInfo, selfInfo, notificationData, isLoud, isConnected + notificationSettings, buffer, selfInfo, notificationData, isLoud, isConnected ) notificationHandler.notify(notification) } ?: notificationHandler.remove(buffer) diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt index 2d8f71121..b9d5c83a3 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt @@ -37,11 +37,11 @@ import androidx.core.app.Person import androidx.core.app.RemoteInput import androidx.core.graphics.drawable.IconCompat import de.kuschku.libquassel.protocol.Buffer_Type -import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.NotificationSettings import de.kuschku.quasseldroid.ui.chat.ChatActivity +import de.kuschku.quasseldroid.util.NotificationBuffer import de.kuschku.quasseldroid.util.NotificationMessage import de.kuschku.quasseldroid.util.helper.getColorCompat import de.kuschku.quasseldroid.util.helper.letIf @@ -109,13 +109,13 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C return bitmap } - fun notificationMessage(notificationSettings: NotificationSettings, bufferInfo: BufferInfo, + fun notificationMessage(notificationSettings: NotificationSettings, buffer: NotificationBuffer, selfInfo: SelfInfo, notifications: List<NotificationMessage>, isLoud: Boolean, isConnected: Boolean): Handle { val pendingIntentOpen = PendingIntent.getActivity( context.applicationContext, System.currentTimeMillis().toInt(), - ChatActivity.intent(context.applicationContext, bufferId = bufferInfo.bufferId).apply { + ChatActivity.intent(context.applicationContext, bufferId = buffer.id).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP }, 0 @@ -130,7 +130,7 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C System.currentTimeMillis().toInt(), QuasselService.intent( context, - bufferId = bufferInfo.bufferId + bufferId = buffer.id ), 0 ) @@ -140,7 +140,7 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C System.currentTimeMillis().toInt(), QuasselService.intent( context, - bufferId = bufferInfo.bufferId, + bufferId = buffer.id, markReadMessage = notifications.last().messageId ), 0 @@ -151,12 +151,14 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C System.currentTimeMillis().toInt(), QuasselService.intent( context, - bufferId = bufferInfo.bufferId, + bufferId = buffer.id, hideMessage = notifications.last().messageId ), 0 ) + println(notificationSettings) + val notification = NotificationCompat.Builder( context.applicationContext, translatedLocale.getString( @@ -196,8 +198,11 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C .setIcon(IconCompat.createWithBitmap(bitmapFromDrawable(selfInfo.avatar))) .build() ) - .setGroupConversation(!bufferInfo.type.hasFlag(Buffer_Type.QueryBuffer)) - .setConversationTitle(bufferInfo.bufferName) + .setGroupConversation(!buffer.type.hasFlag(Buffer_Type.QueryBuffer)) + .setConversationTitle( + if (notificationSettings.networkNameInNotificationTitle) "${buffer.name} — ${buffer.networkName}" + else buffer.name + ) .also { for (notification in notifications) { it.addMessage( @@ -228,13 +233,13 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C } .setWhen(notifications.last().time.toEpochMilli()) .apply { - if (bufferInfo.type.hasFlag(Buffer_Type.QueryBuffer)) { + if (buffer.type.hasFlag(Buffer_Type.QueryBuffer)) { notifications.lastOrNull()?.avatar?.let { setLargeIcon(bitmapFromDrawable(it)) } } } - return Handle(bufferInfo.bufferId, notification) + return Handle(buffer.id, notification) } fun notificationBackground(): Handle { diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt index b3a04918e..f15f09c87 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt @@ -26,7 +26,8 @@ data class NotificationSettings( val sound: String = "content://settings/system/notification_sound", val vibrate: Boolean = true, val light: Boolean = true, - val markReadOnSwipe: Boolean = true + val markReadOnSwipe: Boolean = true, + val networkNameInNotificationTitle: Boolean = false ) { enum class Level { ALL, diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt index 68878da3e..210984a8e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt @@ -171,6 +171,10 @@ object Settings { markReadOnSwipe = getBoolean( context.getString(R.string.preference_notification_mark_read_on_swipe_key), NotificationSettings.DEFAULT.markReadOnSwipe + ), + networkNameInNotificationTitle = getBoolean( + context.getString(R.string.preference_notification_network_name_in_notification_title_key), + NotificationSettings.DEFAULT.networkNameInNotificationTitle ) ) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/NotificationBuffer.kt b/app/src/main/java/de/kuschku/quasseldroid/util/NotificationBuffer.kt new file mode 100644 index 000000000..487e6260e --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/util/NotificationBuffer.kt @@ -0,0 +1,11 @@ +package de.kuschku.quasseldroid.util + +import de.kuschku.libquassel.protocol.BufferId +import de.kuschku.libquassel.protocol.Buffer_Types + +data class NotificationBuffer( + val id: BufferId, + val type: Buffer_Types, + val name: String, + val networkName: String +) diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index 55539f463..402611005 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -135,6 +135,9 @@ <string name="preference_notification_mark_read_on_swipe_title">Mark channel read when swiping notifications</string> <string name="preference_notification_mark_read_on_swipe_summary">Marks all messages in a channel as read when a notification for the channel is swiped away</string> + <string name="preference_notification_network_name_in_notification_title_key" translatable="false">network_name_in_notification_title</string> + <string name="preference_notification_network_name_in_notification_title_title">Show network name in notifications title</string> + <string name="preference_notification_configure_key" translatable="false">notification_configure</string> <string name="preference_notification_configure_title">Configure Notifications</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 1eea34448..dd53270ce 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -90,6 +90,11 @@ android:summary="@string/preference_notification_mark_read_on_swipe_summary" android:title="@string/preference_notification_mark_read_on_swipe_title" /> + <SwitchPreference + android:defaultValue="false" + android:key="@string/preference_notification_network_name_in_notification_title_key" + android:title="@string/preference_notification_network_name_in_notification_title_title" /> + <de.kuschku.quasseldroid.util.ui.settings.RingtonePreference android:defaultValue="content://settings/system/notification_sound" android:key="@string/preference_notification_sound_key" diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt index 2be90b1b8..c41b55af1 100644 --- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt +++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt @@ -32,7 +32,7 @@ import io.reactivex.Flowable import org.threeten.bp.Instant @Database(entities = [MessageData::class, Filtered::class, SslValidityWhitelistEntry::class, SslHostnameWhitelistEntry::class, NotificationData::class], - version = 18) + version = 19) @TypeConverters(MessageTypeConverter::class) abstract class QuasselDatabase : RoomDatabase() { abstract fun message(): MessageDao @@ -210,6 +210,7 @@ abstract class QuasselDatabase : RoomDatabase() { var bufferName: String, var bufferType: Buffer_Types, var networkId: NetworkId, + var networkName: String, var sender: String, var senderPrefixes: String, var realName: String, @@ -364,6 +365,11 @@ abstract class QuasselDatabase : RoomDatabase() { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("ALTER TABLE `notification` ADD `hidden` INT DEFAULT 0 NOT NULL;") } + }, + object : Migration(18, 19) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE `notification` ADD `networkName` TEXT DEFAULT '' NOT NULL;") + } } ).build() } -- GitLab