From 8ca7f395d85091a8f7333269274070c2706300f6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 18 Mar 2019 16:14:03 +0100 Subject: [PATCH] Improvements regarding call notifications and activities --- .../java/org/linphone/LinphoneService.java | 12 +++++-- .../notifications/NotificationsManager.java | 32 +++++++++++++++++-- app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java index dc2760bbf..562c613d3 100644 --- a/app/src/main/java/org/linphone/LinphoneService.java +++ b/app/src/main/java/org/linphone/LinphoneService.java @@ -431,16 +431,22 @@ public final class LinphoneService extends Service { } private void onIncomingReceived() { - // wakeup linphone - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); Intent intent = new Intent().setClass(this, mIncomingReceivedActivity); + if (!pm.isInteractive()) { // This is to workaround an infinite loop of pause/start in LinphoneActivity issue // if incoming call is being stopped by caller while screen if off and locked intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); } - startActivity(intent); + + if (LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().startActivity(intent); + } else { + // This flag is required to start an Activity from a Service context + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } } /*Believe me or not, but knowing the application visibility state on Android is a nightmare. diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.java b/app/src/main/java/org/linphone/notifications/NotificationsManager.java index d067fb17d..0f5a4f1f8 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.java +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.java @@ -34,6 +34,9 @@ import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; import org.linphone.LinphoneService; import org.linphone.R; +import org.linphone.call.CallActivity; +import org.linphone.call.CallIncomingActivity; +import org.linphone.call.CallOutgoingActivity; import org.linphone.compatibility.Compatibility; import org.linphone.contacts.ContactsManager; import org.linphone.contacts.LinphoneContact; @@ -296,8 +299,21 @@ public class NotificationsManager { public void displayCallNotification(Call call) { if (call == null) return; - Intent callNotifIntent = - new Intent(mContext, LinphoneService.instance().getIncomingReceivedActivity()); + + Intent callNotifIntent; + if (call.getState() == Call.State.IncomingReceived + || call.getState() == Call.State.IncomingEarlyMedia) { + callNotifIntent = new Intent(mContext, CallIncomingActivity.class); + } else if (call.getState() == Call.State.OutgoingInit + || call.getState() == Call.State.OutgoingProgress + || call.getState() == Call.State.OutgoingRinging + || call.getState() == Call.State.OutgoingEarlyMedia) { + callNotifIntent = new Intent(mContext, CallOutgoingActivity.class); + } else { + callNotifIntent = new Intent(mContext, CallActivity.class); + } + callNotifIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + PendingIntent pendingIntent = PendingIntent.getActivity( mContext, 0, callNotifIntent, PendingIntent.FLAG_UPDATE_CURRENT); @@ -330,6 +346,18 @@ public class NotificationsManager { iconId = R.drawable.topbar_call_notification; notificationTextId = R.string.incall_notif_paused; break; + case IncomingEarlyMedia: + case IncomingReceived: + iconId = R.drawable.topbar_call_notification; + notificationTextId = R.string.incall_notif_incoming; + break; + case OutgoingEarlyMedia: + case OutgoingInit: + case OutgoingProgress: + case OutgoingRinging: + iconId = R.drawable.topbar_call_notification; + notificationTextId = R.string.incall_notif_outgoing; + break; default: if (call.getCurrentParams().videoEnabled()) { iconId = R.drawable.topbar_videocall_notification; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7a47b2170..3e7863fbb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -307,6 +307,8 @@ Audio call ongoing Paused call ongoing Video capturing call ongoing + Call incoming + Call outgoing started %i unread messages Missed call