@@ -11,6 +11,7 @@ package com.nextcloud.talk.activities
1111
1212import android.Manifest
1313import android.annotation.SuppressLint
14+ import android.app.ActivityManager
1415import android.app.PendingIntent
1516import android.app.RemoteAction
1617import android.content.BroadcastReceiver
@@ -78,6 +79,7 @@ import com.nextcloud.talk.camera.BackgroundBlurFrameProcessor
7879import com.nextcloud.talk.camera.BlurBackgroundViewModel
7980import com.nextcloud.talk.camera.BlurBackgroundViewModel.BackgroundBlurOn
8081import com.nextcloud.talk.chat.ChatActivity
82+ import com.nextcloud.talk.callnotification.CallNotificationActivity
8183import com.nextcloud.talk.conversationlist.ConversationsListActivity
8284import com.nextcloud.talk.data.user.model.User
8385import com.nextcloud.talk.databinding.CallActivityBinding
@@ -2049,9 +2051,8 @@ class CallActivity : CallBaseActivity() {
20492051 }
20502052
20512053 if (conversationModel?.checkIfVoiceRoom() == true ) {
2052- val intent = Intent (context, ConversationsListActivity ::class .java)
2053- startActivity(intent)
2054- finish()
2054+ openConversationListInPrimaryTask()
2055+ finishAndRemoveTask()
20552056 } else if (switchToRoomToken.isNotEmpty()) {
20562057 val intent = Intent (context, ChatActivity ::class .java)
20572058 intent.addFlags(Intent .FLAG_ACTIVITY_CLEAR_TOP )
@@ -2083,6 +2084,54 @@ class CallActivity : CallBaseActivity() {
20832084 })
20842085 }
20852086
2087+ private fun openConversationListInPrimaryTask () {
2088+ val activityManager = getSystemService(Context .ACTIVITY_SERVICE ) as ? ActivityManager
2089+ val appTasks = activityManager
2090+ ?.appTasks
2091+ ?.filter { appTask -> appTask.taskInfo?.baseActivity?.packageName == packageName }
2092+ .orEmpty()
2093+
2094+ val primaryTask = appTasks.firstOrNull { appTask ->
2095+ val taskInfo = appTask.taskInfo
2096+ val baseActivityName = taskInfo?.baseActivity?.className
2097+ taskInfo != null &&
2098+ taskInfo.taskId != taskId &&
2099+ baseActivityName == MainActivity ::class .java.name
2100+ } ? : appTasks.firstOrNull { appTask ->
2101+ val taskInfo = appTask.taskInfo
2102+ val baseActivityName = taskInfo?.baseActivity?.className
2103+ taskInfo != null &&
2104+ taskInfo.taskId != taskId &&
2105+ baseActivityName != CallActivity ::class .java.name &&
2106+ baseActivityName != CallNotificationActivity ::class .java.name
2107+ }
2108+
2109+ if (primaryTask != null ) {
2110+ val intent = Intent (context, ConversationsListActivity ::class .java).apply {
2111+ addFlags(Intent .FLAG_ACTIVITY_CLEAR_TOP or Intent .FLAG_ACTIVITY_SINGLE_TOP )
2112+ }
2113+ primaryTask.startActivity(context, intent, null )
2114+ primaryTask.moveToFront()
2115+ val primaryTaskId = primaryTask.taskInfo?.taskId
2116+ appTasks
2117+ .filter { appTask ->
2118+ val taskInfo = appTask.taskInfo
2119+ val baseActivityName = taskInfo?.baseActivity?.className
2120+ val isCallTask = baseActivityName == CallActivity ::class .java.name ||
2121+ baseActivityName == CallNotificationActivity ::class .java.name
2122+ taskInfo != null && ! isCallTask && taskInfo.taskId != primaryTaskId && taskInfo.taskId != taskId
2123+ }
2124+ .forEach { it.finishAndRemoveTask() }
2125+ } else {
2126+ val mainIntent = Intent (context, MainActivity ::class .java).apply {
2127+ action = Intent .ACTION_MAIN
2128+ addCategory(Intent .CATEGORY_LAUNCHER )
2129+ addFlags(Intent .FLAG_ACTIVITY_NEW_TASK or Intent .FLAG_ACTIVITY_CLEAR_TASK )
2130+ }
2131+ startActivity(mainIntent)
2132+ }
2133+ }
2134+
20862135 private fun startVideoCapture (isPortrait : Boolean ) {
20872136 val (width, height) = if (isPortrait) {
20882137 WIDTH_4_TO_3_RATIO to HEIGHT_4_TO_3_RATIO
0 commit comments