summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRitwika Mitra <ritwikam@google.com>2019-08-06 14:30:24 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-08-06 14:30:24 -0700
commit0db99fd5fefad9cc36709bd01eb2c192a2ced39a (patch)
treee9632dee869aea8afb85a6ab456d570ad43b867b
parent289018176890a06379c049d893b48dea0539ff78 (diff)
parent4a6a99f1710792ee2fb04884b0ba4f399789cec4 (diff)
downloadMessenger-0db99fd5fefad9cc36709bd01eb2c192a2ced39a.tar.gz
Merge "Differentiate between message read on the phone, and on the car." into pi-car-dev am: 2e3cbea03b
am: 4a6a99f171 Change-Id: Id42fbe3be5f94d1011832f61750805d7ac79ea5d
-rw-r--r--src/com/android/car/messenger/MapMessage.java25
-rw-r--r--src/com/android/car/messenger/MessengerDelegate.java4
-rw-r--r--src/com/android/car/messenger/SmsDatabaseHandler.java2
-rw-r--r--tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java28
4 files changed, 43 insertions, 16 deletions
diff --git a/src/com/android/car/messenger/MapMessage.java b/src/com/android/car/messenger/MapMessage.java
index 4eee956..b4b7aee 100644
--- a/src/com/android/car/messenger/MapMessage.java
+++ b/src/com/android/car/messenger/MapMessage.java
@@ -33,7 +33,8 @@ class MapMessage {
private String mSenderContactUri;
private String mMessageText;
private long mReceiveTime;
- private boolean mIsRead;
+ private boolean mIsReadOnPhone;
+ private boolean mIsReadOnCar;
/**
* Constructs a {@link MapMessage} from {@code intent} that was received from MAP service via
@@ -99,7 +100,7 @@ class MapMessage {
mSenderContactUri = senderContactUri;
mSenderName = senderName;
mReceiveTime = receiveTime;
- mIsRead = isRead;
+ mIsReadOnPhone = isRead;
}
/**
@@ -151,14 +152,21 @@ class MapMessage {
}
public void markMessageAsRead() {
- mIsRead = true;
+ mIsReadOnCar = true;
}
/**
- * Returns the read status of the message.
+ * Returns {@code true} if message was read on the phone before it was received on the car.
*/
- public boolean isRead() {
- return mIsRead;
+ public boolean isReadOnPhone() {
+ return mIsReadOnPhone;
+ }
+
+ /**
+ * Returns {@code true} if message was read on the car.
+ */
+ public boolean isReadOnCar() {
+ return mIsReadOnCar;
}
@Override
@@ -169,8 +177,9 @@ class MapMessage {
", mMessageText='" + mMessageText + '\'' +
", mSenderContactUri='" + mSenderContactUri + '\'' +
", mSenderName='" + mSenderName + '\'' +
- ", mReceiveTime=" + mReceiveTime +
- ", mIsRead= " + mIsRead +
+ ", mReceiveTime=" + mReceiveTime + '\'' +
+ ", mIsReadOnPhone= " + mIsReadOnPhone + '\'' +
+ ", mIsReadOnCar= " + mIsReadOnCar +
"}";
}
}
diff --git a/src/com/android/car/messenger/MessengerDelegate.java b/src/com/android/car/messenger/MessengerDelegate.java
index 8c7b382..28eeeee 100644
--- a/src/com/android/car/messenger/MessengerDelegate.java
+++ b/src/com/android/car/messenger/MessengerDelegate.java
@@ -219,7 +219,7 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe
NotificationInfo info = mNotificationInfos.get(senderKey);
for (MessageKey key : info.mMessageKeys) {
MapMessage message = mMessages.get(key);
- if (!message.isRead()) {
+ if (!message.isReadOnCar()) {
message.markMessageAsRead();
mSmsDatabaseHandler.addOrUpdate(message);
}
@@ -359,7 +359,7 @@ public class MessengerDelegate implements BluetoothMonitor.OnBluetoothEventListe
.setUri(notificationInfo.mSenderContactUri)
.build();
notificationInfo.mMessageKeys.stream().map(mMessages::get).forEachOrdered(message -> {
- if (!message.isRead()) {
+ if (!message.isReadOnCar()) {
messagingStyle.addMessage(
message.getMessageText(),
message.getReceiveTime(),
diff --git a/src/com/android/car/messenger/SmsDatabaseHandler.java b/src/com/android/car/messenger/SmsDatabaseHandler.java
index b672354..333d8d7 100644
--- a/src/com/android/car/messenger/SmsDatabaseHandler.java
+++ b/src/com/android/car/messenger/SmsDatabaseHandler.java
@@ -168,7 +168,7 @@ class SmsDatabaseHandler {
newMessage.put(Telephony.Sms.PERSON,
getContactId(mContentResolver,
message.getSenderContactUri()));
- newMessage.put(Telephony.Sms.READ, message.isRead());
+ newMessage.put(Telephony.Sms.READ, (message.isReadOnPhone() || message.isReadOnCar()));
return newMessage;
}
diff --git a/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java b/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java
index 6e730f0..cf04da3 100644
--- a/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java
+++ b/tests/robotests/src/com/android/car/messenger/MessengerDelegateTest.java
@@ -94,7 +94,8 @@ public class MessengerDelegateTest {
long deviceConnectionTimestamp =
mMessengerDelegate.mBTDeviceAddressToConnectionTimestamp.get(BLUETOOTH_ADDRESS_TWO);
- assertThat(deviceConnectionTimestamp).isEqualTo(timestamp);
+ // Sometimes there is slight flakiness in the timestamps.
+ assertThat(deviceConnectionTimestamp-timestamp).isLessThan(5L);
}
@Test
@@ -195,14 +196,30 @@ public class MessengerDelegateTest {
MessengerDelegate.NotificationInfo info = mMessengerDelegate.mNotificationInfos.get(
mSenderKey);
MessengerDelegate.MessageKey key = info.mMessageKeys.get(0);
- assertThat(mMessengerDelegate.mMessages.get(key).isRead()).isTrue();
+ assertThat(mMessengerDelegate.mMessages.get(key).isReadOnCar()).isTrue();
+ }
+
+ @Test
+ public void testMessageReadOnPhone() {
+ Intent readMessageIntent = createMessageIntent(mMockBluetoothDeviceOne, "mockHandle",
+ "510-111-2222", "testSender",
+ "Hello", /* timestamp= */ System.currentTimeMillis() + 10000L,
+ /* isReadOnPhone */ true);
+ mMessengerDelegate.onMessageReceived(readMessageIntent);
+
+ MessengerDelegate.NotificationInfo info = mMessengerDelegate.mNotificationInfos.get(
+ mSenderKey);
+ MessengerDelegate.MessageKey key = info.mMessageKeys.get(0);
+ assertThat(mMessengerDelegate.mMessages.get(key).isReadOnCar()).isFalse();
+ assertThat(mMessengerDelegate.mMessages.get(key).isReadOnPhone()).isTrue();
}
@Test
public void testNotificationsNotShownForExistingMessages() {
Intent existingMessageIntent = createMessageIntent(mMockBluetoothDeviceTwo, "mockHandle",
"510-111-2222", "testSender",
- "Hello", /* timestamp= */ System.currentTimeMillis() - 10000L);
+ "Hello", /* timestamp= */ System.currentTimeMillis() - 10000L,
+ /* isReadOnPhone */ false);
mMessengerDelegate.onDeviceConnected(mMockBluetoothDeviceTwo);
mMessengerDelegate.onMessageReceived(existingMessageIntent);
@@ -212,13 +229,14 @@ public class MessengerDelegateTest {
}
private Intent createMessageIntent(BluetoothDevice device, String handle, String senderUri,
- String senderName, String messageText, Long timestamp) {
+ String senderName, String messageText, Long timestamp, boolean isReadOnPhone) {
Intent intent = new Intent();
intent.setAction(BluetoothMapClient.ACTION_MESSAGE_RECEIVED);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
intent.putExtra(BluetoothMapClient.EXTRA_MESSAGE_HANDLE, handle);
intent.putExtra(BluetoothMapClient.EXTRA_SENDER_CONTACT_URI, senderUri);
intent.putExtra(BluetoothMapClient.EXTRA_SENDER_CONTACT_NAME, senderName);
+ intent.putExtra(BluetoothMapClient.EXTRA_MESSAGE_READ_STATUS, isReadOnPhone);
intent.putExtra(android.content.Intent.EXTRA_TEXT, messageText);
if (timestamp != null) {
intent.putExtra(BluetoothMapClient.EXTRA_MESSAGE_TIMESTAMP, timestamp);
@@ -240,7 +258,7 @@ public class MessengerDelegateTest {
private void createMockMessages() {
mMessageOneIntent= createMessageIntent(mMockBluetoothDeviceOne, "mockHandle",
"510-111-2222", "testSender",
- "Hello", /* timestamp= */ null);
+ "Hello", /* timestamp= */ null, /* isReadOnPhone */ false);
mMessageOne = MapMessage.parseFrom(mMessageOneIntent);
mMessageOneKey = new MessengerDelegate.MessageKey(mMessageOne);
mSenderKey = new MessengerDelegate.SenderKey(mMessageOne);