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 Diff line number Diff line
@@ -186,25 +186,25 @@ class MapClientContent {
     * Store a message in database with the associated handle and timestamp.
     * 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
                + ", handle=" + handle + ", type=" + message.getType()
                + ", folder=" + message.getFolder());

        switch (message.getType()) {
            case MMS:
                storeMms(message, handle, timestamp);
                storeMms(message, handle, timestamp, seen);
                return;
            case SMS_CDMA:
            case SMS_GSM:
                storeSms(message, handle, timestamp);
                storeSms(message, handle, timestamp, seen);
                return;
            default:
                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");
        logV(message.toString());
        VCardEntry originator = message.getOriginator();
@@ -233,6 +233,7 @@ class MapClientContent {
        values.put(Sms.SUBSCRIPTION_ID, mSubscriptionId);
        values.put(Sms.DATE, timestamp);
        values.put(Sms.READ, readStatus);
        values.put(Sms.SEEN, seen);

        Uri results = mResolver.insert(contentUri, values);
        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");
        logV(message.toString());
        try {
@@ -326,7 +327,7 @@ class MapClientContent {
            values.put(Mms.TEXT_ONLY, true);
            values.put(Mms.MESSAGE_BOX, messageBox);
            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.MMS_VERSION, PduHeaders.CURRENT_MMS_VERSION);
            values.put(Mms.PRIORITY, PduHeaders.PRIORITY_NORMAL);
+25 −8
Original line number 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_CONNECTING_TIMEOUT = 3;
    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
    private static final String FOLDER_TELECOM = "telecom";
    private static final String FOLDER_MSG = "msg";
@@ -162,11 +166,13 @@ class MceStateMachine extends StateMachine {
        private final String mHandle;
        private final Long mTimestamp;
        private boolean mRead;
        private boolean mSeen;

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

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

        public synchronized boolean getSeen() {
            return mSeen;
        }

    }

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

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

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

        mPreviousState = BluetoothProfile.STATE_DISCONNECTED;

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

@@ -638,7 +654,7 @@ class MceStateMachine extends StateMachine {
                        if (messageHandle != null && messageHandle.length() > 2) {
                            if (SAVE_OUTBOUND_MESSAGES) {
                                mDatabase.storeMessage(requestPushMessage.getBMsg(), messageHandle,
                                        System.currentTimeMillis());
                                        System.currentTimeMillis(), MESSAGE_SEEN);
                            }
                            mSentMessageLog.put(messageHandle.substring(2),
                                    requestPushMessage.getBMsg());
@@ -721,7 +737,7 @@ class MceStateMachine extends StateMachine {
                    if (!mMessages.containsKey(event.getHandle())) {
                        Calendar calendar = Calendar.getInstance();
                        MessageMetadata metadata = new MessageMetadata(event.getHandle(),
                                calendar.getTime().getTime(), false);
                                calendar.getTime().getTime(), false, MESSAGE_NOT_SEEN);
                        mMessages.put(event.getHandle(), metadata);
                    }
                    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
                    mMessages.put(msg.getHandle(), new MessageMetadata(msg.getHandle(),
                            msg.getDateTime().getTime(), msg.isRead()));
                            msg.getDateTime().getTime(), msg.isRead(), MESSAGE_SEEN));
                    getMessage(msg.getHandle());
                }
            }
@@ -896,7 +912,8 @@ class MceStateMachine extends StateMachine {
                return;
            }
            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 (DBG) {
                    Log.d(TAG, "Ignoring message received in " + message.getFolder() + ".");
+4 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.bluetooth.mapclient;

import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;

import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
@@ -43,7 +45,8 @@ public class EventReport {
    private final String mOldFolder;
    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"));

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

final class RequestGetMessage extends Request {
class RequestGetMessage extends Request {

    private static final String TAG = "RequestGetMessage";

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

/* 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";

Loading