Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7389302 authored by David Duarte's avatar David Duarte Committed by Android (Google) Code Review
Browse files

Merge "Don't send MAP SMS/MMS messages older than one year" into tm-mainline-prod

parents 39c8f474 12e30319
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@TargetApi(19)
public class BluetoothMapContentObserver {
@@ -1467,8 +1468,14 @@ public class BluetoothMapContentObserver {
                            if (mTransmitEvents && // extract contact details only if needed
                                    mMapEventReportVersion
                                            > BluetoothMapUtils.MAP_EVENT_REPORT_V10) {
                                String date = BluetoothMapUtils.getDateTimeString(
                                        c.getLong(c.getColumnIndex(Sms.DATE)));
                                long timestamp = c.getLong(c.getColumnIndex(Sms.DATE));
                                String date = BluetoothMapUtils.getDateTimeString(timestamp);
                                if (BluetoothMapUtils.isDateTimeOlderThanOneYear(timestamp)) {
                                    // Skip sending message events older than one year
                                    listChanged = false;
                                    msgListSms.remove(id);
                                    continue;
                                }
                                String subject = c.getString(c.getColumnIndex(Sms.BODY));
                                if (subject == null) {
                                    subject = "";
@@ -1627,7 +1634,6 @@ public class BluetoothMapContentObserver {

                        if (msg == null) {
                            /* New message - only notify on retrieve conf */
                            listChanged = true;
                            if (getMmsFolderName(type).equalsIgnoreCase(
                                    BluetoothMapContract.FOLDER_NAME_INBOX)
                                    && mtype != MESSAGE_TYPE_RETRIEVE_CONF) {
@@ -1639,8 +1645,16 @@ public class BluetoothMapContentObserver {
                            if (mTransmitEvents && // extract contact details only if needed
                                    mMapEventReportVersion
                                            != BluetoothMapUtils.MAP_EVENT_REPORT_V10) {
                                String date = BluetoothMapUtils.getDateTimeString(
                                // MMS date field is in seconds
                                long timestamp =
                                        TimeUnit.SECONDS.toMillis(
                                            c.getLong(c.getColumnIndex(Mms.DATE)));
                                String date = BluetoothMapUtils.getDateTimeString(timestamp);
                                if (BluetoothMapUtils.isDateTimeOlderThanOneYear(timestamp)) {
                                    // Skip sending new message events older than one year
                                    msgListMms.remove(id);
                                    continue;
                                }
                                String subject = c.getString(c.getColumnIndex(Mms.SUBJECT));
                                if (subject == null || subject.length() == 0) {
                                    /* Get subject from mms text body parts - if any exists */
@@ -1681,6 +1695,7 @@ public class BluetoothMapContentObserver {
                                evt = new Event(EVENT_TYPE_NEW, id, getMmsFolderName(type), null,
                                        TYPE.MMS);
                            }
                            listChanged = true;

                            sendEvent(evt);
                        } else {
+15 −0
Original line number Diff line number Diff line
@@ -677,6 +677,21 @@ public class BluetoothMapUtils {
        return format.format(cal.getTime());
    }

    static boolean isDateTimeOlderThanOneYear(long timestamp) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(timestamp);
        Calendar oneYearAgo = Calendar.getInstance();
        oneYearAgo.add(Calendar.YEAR, -1);
        if (cal.before(oneYearAgo)) {
            if (V) {
                Log.v(TAG, "isDateTimeOlderThanOneYear " + cal.getTimeInMillis()
                        + " oneYearAgo: " + oneYearAgo.getTimeInMillis());
            }
            return true;
        }
        return false;
    }

    static void savePeerSupportUtcTimeStamp(int remoteFeatureMask) {
        if ((remoteFeatureMask & MAP_FEATURE_DEFINED_TIMESTAMP_FORMAT_BIT)
                == MAP_FEATURE_DEFINED_TIMESTAMP_FORMAT_BIT) {
+67 −7
Original line number Diff line number Diff line
@@ -64,9 +64,11 @@ import org.mockito.Spy;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@MediumTest
@RunWith(AndroidJUnit4.class)
@@ -89,7 +91,8 @@ public class BluetoothMapContentObserverTest {
    static final long TEST_OLD_FOLDER_ID = 6;
    static final int TEST_READ_FLAG_ONE = 1;
    static final int TEST_READ_FLAG_ZERO = 0;
    static final long TEST_DATE = 1;
    static final long TEST_DATE_MS = Calendar.getInstance().getTimeInMillis();
    static final long TEST_DATE_SEC = TimeUnit.MILLISECONDS.toSeconds(TEST_DATE_MS);
    static final String TEST_SUBJECT = "subject";
    static final int TEST_MMS_MTYPE = 1;
    static final int TEST_MMS_TYPE_ALL = Telephony.BaseMmsColumns.MESSAGE_BOX_ALL;
@@ -943,7 +946,7 @@ public class BluetoothMapContentObserverTest {
                BluetoothMapContract.MessageColumns.FROM_LIST,
                BluetoothMapContract.MessageColumns.FLAG_HIGH_PRIORITY});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_INBOX_FOLDER_ID, TEST_READ_FLAG_ONE,
                TEST_DATE, TEST_SUBJECT, TEST_ADDRESS, 1});
                TEST_DATE_MS, TEST_SUBJECT, TEST_ADDRESS, 1});
        when(mProviderClient.query(any(), any(), any(), any(), any())).thenReturn(cursor);

        Map<Long, BluetoothMapContentObserver.Msg> map = new HashMap<>();
@@ -981,7 +984,7 @@ public class BluetoothMapContentObserverTest {
                BluetoothMapContract.MessageColumns.THREAD_ID,
                BluetoothMapContract.MessageColumns.THREAD_NAME});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_INBOX_FOLDER_ID, TEST_READ_FLAG_ONE,
                TEST_DATE, TEST_SUBJECT, TEST_ADDRESS, 1, 1, "threadName"});
                TEST_DATE_MS, TEST_SUBJECT, TEST_ADDRESS, 1, 1, "threadName"});
        when(mProviderClient.query(any(), any(), any(), any(), any())).thenReturn(cursor);

        Map<Long, BluetoothMapContentObserver.Msg> map = new HashMap<>();
@@ -1174,7 +1177,7 @@ public class BluetoothMapContentObserverTest {
                Mms.MESSAGE_TYPE, Mms.THREAD_ID, Mms.READ, Mms.DATE, Mms.SUBJECT,
                Mms.PRIORITY, Mms.Addr.ADDRESS});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_MMS_TYPE_ALL, TEST_MMS_MTYPE,
                TEST_THREAD_ID, TEST_READ_FLAG_ONE, TEST_DATE, TEST_SUBJECT,
                TEST_THREAD_ID, TEST_READ_FLAG_ONE, TEST_DATE_SEC, TEST_SUBJECT,
                PduHeaders.PRIORITY_HIGH, null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
                any(), any());
@@ -1204,7 +1207,7 @@ public class BluetoothMapContentObserverTest {
                Mms.MESSAGE_TYPE, Mms.THREAD_ID, Mms.READ, Mms.DATE, Mms.SUBJECT,
                Mms.PRIORITY, Mms.Addr.ADDRESS});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_MMS_TYPE_ALL, TEST_MMS_MTYPE,
                TEST_THREAD_ID, TEST_READ_FLAG_ONE, TEST_DATE, TEST_SUBJECT,
                TEST_THREAD_ID, TEST_READ_FLAG_ONE, TEST_DATE_SEC, TEST_SUBJECT,
                PduHeaders.PRIORITY_HIGH, null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
                any(), any());
