Snap for 5706892 from 8b5c8a60f01307085b3eeae86921fdb003dde215 to qt-release

Change-Id: I6d01c364dd324cb4a44b22d49cbcb7a8dc1146d9
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 @@
 
     /** 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 @@
             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 @@
     }
 
     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 @@
 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.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 @@
     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 @@
     protected SmsDatabaseHandler(Context context) {
         mCanWriteToDatabase = canWriteToDatabase(context);
         mContentResolver = context.getContentResolver();
-        SmsReceiver.readDatabase(context);
+        readDatabase(context);
     }
 
     protected void addOrUpdate(MapMessage message) {
@@ -73,6 +79,42 @@
         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());
     }
 }