Skip to content

Commit 2a141f9

Browse files
authored
Merge pull request #6235 from nextcloud/bugfix/noid/fixPermanentCallRoomMultipleAppInstances
fix: navigate back to primary task when leaving permanent call room
2 parents bee55a9 + 34936ea commit 2a141f9

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package com.nextcloud.talk.activities
1111

1212
import android.Manifest
1313
import android.annotation.SuppressLint
14+
import android.app.ActivityManager
1415
import android.app.PendingIntent
1516
import android.app.RemoteAction
1617
import android.content.BroadcastReceiver
@@ -78,6 +79,7 @@ import com.nextcloud.talk.camera.BackgroundBlurFrameProcessor
7879
import com.nextcloud.talk.camera.BlurBackgroundViewModel
7980
import com.nextcloud.talk.camera.BlurBackgroundViewModel.BackgroundBlurOn
8081
import com.nextcloud.talk.chat.ChatActivity
82+
import com.nextcloud.talk.callnotification.CallNotificationActivity
8183
import com.nextcloud.talk.conversationlist.ConversationsListActivity
8284
import com.nextcloud.talk.data.user.model.User
8385
import 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

Comments
 (0)