@@ -1228,6 +1231,36 @@ public class BluetoothMapContentObserverTest {
                TEST_READ_FLAG_ONE);
    }

    @Test
    public void handleMsgListChangesMms_withNonExistingOldMessage_andVersion12() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, -1);
        cal.add(Calendar.DATE, -1);
        long timestampSec = TimeUnit.MILLISECONDS.toSeconds(cal.getTimeInMillis());

        MatrixCursor cursor = new MatrixCursor(new String[] {Mms._ID, Mms.MESSAGE_BOX,
            Mms.MESSAGE_TYPE, Mms.THREAD_ID, Mms.READ, Mms.DATE, Mms.SUBJECT,
            Mms.PRIORITY, Mms.Addr.ADDRESS});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_MMS_TYPE_ALL, TEST_MMS_MTYPE,
            TEST_THREAD_ID, TEST_READ_FLAG_ONE, timestampSec, TEST_SUBJECT,
            PduHeaders.PRIORITY_HIGH, null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
            any(), any());

        Map<Long, BluetoothMapContentObserver.Msg> map = new HashMap<>();
        // Giving a different handle for msg below and cursor above makes handleMsgListChangesMms()
        // function for a non-existing message
        BluetoothMapContentObserver.Msg msg = new BluetoothMapContentObserver.Msg(TEST_HANDLE_TWO,
            TEST_INBOX_FOLDER_ID, TEST_READ_FLAG_ONE);
        map.put(TEST_HANDLE_TWO, msg);
        mObserver.setMsgListMms(map, true);
        mObserver.mMapEventReportVersion = BluetoothMapUtils.MAP_EVENT_REPORT_V12;

        mObserver.handleMsgListChangesMms();

        Assert.assertEquals(mObserver.getMsgListMms().get(TEST_HANDLE_ONE), null);
    }

    @Test
    public void handleMsgListChangesMms_withNonExistingMessage_andVersion10() {
        MatrixCursor cursor = new MatrixCursor(new String[] {Mms._ID, Mms.MESSAGE_BOX,
@@ -1378,7 +1411,7 @@ public class BluetoothMapContentObserverTest {
        MatrixCursor cursor = new MatrixCursor(new String[] {Sms._ID, Sms.TYPE, Sms.THREAD_ID,
                Sms.READ, Sms.DATE, Sms.BODY, Sms.ADDRESS, ContactsContract.Contacts.DISPLAY_NAME});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_SMS_TYPE_INBOX, TEST_THREAD_ID,
                TEST_READ_FLAG_ONE, TEST_DATE, TEST_SUBJECT, TEST_ADDRESS, null});
                TEST_READ_FLAG_ONE, TEST_DATE_MS, TEST_SUBJECT, TEST_ADDRESS, null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
                any(), any());

@@ -1407,7 +1440,7 @@ public class BluetoothMapContentObserverTest {
        MatrixCursor cursor = new MatrixCursor(new String[] {Sms._ID, Sms.TYPE, Sms.THREAD_ID,
                Sms.READ, Sms.DATE, Sms.BODY, Sms.ADDRESS});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_SMS_TYPE_ALL, TEST_THREAD_ID,
                TEST_READ_FLAG_ONE, TEST_DATE, "", null});
                TEST_READ_FLAG_ONE, TEST_DATE_MS, "", null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
                any(), any());

