package com.example.sendreadsmsexample;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;
import android.widget.Toast;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
public class SmsBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
MainActivity mainActivity = new MainActivity();
StringManager stringManager = new StringManager();
MessageLogger messageLogger = new MessageLogger();
KeyManager keyManager = new KeyManager();
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String msg_from = "";
String msgBody = "";
if (bundle != null)
{
try
{
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
msgBody = msgs[i].getMessageBody();
if (MainActivity.mThis != null )
{
if( stringManager.isKey(msgBody) && keyManager.hasKey(msg_from, context) == false )
{
Toast.makeText(context,"Recieved key piece: " + stringManager.getKeyNumber(msgBody) + " from " + msg_from + ".", Toast.LENGTH_LONG).show();
keyManager.addKeyEntry(msg_from, msgBody, context);
if( keyManager.hasKey(msg_from, context) )
{
Toast.makeText(context,"A secure link has been established! You can now send encrypted messages to " + msg_from + ".", Toast.LENGTH_LONG).show();
}
}
else
{
((TextView) MainActivity.mThis.findViewById(R.id.txtFrom)).setText("Sender: " + msg_from + " | Recieved Message Packet # " + stringManager.getNumber(msgBody));
messageLogger.addEntry(msgBody, msg_from, context);
if(messageLogger.gotMessageByID(msg_from,stringManager.getNumberID(msgBody),context))
{
FileManager fileManager = new FileManager();
MessageHistory messageHistory = new MessageHistory(msg_from, context);
int ID = stringManager.getNumberID(msgBody);
RSAUtil rsa = new RSAUtil();
String text = "";
text = messageLogger.getMessageByID(msg_from, ID, context);
messageHistory.addEntry(text);
String[] entries = messageHistory.getEntries();
for(int j = 0; j < entries.length; j++)
{
try
{
entries[j] = "> " + rsa.decrypt(entries[j], fileManager.getContent("myPrivKey.txt", context)) + "\n";
}
catch (IllegalBlockSizeException e)
{
e.printStackTrace();
}
catch (InvalidKeyException e)
{
e.printStackTrace();
}
catch (BadPaddingException e)
{
e.printStackTrace();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (NoSuchPaddingException e)
{
e.printStackTrace();
}
}
((TextView) MainActivity.mThis.findViewById(R.id.txtFull)).setMovementMethod(new ScrollingMovementMethod());
((TextView) MainActivity.mThis.findViewById(R.id.txtFull)).setText(stringManager.unite(entries));
}
}
}
}
}
catch(Exception e)
{
}
}
}
}
}