|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.vernu.sms.receivers; |
|
|
|
|
|
|
|
import android.content.BroadcastReceiver; |
|
|
|
import android.content.ContentValues; |
|
|
|
import android.content.Context; |
|
|
|
import android.content.Intent; |
|
|
|
import android.provider.Telephony; |
|
|
|
@ -19,54 +20,75 @@ public class SMSBroadcastReceiver extends BroadcastReceiver { |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onReceive(Context context, Intent intent) { |
|
|
|
Log.d(TAG, "onReceive: " + intent.getAction()); |
|
|
|
Log.d(TAG, "********** SMSBroadcastReceiver START **********"); |
|
|
|
try { |
|
|
|
Log.d(TAG, "Intent Action: " + intent.getAction()); |
|
|
|
|
|
|
|
if (!Objects.equals(intent.getAction(), Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { |
|
|
|
Log.d(TAG, "Not Valid intent"); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!Objects.equals(intent.getAction(), Telephony.Sms.Intents.SMS_DELIVER_ACTION)) { |
|
|
|
Log.d(TAG, "Not SMS_DELIVER_ACTION intent, ignoring."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); |
|
|
|
if (messages == null) { |
|
|
|
Log.d(TAG, "No messages found"); |
|
|
|
return; |
|
|
|
} |
|
|
|
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); |
|
|
|
if (messages == null || messages.length == 0) { |
|
|
|
Log.d(TAG, "No messages found in intent."); |
|
|
|
return; |
|
|
|
} |
|
|
|
Log.d(TAG, "Found " + messages.length + " message parts."); |
|
|
|
|
|
|
|
String deviceId = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, ""); |
|
|
|
String apiKey = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_API_KEY_KEY, ""); |
|
|
|
boolean receiveSMSEnabled = SharedPreferenceHelper.getSharedPreferenceBoolean(context, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, false); |
|
|
|
String deviceId = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, ""); |
|
|
|
String apiKey = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_API_KEY_KEY, ""); |
|
|
|
boolean receiveSMSEnabled = SharedPreferenceHelper.getSharedPreferenceBoolean(context, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, false); |
|
|
|
|
|
|
|
if (deviceId.isEmpty() || apiKey.isEmpty() || !receiveSMSEnabled) { |
|
|
|
Log.d(TAG, "Device ID or API Key is empty or Receive SMS Feature is disabled"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Log.d(TAG, "Device ID: " + deviceId); |
|
|
|
Log.d(TAG, "API Key: " + apiKey); |
|
|
|
Log.d(TAG, "Receive SMS Enabled: " + receiveSMSEnabled); |
|
|
|
|
|
|
|
// SMS receivedSMS = new SMS(); |
|
|
|
// receivedSMS.setType("RECEIVED"); |
|
|
|
// for (SmsMessage message : messages) { |
|
|
|
// receivedSMS.setMessage(receivedSMS.getMessage() + message.getMessageBody()); |
|
|
|
// receivedSMS.setSender(message.getOriginatingAddress()); |
|
|
|
// receivedSMS.setReceivedAt(new Date(message.getTimestampMillis())); |
|
|
|
// } |
|
|
|
if (deviceId.isEmpty() || apiKey.isEmpty() || !receiveSMSEnabled) { |
|
|
|
Log.d(TAG, "Device ID or API Key is empty or Receive SMS Feature is disabled. Aborting."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
SMSDTO receivedSMSDTO = new SMSDTO(); |
|
|
|
SMSDTO receivedSMSDTO = new SMSDTO(); |
|
|
|
receivedSMSDTO.setMessage(""); |
|
|
|
|
|
|
|
for (SmsMessage message : messages) { |
|
|
|
receivedSMSDTO.setMessage(receivedSMSDTO.getMessage() + message.getMessageBody()); |
|
|
|
receivedSMSDTO.setSender(message.getOriginatingAddress()); |
|
|
|
receivedSMSDTO.setReceivedAtInMillis(message.getTimestampMillis()); |
|
|
|
} |
|
|
|
// receivedSMSDTO.setSender(receivedSMS.getSender()); |
|
|
|
// receivedSMSDTO.setMessage(receivedSMS.getMessage()); |
|
|
|
// receivedSMSDTO.setReceivedAt(receivedSMS.getReceivedAt()); |
|
|
|
StringBuilder messageBody = new StringBuilder(); |
|
|
|
String originatingAddress = null; |
|
|
|
long timestampMillis = 0; |
|
|
|
|
|
|
|
SMSReceivedWorker.enqueueWork(context, deviceId, apiKey, receivedSMSDTO); |
|
|
|
} |
|
|
|
for (SmsMessage message : messages) { |
|
|
|
messageBody.append(message.getMessageBody()); |
|
|
|
if (originatingAddress == null) { |
|
|
|
originatingAddress = message.getOriginatingAddress(); |
|
|
|
} |
|
|
|
if (timestampMillis == 0) { |
|
|
|
timestampMillis = message.getTimestampMillis(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
receivedSMSDTO.setMessage(messageBody.toString()); |
|
|
|
receivedSMSDTO.setSender(originatingAddress); |
|
|
|
receivedSMSDTO.setReceivedAtInMillis(timestampMillis); |
|
|
|
|
|
|
|
// private void updateLocalReceivedSMS(SMS localReceivedSMS, Context context) { |
|
|
|
// Executors.newSingleThreadExecutor().execute(() -> { |
|
|
|
// AppDatabase appDatabase = AppDatabase.getInstance(context); |
|
|
|
// appDatabase.localReceivedSMSDao().insertAll(localReceivedSMS); |
|
|
|
// }); |
|
|
|
// } |
|
|
|
Log.d(TAG, "Assembled SMS DTO: " + receivedSMSDTO.toString()); |
|
|
|
|
|
|
|
ContentValues values = new ContentValues(); |
|
|
|
values.put(Telephony.Sms.ADDRESS, receivedSMSDTO.getSender()); |
|
|
|
values.put(Telephony.Sms.BODY, receivedSMSDTO.getMessage()); |
|
|
|
values.put(Telephony.Sms.DATE, receivedSMSDTO.getReceivedAtInMillis()); |
|
|
|
|
|
|
|
Log.d(TAG, "Inserting SMS into Inbox..."); |
|
|
|
context.getContentResolver().insert(Telephony.Sms.Inbox.CONTENT_URI, values); |
|
|
|
Log.d(TAG, "SMS inserted into Inbox."); |
|
|
|
|
|
|
|
Log.d(TAG, "Enqueuing SMSReceivedWorker..."); |
|
|
|
SMSReceivedWorker.enqueueWork(context, deviceId, apiKey, receivedSMSDTO); |
|
|
|
Log.d(TAG, "SMSReceivedWorker enqueued."); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
Log.e(TAG, "An error occurred in SMSBroadcastReceiver", e); |
|
|
|
} finally { |
|
|
|
Log.d(TAG, "********** SMSBroadcastReceiver END **********"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |