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