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 823e0715bd30d274a6e9b18504eeaeab3fb7165c..3472396d80c46498f4a659e71236ba05836be700 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 2d8f7112196009329a0aa4847d1203096b26bb32..b9d5c83a313158f3331c5798cc8c7bb966b3c5aa 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 b3a04918e11dde3a359a7eb0588c36a0e479fa82..f15f09c87d615aa1f3d03120d733597b4feec3fb 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 68878da3ec0480c91673271a6c34898954c848d2..210984a8eab84368255142648c51021998a9a07b 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 0000000000000000000000000000000000000000..487e6260e8f7ecc35da08a56d0b7cfe8bcde20a5 --- /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 55539f463e711c16b8c4125bbaa6cff9400eb02e..402611005a569225c5157dc0a7ffbf67818339bc 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 1eea34448e3c578db5f4af715a122839e6b9b30a..dd53270ce8bc307ee10aa51700063cfa46e2e6c0 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 2be90b1b8d24d6168c82653371dc7be733d93925..c41b55af1922901621ddc4b4a2facfe407d1b3b0 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() }