Implement SMS sending too, all ways work

This commit is contained in:
Travis Burtrum 2017-11-01 23:06:28 -04:00
parent 3048d3aaa3
commit 90952ef4d0
6 changed files with 41 additions and 10 deletions

View File

@ -39,6 +39,7 @@ public class PgpDecryptionService {
}
public synchronized boolean decrypt(final Message message, boolean notify) {
// todo: wtf to do with these
messages.add(message);
if (notify && pendingIntent == null) {
pendingNotifications.add(message);

View File

@ -301,6 +301,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
public void populateWithMessages(final List<Message> messages) {
// todo: what about what calls this method???
synchronized (this.messages) {
messages.clear();
messages.addAll(this.messages);

View File

@ -5,6 +5,7 @@ import android.text.Html;
import android.util.Log;
import android.util.Pair;
import eu.siacs.conversations.services.SMSReceiver;
import net.java.otr4j.session.Session;
import net.java.otr4j.session.SessionStatus;
@ -576,6 +577,8 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
return;
}
// todo: hook here but prepend? put this off for later
SMSReceiver.newMessage(message);
if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) {
conversation.prepend(message);
} else {

View File

@ -2,18 +2,30 @@ package eu.siacs.conversations.services;
import android.content.*;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.jid.Jid;
import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
public class SMSReceiver extends BroadcastReceiver {
public static final String ECHO_SERVER = "echo.burtrum.org";
public static XmppConnectionService xmppConnectionService;
public static Account account = null;
public static Account getAccount() {
if(account != null)
return account;
return account = xmppConnectionService.getAccounts().get(0);
}
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
@ -33,18 +45,13 @@ public class SMSReceiver extends BroadcastReceiver {
Log.d(Config.LOGTAG, "SMSReceiver: " + from + ": " + message);
Log.d(Config.LOGTAG, "SMSReceiver: xmppConnectionService: " + xmppConnectionService);
try {
// test
android.widget.Toast.makeText(context, from + ": " + message, android.widget.Toast.LENGTH_SHORT).show();
/*
*/
final Jid fromJid = Jid.fromString(from + "@echo.burtrum.org");
final Account account = xmppConnectionService.getAccounts().get(0);
final Jid fromJid = Jid.fromParts(from, ECHO_SERVER, null);
final MessagePacket packet = new MessagePacket();
packet.setType(MessagePacket.TYPE_NORMAL);
//packet.setAttribute("id",id);
packet.setTo(fromJid);
packet.setFrom(account.getJid());
packet.setFrom(getAccount().getJid());
packet.addChild("echo", "https://code.moparisthebest.com/moparisthebest/xmpp-echo-self");
@ -55,11 +62,11 @@ public class SMSReceiver extends BroadcastReceiver {
forwardedMsg.setAttribute("xmlns", "jabber:client");
forwardedMsg.setType(MessagePacket.TYPE_CHAT);
forwardedMsg.setTo(account.getJid());
forwardedMsg.setTo(getAccount().getJid());
forwardedMsg.setFrom(fromJid);
forwardedMsg.setBody(message);
xmppConnectionService.sendMessagePacket(account, packet);
xmppConnectionService.sendMessagePacket(getAccount(), packet);
//---send a broadcast intent to update the SMS received in the activity---
/*
@ -75,4 +82,21 @@ public class SMSReceiver extends BroadcastReceiver {
}
}
}
public static void newMessage(final Message message) {
Log.d(Config.LOGTAG, "SMSReceiver: checking: " + message.toString());
//Log.d(Config.LOGTAG, String.format("SMSReceiver: checking counterpart: '%s' true: '%s'", message.getCounterpart(), message.getTrueCounterpart()));
if(!message.getConversation().getJid().getDomainpart().equals(ECHO_SERVER) ||
!message.getConversation().getAccount().getJid().toBareJid().equals(getAccount().getJid().toBareJid()) ||
message.getStatus() == Message.STATUS_RECEIVED)
return;
Log.d(Config.LOGTAG, String.format("SMSReceiver: sending to '%s' body: '%s'", message.getConversation().getJid().getLocalpart(), message.getBody()));
//if(false)
new Thread(new Runnable() {
public void run() {
final SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(message.getConversation().getJid().getLocalpart(), null, message.getBody(), null, null);
}
}).start();
}
}

View File

@ -1283,10 +1283,12 @@ public class XmppConnectionService extends Service {
} else {
if (addToConversation) {
conversation.add(message);
SMSReceiver.newMessage(message);
}
if (saveInDb) {
databaseBackend.createMessage(message);
} else if (message.edited()) {
// todo: wtf to do with edited messages? SOL I guess?
databaseBackend.updateMessage(message, message.getEditedId());
}
updateConversationUi();

View File

@ -227,7 +227,7 @@ public final class Jid {
if (o == null || getClass() != o.getClass()) return false;
final Jid jid = (Jid) o;
// todo: this is a bug, hashcodes could be the same for different JIDs...
return jid.hashCode() == this.hashCode();
}