@@ -1431,6 +1464,33 @@ public class BluetoothMapContentObserverTest {
                TEST_READ_FLAG_ONE);
    }

    @Test
    public void handleMsgListChangesSms_withNonExistingOldMessage_andVersion12() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, -1);
        cal.add(Calendar.DATE, -1);

        MatrixCursor cursor = new MatrixCursor(new String[] {Sms._ID, Sms.TYPE, Sms.THREAD_ID,
            Sms.READ, Sms.DATE, Sms.BODY, Sms.ADDRESS});
        cursor.addRow(new Object[] {TEST_HANDLE_ONE, TEST_SMS_TYPE_ALL, TEST_THREAD_ID,
            TEST_READ_FLAG_ONE, cal.getTimeInMillis(), "", null});
        doReturn(cursor).when(mMapMethodProxy).contentResolverQuery(any(), any(), any(), any(),
            any(), any());

        Map<Long, BluetoothMapContentObserver.Msg> map = new HashMap<>();
        // Giving a different handle for msg below and cursor above makes handleMsgListChangesMms()
        // function for a non-existing message
        BluetoothMapContentObserver.Msg msg = new BluetoothMapContentObserver.Msg(TEST_HANDLE_TWO,
            TEST_SMS_TYPE_INBOX, TEST_READ_FLAG_ONE);
        map.put(TEST_HANDLE_TWO, msg);
        mObserver.setMsgListSms(map, true);
        mObserver.mMapEventReportVersion = BluetoothMapUtils.MAP_EVENT_REPORT_V12;

        mObserver.handleMsgListChangesSms();

        Assert.assertEquals(mObserver.getMsgListSms().get(TEST_HANDLE_ONE), null);
    }

    @Test
    public void handleMsgListChangesSms_withNonExistingMessage_andVersion10() {
        MatrixCursor cursor = new MatrixCursor(new String[] {Sms._ID, Sms.TYPE, Sms.THREAD_ID,