summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2019-08-14 12:04:08 -0700
committerXin Li <delphij@google.com>2019-08-14 12:04:08 -0700
commitdcf125e91caa444713409eb08a88bda49b8784d2 (patch)
tree48bceb92c813c93c271bd7f887aeac6a47d112b0
parent204199fefef8a790267cef0749710618db0ea31a (diff)
parent3a0a33d2b877bffab8343cb8eb5896230dea51a5 (diff)
downloadMessenger-temp_140451723.tar.gz
DO NOT MERGE - Merge qt-dev-plus-aosp-without-vendor (5713463) into stage-aosp-mastertemp_140451723
Bug: 134405016 Change-Id: I4132a90bd122e1811fbe78f7482f28691d204f9e
-rw-r--r--src/com/android/car/messenger/MessengerDelegate.java11
-rw-r--r--src/com/android/car/messenger/MmsReceiver.java2
-rw-r--r--src/com/android/car/messenger/SmsDatabaseHandler.java44
-rw-r--r--src/com/android/car/messenger/SmsReceiver.java102
4 files changed, 51 insertions, 108 deletions
diff --git a/src/com/android/car/messenger/MessengerDelegate.java b/src/com/android/car/messenger/MessengerDelegate.java
index b2a5cda..6328905 100644
--- a/src/com/android/car/messenger/MessengerDelegate.java
+++ b/src/com/android/car/messenger/MessengerDelegate.java
@@ -218,6 +218,11 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe
/** Removes all messages related to the inputted predicate, and cancels their notifications. **/
private void cleanupMessagesAndNotifications(Predicate<CompositeKey> predicate) {
+ for (MessageKey key : mMessages.keySet()) {
+ if (predicate.test(key)) {
+ mSmsDatabaseHandler.removeMessagesForDevice(key.getDeviceAddress());
+ }
+ }
mMessages.entrySet().removeIf(
messageKeyMapMessageEntry -> predicate.test(messageKeyMapMessageEntry.getKey()));
clearNotifications(predicate);
@@ -231,7 +236,7 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe
return;
}
- SmsReceiver.readDatabase(mContext);
+ SmsDatabaseHandler.readDatabase(mContext);
SenderKey senderKey = new SenderKey(mapMessage);
if (!mNotificationInfos.containsKey(senderKey)) {
mNotificationInfos.put(senderKey, new NotificationInfo(mapMessage.getSenderName(),
@@ -293,9 +298,7 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe
}
protected void cleanup() {
- for (String address : mBTDeviceAddressToConnectionTimestamp.keySet()) {
- mSmsDatabaseHandler.removeMessagesForDevice(address);
- }
+ cleanupMessagesAndNotifications(key -> true);
if (mBluetoothMapClient != null) {
mBluetoothMapClient.close();
}
diff --git a/src/com/android/car/messenger/MmsReceiver.java b/src/com/android/car/messenger/MmsReceiver.java
index d9b9fd4..37cc5ef 100644
--- a/src/com/android/car/messenger/MmsReceiver.java
+++ b/src/com/android/car/messenger/MmsReceiver.java
@@ -19,8 +19,6 @@ package com.android.car.messenger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.util.Log;
-
/**
* No-op Receiver that only exists in order to be eligible to be the default SMS app.
diff --git a/src/com/android/car/messenger/SmsDatabaseHandler.java b/src/com/android/car/messenger/SmsDatabaseHandler.java
index 36f4cec..b672354 100644
--- a/src/com/android/car/messenger/SmsDatabaseHandler.java
+++ b/src/com/android/car/messenger/SmsDatabaseHandler.java
@@ -14,11 +14,15 @@ import android.database.DatabaseUtils;
import android.net.Uri;
import android.provider.BaseColumns;
import android.provider.Telephony;
+import android.util.Log;
import androidx.core.content.ContextCompat;
import com.android.car.messenger.log.L;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
/**
* Reads and writes SMS Messages into the Telephony.SMS Database.
*/
@@ -31,6 +35,8 @@ class SmsDatabaseHandler {
private static final String SMS_SELECTION = Telephony.Sms.ADDRESS + "=? AND "
+ Telephony.Sms.BODY + "=? AND (" + Telephony.Sms.DATE + ">=? OR " + Telephony.Sms.DATE
+ "<=?)";
+ private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(
+ "MMM dd,yyyy HH:mm");
private final ContentResolver mContentResolver;
private final boolean mCanWriteToDatabase;
@@ -38,7 +44,7 @@ class SmsDatabaseHandler {
protected SmsDatabaseHandler(Context context) {
mCanWriteToDatabase = canWriteToDatabase(context);
mContentResolver = context.getContentResolver();
- SmsReceiver.readDatabase(context);
+ readDatabase(context);
}
protected void addOrUpdate(MapMessage message) {
@@ -73,6 +79,42 @@ class SmsDatabaseHandler {
mContentResolver.delete(SMS_URI, smsSelection, smsSelectionArgs);
}
+ /**
+ * Reads the Telephony SMS Database, and logs all of the SMS messages that have been received
+ * in the last five minutes.
+ * @param context
+ */
+ protected static void readDatabase(Context context) {
+ if (!Log.isLoggable(TAG, Log.DEBUG)) {
+ return;
+ }
+
+ Long beginningTimeStamp = System.currentTimeMillis() - 300000;
+ String timeStamp = DATE_FORMATTER.format(new Date(beginningTimeStamp));
+ Log.d(TAG,
+ " ------ printing SMSs received after " + timeStamp + "-------- ");
+
+ String smsSelection = Telephony.Sms.DATE + ">=?";
+ String[] smsSelectionArgs = {Long.toString(beginningTimeStamp)};
+ Cursor cursor = context.getContentResolver().query(SMS_URI, null,
+ smsSelection,
+ smsSelectionArgs, null /* sortOrder */);
+ if (cursor != null) {
+ while (cursor.moveToNext()) {
+ String body = cursor.getString(12);
+
+ Date date = new Date(cursor.getLong(4));
+ Log.d(TAG,
+ "_id " + cursor.getInt(0) + " person: " + cursor.getInt(3) + " body: "
+ + body.substring(0, Math.min(body.length(), 17)) + " address: "
+ + cursor.getString(2) + " date: " + DATE_FORMATTER.format(
+ date) + " longDate " + cursor.getLong(4) + " read: "
+ + cursor.getInt(7));
+ }
+ }
+ Log.d(TAG, " ------ end read table --------");
+ }
+
/** Removes multiple previous copies, and inserts the new message. **/
private void removePreviousAndInsert(MapMessage message) {
String[] smsSelectionArgs = createSmsSelectionArgs(message);
diff --git a/src/com/android/car/messenger/SmsReceiver.java b/src/com/android/car/messenger/SmsReceiver.java
index bbcc60c..25dbf89 100644
--- a/src/com/android/car/messenger/SmsReceiver.java
+++ b/src/com/android/car/messenger/SmsReceiver.java
@@ -17,118 +17,18 @@
package com.android.car.messenger;
import android.content.BroadcastReceiver;
-import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.Telephony;
-import android.telephony.SmsMessage;
-import android.util.Log;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
/**
- * Receiver that listens for Telephony broadcasts when an SMS is received.
+ * No-op Receiver that only exists in order to be eligible to be the default SMS app.
*/
public class SmsReceiver extends BroadcastReceiver {
- private static final String TAG = "CM.SmsReceiver";
- private static final Uri SMS_URI = Telephony.Sms.CONTENT_URI;
- private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(
- "MMM dd,yyyy HH:mm");
@Override
public void onReceive(Context context, Intent intent) {
Intent startIntent = new Intent(context, MessengerService.class)
.setAction(MessengerService.ACTION_RECEIVED_SMS);
context.startForegroundService(startIntent);
-
- // If we are the default SMS app, we only care about the
- // Telephony.Sms.Intents.SMS_DELIVER_ACTION
- if (isDefaultSmsApp(context) && Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(
- intent.getAction())) {
- return;
- }
-
- if (isDefaultSmsApp(context)) parseSmsMessage(context, intent);
- readDatabase(context);
- }
-
- /**
- * Parses the {@link SmsMessage} from the intent to be inputted into the Telephony Database.
- */
- private void parseSmsMessage(Context context, Intent intent) {
- SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
- if (messages == null) {
- Log.w(TAG, "No sms messages found in the intent");
- return;
- }
-
- for (SmsMessage sms : messages) {
- insertMessageToTelephonyDb(sms, context, intent);
- }
- }
-
- private void insertMessageToTelephonyDb(SmsMessage sms, Context context, Intent intent) {
- ContentValues values = new ContentValues();
- values.put(Telephony.Sms.READ, 0);
- values.put(Telephony.Sms.ADDRESS, sms.getDisplayOriginatingAddress());
- values.put(Telephony.Sms.BODY, sms.getMessageBody());
- values.put(Telephony.Sms.DATE, sms.getTimestampMillis());
- values.put(Telephony.Sms.SUBSCRIPTION_ID, sms.getSubId());
- if (sms.getPseudoSubject().length() > 0) {
- values.put(Telephony.Sms.SUBJECT, sms.getPseudoSubject());
- }
- values.put(Telephony.Sms.PROTOCOL, sms.getProtocolIdentifier());
- values.put(Telephony.Sms.REPLY_PATH_PRESENT, sms.isReplyPathPresent() ? 1 : 0);
- values.put(Telephony.Sms.SERVICE_CENTER, sms.getServiceCenterAddress());
- values.put(Telephony.Sms.ERROR_CODE, intent.getIntExtra("errorCode", 0));
- values.put(Telephony.Sms.STATUS, sms.getStatus());
-
- Uri uri = context.getApplicationContext().getContentResolver().insert(SMS_URI, values);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Finished inserting latest SMS: " + uri);
- }
- }
-
- /**
- * Reads the Telephony SMS Database, and logs all of the SMS messages that have been received
- * in the last five minutes.
- * @param context
- */
- public static void readDatabase(Context context) {
- if (!Log.isLoggable(TAG, Log.DEBUG)) {
- return;
- }
-
- Long beginningTimeStamp = System.currentTimeMillis() - 300000;
- String timeStamp = DATE_FORMATTER.format(new Date(beginningTimeStamp));
- Log.d(TAG,
- " ------ printing SMSs received after " + timeStamp + "-------- ");
-
- String smsSelection = Telephony.Sms.DATE + ">=?";
- String[] smsSelectionArgs = {Long.toString(beginningTimeStamp)};
- Cursor cursor = context.getContentResolver().query(SMS_URI, null,
- smsSelection,
- smsSelectionArgs, null /* sortOrder */);
- if (cursor != null) {
- while (cursor.moveToNext()) {
- String body = cursor.getString(12);
-
- Date date = new Date(cursor.getLong(4));
- Log.d(TAG,
- "_id " + cursor.getInt(0) + " person: " + cursor.getInt(3) + " body: "
- + body.substring(0, Math.min(body.length(), 17)) + " address: "
- + cursor.getString(2) + " date: " + DATE_FORMATTER.format(
- date) + " longDate " + cursor.getLong(4) + " read: "
- + cursor.getInt(7));
- }
- }
- Log.d(TAG, " ------ end read table --------");
- }
-
- private boolean isDefaultSmsApp(Context context) {
- return Telephony.Sms.getDefaultSmsPackage(context).equals(context.getPackageName());
}
}