From 8c6758c4b8323dd17a03128e2d7d487a4b7f5975 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 9 Jul 2021 12:01:25 +0200 Subject: [PATCH] Fixed resuming app from recent tasks after a call ended --- .../linphone/activities/call/CallActivity.kt | 12 +++++++++- .../activities/call/IncomingCallActivity.kt | 22 +++++++++++++++++-- .../activities/call/OutgoingCallActivity.kt | 22 +++++++++++++++++-- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/call/CallActivity.kt b/app/src/main/java/org/linphone/activities/call/CallActivity.kt index ffd82da0a..ae8344b95 100644 --- a/app/src/main/java/org/linphone/activities/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/CallActivity.kt @@ -19,6 +19,7 @@ */ package org.linphone.activities.call +import android.content.Intent import android.content.res.Configuration import android.content.res.Resources import android.os.Bundle @@ -33,6 +34,7 @@ import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.call.viewmodels.ControlsFadingViewModel import org.linphone.activities.call.viewmodels.SharedCallViewModel +import org.linphone.activities.main.MainActivity import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log import org.linphone.databinding.CallActivityBinding @@ -112,7 +114,15 @@ class CallActivity : ProximitySensorActivity() { if (coreContext.core.callsNb == 0) { Log.w("[Call Activity] Resuming but no call found...") - finish() + if (isTaskRoot) { + // When resuming app from recent tasks make sure MainActivity will be launched if there is no call + val intent = Intent() + intent.setClass(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } else { + finish() + } } else { coreContext.removeCallOverlay() } diff --git a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt index 84ed8f104..4ce7ec9a2 100644 --- a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt @@ -23,6 +23,7 @@ import android.Manifest import android.annotation.TargetApi import android.app.KeyguardManager import android.content.Context +import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.os.Bundle @@ -33,6 +34,7 @@ import org.linphone.R import org.linphone.activities.GenericActivity import org.linphone.activities.call.viewmodels.IncomingCallViewModel import org.linphone.activities.call.viewmodels.IncomingCallViewModelFactory +import org.linphone.activities.main.MainActivity import org.linphone.compatibility.Compatibility import org.linphone.core.Call import org.linphone.core.tools.Log @@ -58,7 +60,15 @@ class IncomingCallActivity : GenericActivity() { val incomingCall: Call? = findIncomingCall() if (incomingCall == null) { Log.e("[Incoming Call Activity] Couldn't find call in state Incoming") - finish() + if (isTaskRoot) { + // When resuming app from recent tasks make sure MainActivity will be launched if there is no call + val intent = Intent() + intent.setClass(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } else { + finish() + } return } @@ -103,7 +113,15 @@ class IncomingCallActivity : GenericActivity() { val incomingCall: Call? = findIncomingCall() if (incomingCall == null) { Log.e("[Incoming Call Activity] Couldn't find call in state Incoming") - finish() + if (isTaskRoot) { + // When resuming app from recent tasks make sure MainActivity will be launched if there is no call + val intent = Intent() + intent.setClass(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } else { + finish() + } } } diff --git a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt index 27c4598e5..b5e474843 100644 --- a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt @@ -22,6 +22,7 @@ package org.linphone.activities.call import android.Manifest import android.animation.ValueAnimator import android.annotation.TargetApi +import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import androidx.databinding.DataBindingUtil @@ -33,6 +34,7 @@ import org.linphone.R import org.linphone.activities.call.viewmodels.CallViewModel import org.linphone.activities.call.viewmodels.CallViewModelFactory import org.linphone.activities.call.viewmodels.ControlsViewModel +import org.linphone.activities.main.MainActivity import org.linphone.core.Call import org.linphone.core.tools.Log import org.linphone.databinding.CallOutgoingActivityBinding @@ -56,7 +58,15 @@ class OutgoingCallActivity : ProximitySensorActivity() { val outgoingCall: Call? = findOutgoingCall() if (outgoingCall == null) { Log.e("[Outgoing Call Activity] Couldn't find call in state Outgoing") - finish() + if (isTaskRoot) { + // When resuming app from recent tasks make sure MainActivity will be launched if there is no call + val intent = Intent() + intent.setClass(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } else { + finish() + } return } @@ -122,7 +132,15 @@ class OutgoingCallActivity : ProximitySensorActivity() { val outgoingCall: Call? = findOutgoingCall() if (outgoingCall == null) { Log.e("[Outgoing Call Activity] Couldn't find call in state Outgoing") - finish() + if (isTaskRoot) { + // When resuming app from recent tasks make sure MainActivity will be launched if there is no call + val intent = Intent() + intent.setClass(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } else { + finish() + } } }