Added setting to automatically mark as read a chat room when dismissing the notification

This commit is contained in:
Sylvain Berfini 2020-10-30 10:57:05 +01:00
parent d25b153019
commit 1e992434c4
6 changed files with 49 additions and 12 deletions

View file

@ -17,21 +17,26 @@ This version is a full rewrite of the app in kotlin, using modern Android compon
### Added
- Using linphone SDK 5.0 API to better handle audio route (see linphone-sdk changelog)
- More settings are available
- Display video in recordings if available
- "Swipe left to delete" action available on calls history, contacts & chat rooms list
- Improved preview when sharing video files through the chat
- Android 11 people & conversation compliant
- New animations between fragments and for unread chat messages / missed calls counters (can be disabled)
- Option to mark messages as read when dismissing the notification
- More settings are available
### Changed
- Dropped Android 5 compatibility, Android 6 or higher (API 23) is now required to install the app
- Call history view groups call from the same SIP URI (like linphone-iphone)
- Improved how Android native contacts are used
- Removed "back-to-call" button from dialer & chat views, use notification or overlay (see call settings)
- Switched to material design for text input fields & switches
- Launcher shortcuts can be to either contacts or chat rooms
### Removed
- Removed "back-to-call" button from dialer & chat views, use notification or overlay (see call settings)
### [4.4.0] - 2021-03-29
### Added

View file

@ -26,6 +26,13 @@ import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.utils.Event
class ChatSettingsViewModel : GenericSettingsViewModel() {
val markAsReadNotifDismissalListener = object : SettingListenerStub() {
override fun onBoolValueChanged(newValue: Boolean) {
prefs.markAsReadUponChatMessageNotificationDismissal = newValue
}
}
val markAsReadNotifDismissal = MutableLiveData<Boolean>()
val fileSharingUrlListener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
core.logCollectionUploadServerUrl = newValue
@ -112,6 +119,7 @@ class ChatSettingsViewModel : GenericSettingsViewModel() {
val goToAndroidNotificationSettingsEvent = MutableLiveData<Event<Boolean>>()
init {
markAsReadNotifDismissal.value = prefs.markAsReadUponChatMessageNotificationDismissal
downloadedMediaPublic.value = prefs.makePublicMediaFilesDownloaded
hideNotificationContent.value = prefs.hideChatMessageContentInNotification
initAutoDownloadList()

View file

@ -100,6 +100,12 @@ class CorePreferences constructor(private val context: Context) {
/* Chat */
var markAsReadUponChatMessageNotificationDismissal: Boolean
get() = config.getBool("app", "mark_as_read_notif_dismissal", false)
set(value) {
config.setBool("app", "mark_as_read_notif_dismissal", value)
}
var makePublicMediaFilesDownloaded: Boolean
// Keep old name for backward compatibility
get() = config.getBool("app", "make_downloaded_images_public_in_gallery", true)

View file

@ -662,7 +662,7 @@ class NotificationsManager(private val context: Context) {
}
style.isGroupConversation = notifiable.isGroup
return NotificationCompat.Builder(context, context.getString(R.string.notification_channel_chat_id))
val notificationBuilder = NotificationCompat.Builder(context, context.getString(R.string.notification_channel_chat_id))
.setSmallIcon(R.drawable.topbar_chat_notification)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
@ -678,7 +678,12 @@ class NotificationsManager(private val context: Context) {
.addAction(getReplyMessageAction(notifiable))
.addAction(getMarkMessageAsReadAction(notifiable))
.setShortcutId(shortcutId)
.build()
if (corePreferences.markAsReadUponChatMessageNotificationDismissal) {
Log.i("[Notifications Manager] Chat room will be marked as read when notification will be dismissed")
notificationBuilder
.setDeleteIntent(getMarkMessageAsReadPendingIntent(notifiable))
}
return notificationBuilder.build()
}
/* Notifications actions */
@ -743,18 +748,22 @@ class NotificationsManager(private val context: Context) {
.build()
}
private fun getMarkMessageAsReadAction(notifiable: Notifiable): NotificationCompat.Action {
private fun getMarkMessageAsReadPendingIntent(notifiable: Notifiable): PendingIntent {
val markAsReadIntent = Intent(context, NotificationBroadcastReceiver::class.java)
markAsReadIntent.action = INTENT_MARK_AS_READ_ACTION
markAsReadIntent.putExtra(INTENT_NOTIF_ID, notifiable.notificationId)
markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notifiable.localIdentity)
val markAsReadPendingIntent = PendingIntent.getBroadcast(
return PendingIntent.getBroadcast(
context,
notifiable.notificationId,
markAsReadIntent,
PendingIntent.FLAG_UPDATE_CURRENT
)
}
private fun getMarkMessageAsReadAction(notifiable: Notifiable): NotificationCompat.Action {
val markAsReadPendingIntent = getMarkMessageAsReadPendingIntent(notifiable)
return NotificationCompat.Action.Builder(
R.drawable.chat_send_over,
context.getString(R.string.received_chat_notification_mark_as_read_label),

View file

@ -66,12 +66,11 @@
android:orientation="vertical">
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/chat_settings_file_sharing_url_title}"
linphone:subtitle="@{@string/chat_settings_file_sharing_url_summary}"
linphone:listener="@{viewModel.fileSharingUrlListener}"
linphone:defaultValue="@{viewModel.fileSharingUrl}"
linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"/>
layout="@layout/settings_widget_switch"
linphone:title="@{@string/chat_settings_mark_as_read_notif_dismissal_title}"
linphone:subtitle="@{@string/chat_settings_mark_as_read_notif_dismissal_summary}"
linphone:listener="@{viewModel.markAsReadNotifDismissalListener}"
linphone:checked="@={viewModel.markAsReadNotifDismissal}"/>
<include
layout="@layout/settings_widget_list"
@ -127,6 +126,14 @@
linphone:listener="@{viewModel.hideRoomsRemovedProxiesListener}"
linphone:checked="@={viewModel.hideRoomsRemovedProxies}"/>
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/chat_settings_file_sharing_url_title}"
linphone:subtitle="@{@string/chat_settings_file_sharing_url_summary}"
linphone:listener="@{viewModel.fileSharingUrlListener}"
linphone:defaultValue="@{viewModel.fileSharingUrl}"
linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"/>
<include
layout="@layout/settings_widget_basic"
linphone:listener="@{viewModel.goToAndroidNotificationSettingsListener}"

View file

@ -402,6 +402,8 @@
<string name="call_settings_go_to_android_notification_settings">Android notification settings</string>
<!-- Chat settings -->
<string name="chat_settings_mark_as_read_notif_dismissal_title">Mark as read upon notification dismissal</string>
<string name="chat_settings_mark_as_read_notif_dismissal_summary"></string>
<string name="chat_settings_file_sharing_url_title">Sharing server URL</string>
<string name="chat_settings_file_sharing_url_summary">Do not edit unless you know what you are doing!</string>
<string name="chat_settings_auto_download_title">Auto download incoming files policy</string>