diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-07-04 03:05:17 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-07-04 03:05:17 +0000 |
commit | 6939ffa655c212c590127609dc08216587be2a7a (patch) | |
tree | ffa70413bb2cf59a70a5dd7ba0a485e45dbd2d90 | |
parent | e163d51d80eb96c24be98f8284a9a389802baad7 (diff) | |
parent | 8b5c8a60f01307085b3eeae86921fdb003dde215 (diff) | |
download | Messenger-android10-tests-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.java | 11 | ||||
-rw-r--r-- | src/com/android/car/messenger/MmsReceiver.java | 2 | ||||
-rw-r--r-- | src/com/android/car/messenger/SmsDatabaseHandler.java | 44 | ||||
-rw-r--r-- | src/com/android/car/messenger/SmsReceiver.java | 102 |
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()); } } |