mirror of
https://github.com/moparisthebest/Conversations
synced 2024-11-24 01:32:17 -05:00
First hack at client-side sms gateway, receipt works
This commit is contained in:
parent
8f0cd86090
commit
3048d3aaa3
@ -64,11 +64,11 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 25
|
targetSdkVersion 22
|
||||||
versionCode 236
|
versionCode 236
|
||||||
versionName "1.21.0"
|
versionName "1.21.0"
|
||||||
archivesBaseName += "-$versionName"
|
archivesBaseName += "-$versionName"
|
||||||
applicationId "eu.siacs.conversations"
|
applicationId "eu.siacs.conversations.sms"
|
||||||
}
|
}
|
||||||
|
|
||||||
dexOptions {
|
dexOptions {
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.NFC" />
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||||
|
<uses-permission android:name="android.permission.SEND_SMS" />
|
||||||
|
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
||||||
|
<uses-permission android:name="android.permission.READ_SMS" />
|
||||||
|
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.READ_PHONE_STATE"
|
android:name="android.permission.READ_PHONE_STATE"
|
||||||
@ -218,6 +221,11 @@
|
|||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:grantUriPermissions="true"/>
|
android:grantUriPermissions="true"/>
|
||||||
|
|
||||||
|
<receiver android:name=".services.SMSReceiver">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
package eu.siacs.conversations.services;
|
||||||
|
|
||||||
|
import android.content.*;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.telephony.SmsMessage;
|
||||||
|
import android.util.Log;
|
||||||
|
import eu.siacs.conversations.Config;
|
||||||
|
import eu.siacs.conversations.entities.Account;
|
||||||
|
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 XmppConnectionService xmppConnectionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Bundle bundle = intent.getExtras();
|
||||||
|
if (bundle == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Object[] pdus = (Object[]) bundle.get("pdus");
|
||||||
|
for (int i = 0; i < pdus.length; ++i) {
|
||||||
|
SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[i]);
|
||||||
|
final String from = msg.getOriginatingAddress();
|
||||||
|
//if (!"7243".equals(msg.getOriginatingAddress())) continue;
|
||||||
|
// it's a message from Page Plus, but is it a balance message?
|
||||||
|
final String message = msg.getMessageBody();
|
||||||
|
if (message == null)
|
||||||
|
continue;
|
||||||
|
// it IS a balance message, get to parsing...
|
||||||
|
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 MessagePacket packet = new MessagePacket();
|
||||||
|
packet.setType(MessagePacket.TYPE_NORMAL);
|
||||||
|
//packet.setAttribute("id",id);
|
||||||
|
packet.setTo(fromJid);
|
||||||
|
packet.setFrom(account.getJid());
|
||||||
|
|
||||||
|
packet.addChild("echo", "https://code.moparisthebest.com/moparisthebest/xmpp-echo-self");
|
||||||
|
|
||||||
|
final Element forwarded = packet.addChild("forwarded", "urn:xmpp:forward:0");
|
||||||
|
// todo: add delay to forwarded with msg.getTimestampMillis()
|
||||||
|
final MessagePacket forwardedMsg = new MessagePacket();
|
||||||
|
forwarded.addChild(forwardedMsg);
|
||||||
|
|
||||||
|
forwardedMsg.setAttribute("xmlns", "jabber:client");
|
||||||
|
forwardedMsg.setType(MessagePacket.TYPE_CHAT);
|
||||||
|
forwardedMsg.setTo(account.getJid());
|
||||||
|
forwardedMsg.setFrom(fromJid);
|
||||||
|
forwardedMsg.setBody(message);
|
||||||
|
|
||||||
|
xmppConnectionService.sendMessagePacket(account, packet);
|
||||||
|
|
||||||
|
//---send a broadcast intent to update the SMS received in the activity---
|
||||||
|
/*
|
||||||
|
Intent broadcastIntent = new Intent();
|
||||||
|
broadcastIntent.setAction(Main.PP_BAL_RECEIVED_ACTION);
|
||||||
|
broadcastIntent.putExtra(Main.BALANCE, "someString");
|
||||||
|
context.sendBroadcast(broadcastIntent);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.d(Config.LOGTAG, "SMSReceiver: ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -167,6 +167,10 @@ public class XmppConnectionService extends Service {
|
|||||||
|
|
||||||
private long mLastActivity = 0;
|
private long mLastActivity = 0;
|
||||||
|
|
||||||
|
public XmppConnectionService() {
|
||||||
|
SMSReceiver.xmppConnectionService = this;
|
||||||
|
}
|
||||||
|
|
||||||
public DatabaseBackend databaseBackend;
|
public DatabaseBackend databaseBackend;
|
||||||
private ContentObserver contactObserver = new ContentObserver(null) {
|
private ContentObserver contactObserver = new ContentObserver(null) {
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user