From 2ad4e76bc39f5396f9ec8128082a8bca93d2ce60 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Sat, 9 Dec 2023 07:38:09 +0100 Subject: [PATCH] Fixed clicking on chat message notification while being in conversations list stacked it twice --- .../notifications/NotificationsManager.kt | 22 ++++++++++--------- .../java/org/linphone/ui/main/MainActivity.kt | 3 ++- .../chat/fragment/ConversationFragment.kt | 1 - 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt index 45b944d21..2fd4d2579 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt @@ -30,7 +30,6 @@ import android.content.Intent import android.content.pm.PackageManager import android.graphics.Bitmap import android.net.Uri -import android.os.Bundle import android.webkit.MimeTypeMap import androidx.annotation.AnyThread import androidx.annotation.MainThread @@ -1147,15 +1146,18 @@ class NotificationsManager @MainThread constructor(private val context: Context) @WorkerThread private fun getChatRoomPendingIntent(chatRoom: ChatRoom): PendingIntent { - val args = Bundle() - args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) - args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) - return NavDeepLinkBuilder(context) - .setComponentName(MainActivity::class.java) - .setGraph(R.navigation.main_nav_graph) - .setDestination(R.id.conversationsListFragment) - .setArguments(args) - .createPendingIntent() + val mainActivityIntent = Intent(context, MainActivity::class.java) + mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + mainActivityIntent.setAction(Intent.ACTION_MAIN) + mainActivityIntent.putExtra("Chat", true) + mainActivityIntent.putExtra("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) + mainActivityIntent.putExtra("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) + return PendingIntent.getActivity( + context, + 0, + mainActivityIntent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) } class Notifiable(val notificationId: Int) { diff --git a/app/src/main/java/org/linphone/ui/main/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt index 89d1e0df9..7df6e0277 100644 --- a/app/src/main/java/org/linphone/ui/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt @@ -369,7 +369,6 @@ class MainActivity : GenericActivity() { @MainThread private fun handleMainIntent(intent: Intent, defaultDestination: Int, isNewIntent: Boolean) { - val navGraph = findNavController().navInflater.inflate(R.navigation.main_nav_graph) if (intent.hasExtra("Chat")) { Log.i("$TAG New intent with [Chat] extra") if (isNewIntent) { @@ -380,12 +379,14 @@ class MainActivity : GenericActivity() { ) } else { Log.i("$TAG Going to Conversations fragment instead of default destination") + val navGraph = findNavController().navInflater.inflate(R.navigation.main_nav_graph) navGraph.setStartDestination(R.id.conversationsListFragment) findNavController().setGraph(navGraph, intent.extras) } } else { if (!isNewIntent && defaultDestination > 0) { Log.i("$TAG Setting nav graph with expected default destination") + val navGraph = findNavController().navInflater.inflate(R.navigation.main_nav_graph) navGraph.setStartDestination(defaultDestination) findNavController().setGraph(navGraph, null) } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 1880298b3..82b343b34 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -205,7 +205,6 @@ class ConversationFragment : SlidingPaneChildFragment() { override fun goBack(): Boolean { sharedViewModel.closeSlidingPaneEvent.value = Event(true) - coreContext.notificationsManager.resetCurrentlyDisplayedChatRoomId() // If not done this fragment won't be paused, which will cause us issues val action = ConversationFragmentDirections.actionConversationFragmentToEmptyFragment()