Trying to fix actions in notification not working

This commit is contained in:
Sylvain Berfini 2021-03-09 11:24:53 +01:00
parent 2adca8f90f
commit 68ac6ca680
8 changed files with 67 additions and 12 deletions

View file

@ -23,6 +23,7 @@ import static org.linphone.compatibility.Compatibility.CHAT_NOTIFICATIONS_GROUP;
import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY; import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION;
import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID; import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID;
import static org.linphone.compatibility.Compatibility.INTENT_REMOTE_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION;
import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY; import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY;
@ -132,6 +133,7 @@ class ApiTwentyEightPlus {
replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION); replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION);
replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
replyIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent replyPendingIntent = PendingIntent replyPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(
@ -156,6 +158,7 @@ class ApiTwentyEightPlus {
markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION); markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION);
markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
markAsReadIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent markAsReadPendingIntent = PendingIntent markAsReadPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(

View file

@ -25,6 +25,7 @@ import static org.linphone.compatibility.Compatibility.INTENT_HANGUP_CALL_NOTIF_
import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY; import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION;
import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID; import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID;
import static org.linphone.compatibility.Compatibility.INTENT_REMOTE_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION;
import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY; import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY;
@ -167,6 +168,7 @@ class ApiTwentyFourPlus {
replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION); replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION);
replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
replyIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent replyPendingIntent = PendingIntent replyPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(
@ -190,6 +192,7 @@ class ApiTwentyFourPlus {
markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION); markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION);
markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
markAsReadIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent markAsReadPendingIntent = PendingIntent markAsReadPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(

View file

@ -24,6 +24,7 @@ import static org.linphone.compatibility.Compatibility.INTENT_HANGUP_CALL_NOTIF_
import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY; import static org.linphone.compatibility.Compatibility.INTENT_LOCAL_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_MARK_AS_READ_ACTION;
import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID; import static org.linphone.compatibility.Compatibility.INTENT_NOTIF_ID;
import static org.linphone.compatibility.Compatibility.INTENT_REMOTE_IDENTITY;
import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION; import static org.linphone.compatibility.Compatibility.INTENT_REPLY_NOTIF_ACTION;
import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY; import static org.linphone.compatibility.Compatibility.KEY_TEXT_REPLY;
@ -48,6 +49,7 @@ public class ApiTwentyNinePlus {
replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION); replyIntent.setAction(INTENT_REPLY_NOTIF_ACTION);
replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); replyIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); replyIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
replyIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent replyPendingIntent = PendingIntent replyPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(
@ -72,6 +74,7 @@ public class ApiTwentyNinePlus {
markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION); markAsReadIntent.setAction(INTENT_MARK_AS_READ_ACTION);
markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId()); markAsReadIntent.putExtra(INTENT_NOTIF_ID, notif.getNotificationId());
markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity()); markAsReadIntent.putExtra(INTENT_LOCAL_IDENTITY, notif.getLocalIdentity());
markAsReadIntent.putExtra(INTENT_REMOTE_IDENTITY, notif.getRemoteIdentity());
PendingIntent markAsReadPendingIntent = PendingIntent markAsReadPendingIntent =
PendingIntent.getBroadcast( PendingIntent.getBroadcast(

View file

@ -45,6 +45,7 @@ public class Compatibility {
public static final String INTENT_HANGUP_CALL_NOTIF_ACTION = "org.linphone.HANGUP_CALL_ACTION"; public static final String INTENT_HANGUP_CALL_NOTIF_ACTION = "org.linphone.HANGUP_CALL_ACTION";
public static final String INTENT_ANSWER_CALL_NOTIF_ACTION = "org.linphone.ANSWER_CALL_ACTION"; public static final String INTENT_ANSWER_CALL_NOTIF_ACTION = "org.linphone.ANSWER_CALL_ACTION";
public static final String INTENT_LOCAL_IDENTITY = "LOCAL_IDENTITY"; public static final String INTENT_LOCAL_IDENTITY = "LOCAL_IDENTITY";
public static final String INTENT_REMOTE_IDENTITY = "REMOTE_IDENTITY";
public static final String INTENT_MARK_AS_READ_ACTION = "org.linphone.MARK_AS_READ_ACTION"; public static final String INTENT_MARK_AS_READ_ACTION = "org.linphone.MARK_AS_READ_ACTION";
public static String getDeviceName(Context context) { public static String getDeviceName(Context context) {

View file

@ -28,6 +28,7 @@ public class Notifiable {
private boolean mIsGroup; private boolean mIsGroup;
private String mGroupTitle; private String mGroupTitle;
private String mLocalIdentity; private String mLocalIdentity;
private String mRemoteIdentity;
private String mMyself; private String mMyself;
private int mIconId; private int mIconId;
private int mTextId; private int mTextId;
@ -84,10 +85,18 @@ public class Notifiable {
return mLocalIdentity; return mLocalIdentity;
} }
public String getRemoteIdentity() {
return mRemoteIdentity;
}
public void setLocalIdentity(String localIdentity) { public void setLocalIdentity(String localIdentity) {
mLocalIdentity = localIdentity; mLocalIdentity = localIdentity;
} }
public void setRemoteIdentity(String remoteIdentity) {
mRemoteIdentity = remoteIdentity;
}
public int getIconResourceId() { public int getIconResourceId() {
return mIconId; return mIconId;
} }

View file

@ -19,7 +19,10 @@
*/ */
package org.linphone.notifications; package org.linphone.notifications;
import static android.content.Context.NOTIFICATION_SERVICE;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager;
import android.app.RemoteInput; import android.app.RemoteInput;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
@ -34,27 +37,40 @@ import org.linphone.core.Call;
import org.linphone.core.ChatMessage; import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoom;
import org.linphone.core.Core; import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.core.tools.Log; import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
public class NotificationBroadcastReceiver extends BroadcastReceiver { public class NotificationBroadcastReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(final Context context, Intent intent) { public void onReceive(final Context context, Intent intent) {
final int notifId = intent.getIntExtra(Compatibility.INTENT_NOTIF_ID, 0); final int notifId = intent.getIntExtra(Compatibility.INTENT_NOTIF_ID, 0);
final String localyIdentity = intent.getStringExtra(Compatibility.INTENT_LOCAL_IDENTITY); final String localyIdentity = intent.getStringExtra(Compatibility.INTENT_LOCAL_IDENTITY);
final String remoteIdentity = intent.getStringExtra(Compatibility.INTENT_REMOTE_IDENTITY);
if (!LinphoneContext.isReady()) { if (!LinphoneContext.isReady()) {
Log.e("[Notification Broadcast Receiver] Context not ready, aborting..."); Log.e("[Notification Broadcast Receiver] Context not ready...");
return;
} }
if (intent.getAction().equals(Compatibility.INTENT_REPLY_NOTIF_ACTION) if (intent.getAction().equals(Compatibility.INTENT_REPLY_NOTIF_ACTION)
|| intent.getAction().equals(Compatibility.INTENT_MARK_AS_READ_ACTION)) { || intent.getAction().equals(Compatibility.INTENT_MARK_AS_READ_ACTION)) {
String remoteSipAddr = String remoteSipAddr = remoteIdentity;
LinphoneContext.instance()
.getNotificationManager() Core core;
.getSipUriForNotificationId(notifId); boolean stopCoreWhenFinished = false;
if (!LinphoneContext.isReady()) {
String basePath = context.getFilesDir().getAbsolutePath();
core =
Factory.instance()
.createCore(
basePath + LinphonePreferences.LINPHONE_DEFAULT_RC,
basePath + LinphonePreferences.LINPHONE_FACTORY_RC,
context);
stopCoreWhenFinished = true;
Log.e("[Notification Broadcast Receiver] Created temporary Core");
core.start();
} else core = LinphoneManager.getCore();
Core core = LinphoneManager.getCore();
if (core == null) { if (core == null) {
Log.e("[Notification Broadcast Receiver] Couldn't get Core instance"); Log.e("[Notification Broadcast Receiver] Couldn't get Core instance");
onError(context, notifId); onError(context, notifId);
@ -102,15 +118,33 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
ChatMessage msg = room.createMessage(reply); ChatMessage msg = room.createMessage(reply);
msg.setUserData(notifId); msg.setUserData(notifId);
msg.addListener( if (!stopCoreWhenFinished) {
LinphoneContext.instance().getNotificationManager().getMessageListener()); msg.addListener(
LinphoneContext.instance()
.getNotificationManager()
.getMessageListener());
}
msg.send(); msg.send();
Log.i("[Notification Broadcast Receiver] Reply sent for notif id " + notifId); Log.i("[Notification Broadcast Receiver] Reply sent for notif id " + notifId);
} else { } else {
LinphoneContext.instance().getNotificationManager().dismissNotification(notifId); if (!stopCoreWhenFinished) {
LinphoneContext.instance()
.getNotificationManager()
.dismissNotification(notifId);
} else {
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(notifId);
}
}
if (stopCoreWhenFinished) {
core.stopAsync();
} }
} else if (intent.getAction().equals(Compatibility.INTENT_ANSWER_CALL_NOTIF_ACTION) } else if (intent.getAction().equals(Compatibility.INTENT_ANSWER_CALL_NOTIF_ACTION)
|| intent.getAction().equals(Compatibility.INTENT_HANGUP_CALL_NOTIF_ACTION)) { || intent.getAction().equals(Compatibility.INTENT_HANGUP_CALL_NOTIF_ACTION)) {
if (!LinphoneContext.isReady()) return;
String remoteAddr = String remoteAddr =
LinphoneContext.instance() LinphoneContext.instance()
.getNotificationManager() .getNotificationManager()

View file

@ -462,6 +462,7 @@ public class NotificationsManager {
notif.setGroupTitle(subject); notif.setGroupTitle(subject);
notif.setMyself(LinphoneUtils.getAddressDisplayName(localIdentity)); notif.setMyself(LinphoneUtils.getAddressDisplayName(localIdentity));
notif.setLocalIdentity(localIdentity.asString()); notif.setLocalIdentity(localIdentity.asString());
notif.setRemoteIdentity(conferenceAddress);
displayMessageNotificationFromNotifiable( displayMessageNotificationFromNotifiable(
notif, conferenceAddress, localIdentity.asStringUriOnly()); notif, conferenceAddress, localIdentity.asStringUriOnly());
@ -496,6 +497,7 @@ public class NotificationsManager {
notif.setIsGroup(false); notif.setIsGroup(false);
notif.setMyself(LinphoneUtils.getAddressDisplayName(localIdentity)); notif.setMyself(LinphoneUtils.getAddressDisplayName(localIdentity));
notif.setLocalIdentity(localIdentity.asString()); notif.setLocalIdentity(localIdentity.asString());
notif.setRemoteIdentity(fromSipUri);
displayMessageNotificationFromNotifiable( displayMessageNotificationFromNotifiable(
notif, fromSipUri, localIdentity.asStringUriOnly()); notif, fromSipUri, localIdentity.asStringUriOnly());

View file

@ -53,8 +53,8 @@ import org.linphone.utils.LinphoneUtils;
public class LinphonePreferences { public class LinphonePreferences {
private static final int LINPHONE_CORE_RANDOM_PORT = -1; private static final int LINPHONE_CORE_RANDOM_PORT = -1;
private static final String LINPHONE_DEFAULT_RC = "/.linphonerc"; public static final String LINPHONE_DEFAULT_RC = "/.linphonerc";
private static final String LINPHONE_FACTORY_RC = "/linphonerc"; public static final String LINPHONE_FACTORY_RC = "/linphonerc";
private static final String LINPHONE_LPCONFIG_XSD = "/lpconfig.xsd"; private static final String LINPHONE_LPCONFIG_XSD = "/lpconfig.xsd";
private static final String DEFAULT_ASSISTANT_RC = "/default_assistant_create.rc"; private static final String DEFAULT_ASSISTANT_RC = "/default_assistant_create.rc";
private static final String LINPHONE_ASSISTANT_RC = "/linphone_assistant_create.rc"; private static final String LINPHONE_ASSISTANT_RC = "/linphone_assistant_create.rc";