diff options
Diffstat (limited to 'src/main/java/eu/siacs/conversations/services/XmppConnectionService.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 2719c59a..d57176e4 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -26,6 +26,7 @@ import android.os.SystemClock; import android.preference.PreferenceManager; import android.provider.ContactsContract; import android.security.KeyChain; +import android.support.v4.app.RemoteInput; import android.util.DisplayMetrics; import android.util.Log; import android.util.LruCache; @@ -128,6 +129,7 @@ import me.leolin.shortcutbadger.ShortcutBadger; public class XmppConnectionService extends Service { + public static final String ACTION_REPLY_TO_CONVERSATION = "reply_to_conversations"; public static final String ACTION_CLEAR_NOTIFICATION = "clear_notification"; public static final String ACTION_DISABLE_FOREGROUND = "disable_foreground"; public static final String ACTION_TRY_AGAIN = "try_again"; @@ -526,6 +528,7 @@ public class XmppConnectionService extends Service { final String action = intent == null ? null : intent.getAction(); boolean interactive = false; if (action != null) { + final Conversation c = findConversationByUuid(intent.getStringExtra("uuid")); switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: if (hasInternetConnection() && Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) { @@ -541,7 +544,6 @@ public class XmppConnectionService extends Service { logoutAndSave(true); return START_NOT_STICKY; case ACTION_CLEAR_NOTIFICATION: - final Conversation c = findConversationByUuid(intent.getStringExtra("uuid")); if (c != null) { mNotificationService.clear(c); } else { @@ -568,6 +570,14 @@ public class XmppConnectionService extends Service { break; } break; + case ACTION_REPLY_TO_CONVERSATION: + Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); + if (remoteInput != null && c != null) { + + String body = remoteInput.getString("text_reply"); + directReply(c,body); + } + break; case AudioManager.RINGER_MODE_CHANGED_ACTION: if (xaOnSilentMode()) { refreshAllPresences(); @@ -687,6 +697,33 @@ public class XmppConnectionService extends Service { return START_STICKY; } + private void directReply(Conversation conversation, String body) { + Message message = new Message(conversation,body,conversation.getNextEncryption()); + if (message.getEncryption() == Message.ENCRYPTION_PGP) { + getPgpEngine().encrypt(message, new UiCallback<Message>() { + @Override + public void success(Message message) { + message.setEncryption(Message.ENCRYPTION_DECRYPTED); + sendMessage(message); + mNotificationService.pushFromDirectReply(message); + } + + @Override + public void error(int errorCode, Message object) { + + } + + @Override + public void userInputRequried(PendingIntent pi, Message object) { + + } + }); + } else { + sendMessage(message); + mNotificationService.pushFromDirectReply(message); + } + } + private boolean xaOnSilentMode() { return getPreferences().getBoolean("xa_on_silent_mode", false); } |