summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-07-04 03:05:17 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-07-04 03:05:17 +0000
commit6939ffa655c212c590127609dc08216587be2a7a (patch)
treeffa70413bb2cf59a70a5dd7ba0a485e45dbd2d90
parente163d51d80eb96c24be98f8284a9a389802baad7 (diff)
parent8b5c8a60f01307085b3eeae86921fdb003dde215 (diff)
downloadMessenger-android10-s1-release.tar.gz
Snap for 5706892 from 8b5c8a60f01307085b3eeae86921fdb003dde215 to qt-releaseandroid-vts-10.0_r9android-vts-10.0_r8android-vts-10.0_r7android-vts-10.0_r6android-vts-10.0_r5android-vts-10.0_r4android-vts-10.0_r3android-vts-10.0_r2android-vts-10.0_r16android-vts-10.0_r15android-vts-10.0_r14android-vts-10.0_r13android-vts-10.0_r12android-vts-10.0_r11android-vts-10.0_r10android-vts-10.0_r1android-security-10.0.0_r75android-security-10.0.0_r74android-security-10.0.0_r73android-security-10.0.0_r72android-security-10.0.0_r71android-security-10.0.0_r70android-security-10.0.0_r69android-security-10.0.0_r68android-security-10.0.0_r67android-security-10.0.0_r66android-security-10.0.0_r65android-security-10.0.0_r64android-security-10.0.0_r63android-security-10.0.0_r62android-security-10.0.0_r61android-security-10.0.0_r60android-security-10.0.0_r59android-security-10.0.0_r58android-security-10.0.0_r57android-security-10.0.0_r56android-security-10.0.0_r55android-security-10.0.0_r54android-security-10.0.0_r53android-security-10.0.0_r52android-security-10.0.0_r51android-security-10.0.0_r50android-security-10.0.0_r49android-security-10.0.0_r48android-cts-10.0_r9android-cts-10.0_r8android-cts-10.0_r7android-cts-10.0_r6android-cts-10.0_r5android-cts-10.0_r4android-cts-10.0_r3android-cts-10.0_r2android-cts-10.0_r16android-cts-10.0_r15android-cts-10.0_r14android-cts-10.0_r13android-cts-10.0_r12android-cts-10.0_r11android-cts-10.0_r10android-cts-10.0_r1android-10.0.0_r6android-10.0.0_r5android-10.0.0_r47android-10.0.0_r46android-10.0.0_r4android-10.0.0_r3android-10.0.0_r2android-10.0.0_r17android-10.0.0_r11android-10.0.0_r10android-10.0.0_r1android10-tests-releaseandroid10-security-releaseandroid10-s3-releaseandroid10-s2-releaseandroid10-s1-releaseandroid10-release
Change-Id: I6d01c364dd324cb4a44b22d49cbcb7a8dc1146d9
-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());
}
}