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

Commit 52f330bc authored by Aditi Katragadda's avatar Aditi Katragadda Committed by Gerrit Code Review
Browse files

Merge "Seen feature to add seen flag for message notifications"

parents 641eb357 27196f7e
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -186,25 +186,25 @@ class MapClientContent {
     * Store a message in database with the associated handle and timestamp.
     * Store a message in database with the associated handle and timestamp.
     * The handle is used to associate the local message with the remote message.
     * The handle is used to associate the local message with the remote message.
     */
     */
    void storeMessage(Bmessage message, String handle, Long timestamp) {
    void storeMessage(Bmessage message, String handle, Long timestamp, boolean seen) {
        logI("storeMessage(device=" + Utils.getLoggableAddress(mDevice) + ", time=" + timestamp
        logI("storeMessage(device=" + Utils.getLoggableAddress(mDevice) + ", time=" + timestamp
                + ", handle=" + handle + ", type=" + message.getType()
                + ", handle=" + handle + ", type=" + message.getType()
                + ", folder=" + message.getFolder());
                + ", folder=" + message.getFolder());


        switch (message.getType()) {
        switch (message.getType()) {
            case MMS:
            case MMS:
                storeMms(message, handle, timestamp);
                storeMms(message, handle, timestamp, seen);
                return;
                return;
            case SMS_CDMA:
            case SMS_CDMA:
            case SMS_GSM:
            case SMS_GSM:
                storeSms(message, handle, timestamp);
                storeSms(message, handle, timestamp, seen);
                return;
                return;
            default:
            default:
                logD("Request to store unsupported message type: " + message.getType());
                logD("Request to store unsupported message type: " + message.getType());
        }
        }
    }
    }


    private void storeSms(Bmessage message, String handle, Long timestamp) {
    private void storeSms(Bmessage message, String handle, Long timestamp, boolean seen) {
        logD("storeSms");
        logD("storeSms");
        logV(message.toString());
        logV(message.toString());
        VCardEntry originator = message.getOriginator();
        VCardEntry originator = message.getOriginator();
@@ -233,6 +233,7 @@ class MapClientContent {
        values.put(Sms.SUBSCRIPTION_ID, mSubscriptionId);
        values.put(Sms.SUBSCRIPTION_ID, mSubscriptionId);
        values.put(Sms.DATE, timestamp);
        values.put(Sms.DATE, timestamp);
        values.put(Sms.READ, readStatus);
        values.put(Sms.READ, readStatus);
        values.put(Sms.SEEN, seen);


        Uri results = mResolver.insert(contentUri, values);
        Uri results = mResolver.insert(contentUri, values);
        mHandleToUriMap.put(handle, results);
        mHandleToUriMap.put(handle, results);
@@ -301,7 +302,7 @@ class MapClientContent {
        }
        }
    }
    }


    private void storeMms(Bmessage message, String handle, Long timestamp) {
    private void storeMms(Bmessage message, String handle, Long timestamp, boolean seen) {
        logD("storeMms");
        logD("storeMms");
        logV(message.toString());
        logV(message.toString());
        try {
        try {
@@ -326,7 +327,7 @@ class MapClientContent {
            values.put(Mms.TEXT_ONLY, true);
            values.put(Mms.TEXT_ONLY, true);
            values.put(Mms.MESSAGE_BOX, messageBox);
            values.put(Mms.MESSAGE_BOX, messageBox);
            values.put(Mms.READ, read);
            values.put(Mms.READ, read);
            values.put(Mms.SEEN, 0);
            values.put(Mms.SEEN, seen);
            values.put(Mms.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ);
            values.put(Mms.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ);
            values.put(Mms.MMS_VERSION, PduHeaders.CURRENT_MMS_VERSION);
            values.put(Mms.MMS_VERSION, PduHeaders.CURRENT_MMS_VERSION);
            values.put(Mms.PRIORITY, PduHeaders.PRIORITY_NORMAL);
            values.put(Mms.PRIORITY, PduHeaders.PRIORITY_NORMAL);
+25 −8
Original line number Original line Diff line number Diff line
@@ -116,6 +116,10 @@ class MceStateMachine extends StateMachine {
    private static final int MSG_DISCONNECT = 2;
    private static final int MSG_DISCONNECT = 2;
    private static final int MSG_CONNECTING_TIMEOUT = 3;
    private static final int MSG_CONNECTING_TIMEOUT = 3;
    private static final int MSG_DISCONNECTING_TIMEOUT = 4;
    private static final int MSG_DISCONNECTING_TIMEOUT = 4;

    private static final boolean MESSAGE_SEEN = true;
    private static final boolean MESSAGE_NOT_SEEN = false;

    // Folder names as defined in Bluetooth.org MAP spec V10
    // Folder names as defined in Bluetooth.org MAP spec V10
    private static final String FOLDER_TELECOM = "telecom";
    private static final String FOLDER_TELECOM = "telecom";
    private static final String FOLDER_MSG = "msg";
    private static final String FOLDER_MSG = "msg";
@@ -162,11 +166,13 @@ class MceStateMachine extends StateMachine {
        private final String mHandle;
        private final String mHandle;
        private final Long mTimestamp;
        private final Long mTimestamp;
        private boolean mRead;
        private boolean mRead;
        private boolean mSeen;


        MessageMetadata(String handle, Long timestamp, boolean read) {
        MessageMetadata(String handle, Long timestamp, boolean read, boolean seen) {
            mHandle = handle;
            mHandle = handle;
            mTimestamp = timestamp;
            mTimestamp = timestamp;
            mRead = read;
            mRead = read;
            mSeen = seen;
        }
        }


        public String getHandle() {
        public String getHandle() {
@@ -184,6 +190,11 @@ class MceStateMachine extends StateMachine {
        public synchronized void setRead(boolean read) {
        public synchronized void setRead(boolean read) {
            mRead = read;
            mRead = read;
        }
        }

        public synchronized boolean getSeen() {
            return mSeen;
        }

    }
    }


    // Map each message to its metadata via the handle
    // Map each message to its metadata via the handle
@@ -191,14 +202,16 @@ class MceStateMachine extends StateMachine {
            new ConcurrentHashMap<String, MessageMetadata>();
            new ConcurrentHashMap<String, MessageMetadata>();


    MceStateMachine(MapClientService service, BluetoothDevice device) {
    MceStateMachine(MapClientService service, BluetoothDevice device) {
        this(service, device, null);
        this(service, device, null, null);
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    MceStateMachine(MapClientService service, BluetoothDevice device, MasClient masClient) {
    MceStateMachine(MapClientService service, BluetoothDevice device, MasClient masClient,
            MapClientContent database) {
        super(TAG);
        super(TAG);
        mMasClient = masClient;
        mMasClient = masClient;
        mService = service;
        mService = service;
        mDatabase = database;


        mPreviousState = BluetoothProfile.STATE_DISCONNECTED;
        mPreviousState = BluetoothProfile.STATE_DISCONNECTED;


@@ -543,7 +556,10 @@ class MceStateMachine extends StateMachine {
                    setMessageStatus(handle, status);
                    setMessageStatus(handle, status);
                }
                }
            };
            };
            // Keeps mock database from being overwritten in tests
            if (mDatabase == null) {
                mDatabase = new MapClientContent(mService, callbacks, mDevice);
                mDatabase = new MapClientContent(mService, callbacks, mDevice);
            }
            onConnectionStateChanged(mPreviousState, BluetoothProfile.STATE_CONNECTED);
            onConnectionStateChanged(mPreviousState, BluetoothProfile.STATE_CONNECTED);
            if (Utils.isPtsTestMode()) return;
            if (Utils.isPtsTestMode()) return;


@@ -638,7 +654,7 @@ class MceStateMachine extends StateMachine {
                        if (messageHandle != null && messageHandle.length() > 2) {
                        if (messageHandle != null && messageHandle.length() > 2) {
                            if (SAVE_OUTBOUND_MESSAGES) {
                            if (SAVE_OUTBOUND_MESSAGES) {
                                mDatabase.storeMessage(requestPushMessage.getBMsg(), messageHandle,
                                mDatabase.storeMessage(requestPushMessage.getBMsg(), messageHandle,
                                        System.currentTimeMillis());
                                        System.currentTimeMillis(), MESSAGE_SEEN);
                            }
                            }
                            mSentMessageLog.put(messageHandle.substring(2),
                            mSentMessageLog.put(messageHandle.substring(2),
                                    requestPushMessage.getBMsg());
                                    requestPushMessage.getBMsg());
@@ -721,7 +737,7 @@ class MceStateMachine extends StateMachine {
                    if (!mMessages.containsKey(event.getHandle())) {
                    if (!mMessages.containsKey(event.getHandle())) {
                        Calendar calendar = Calendar.getInstance();
                        Calendar calendar = Calendar.getInstance();
                        MessageMetadata metadata = new MessageMetadata(event.getHandle(),
                        MessageMetadata metadata = new MessageMetadata(event.getHandle(),
                                calendar.getTime().getTime(), false);
                                calendar.getTime().getTime(), false, MESSAGE_NOT_SEEN);
                        mMessages.put(event.getHandle(), metadata);
                        mMessages.put(event.getHandle(), metadata);
                    }
                    }
                    mMasClient.makeRequest(new RequestGetMessage(event.getHandle(),
                    mMasClient.makeRequest(new RequestGetMessage(event.getHandle(),
@@ -782,7 +798,7 @@ class MceStateMachine extends StateMachine {
                    }
                    }
                    // A message listing coming from the server should always have up to date data
                    // A message listing coming from the server should always have up to date data
                    mMessages.put(msg.getHandle(), new MessageMetadata(msg.getHandle(),
                    mMessages.put(msg.getHandle(), new MessageMetadata(msg.getHandle(),
                            msg.getDateTime().getTime(), msg.isRead()));
                            msg.getDateTime().getTime(), msg.isRead(), MESSAGE_SEEN));
                    getMessage(msg.getHandle());
                    getMessage(msg.getHandle());
                }
                }
            }
            }
@@ -896,7 +912,8 @@ class MceStateMachine extends StateMachine {
                return;
                return;
            }
            }
            mDatabase.storeMessage(message, request.getHandle(),
            mDatabase.storeMessage(message, request.getHandle(),
                    mMessages.get(request.getHandle()).getTimestamp());
                    mMessages.get(request.getHandle()).getTimestamp(),
                    mMessages.get(request.getHandle()).getSeen());
            if (!INBOX_PATH.equalsIgnoreCase(message.getFolder())) {
            if (!INBOX_PATH.equalsIgnoreCase(message.getFolder())) {
                if (DBG) {
                if (DBG) {
                    Log.d(TAG, "Ignoring message received in " + message.getFolder() + ".");
                    Log.d(TAG, "Ignoring message received in " + message.getFolder() + ".");
+4 −1
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.bluetooth.mapclient;


import android.util.Log;
import android.util.Log;


import com.android.internal.annotations.VisibleForTesting;

import org.json.JSONException;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParser;
@@ -43,7 +45,8 @@ public class EventReport {
    private final String mOldFolder;
    private final String mOldFolder;
    private final Bmessage.Type mMsgType;
    private final Bmessage.Type mMsgType;


    private EventReport(HashMap<String, String> attrs) throws IllegalArgumentException {
    @VisibleForTesting
    EventReport(HashMap<String, String> attrs) throws IllegalArgumentException {
        mType = parseType(attrs.get("type"));
        mType = parseType(attrs.get("type"));


        if (mType != Type.MEMORY_FULL && mType != Type.MEMORY_AVAILABLE) {
        if (mType != Type.MEMORY_FULL && mType != Type.MEMORY_AVAILABLE) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -35,7 +35,7 @@ import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.nio.charset.StandardCharsets;


final class RequestGetMessage extends Request {
class RequestGetMessage extends Request {


    private static final String TAG = "RequestGetMessage";
    private static final String TAG = "RequestGetMessage";


+1 −1
Original line number Original line Diff line number Diff line
@@ -26,7 +26,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.Date;


/* Get a listing of messages in directory. */
/* Get a listing of messages in directory. */
final class RequestGetMessagesListing extends Request {
class RequestGetMessagesListing extends Request {


    private static final String TYPE = "x-bt/MAP-msg-listing";
    private static final String TYPE = "x-bt/MAP-msg-listing";


Loading