summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUchenna Okoye <uokoye@google.com>2021-05-21 17:50:49 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-05-21 17:50:49 +0000
commit52e4a68c01ac8f21258865c73a8298547d2348df (patch)
treee4bb24ed2b23e0adf60f21bf3d458e88467532b8
parent63d29cf19cde5da4d7cc779b05812fd0c550eb9f (diff)
parent59d19776c91a5ec906a3bf3d5164e2059722e931 (diff)
downloadMessenger-52e4a68c01ac8f21258865c73a8298547d2348df.tar.gz
Project import generated by Copybara. am: 59d19776c9
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/Messenger/+/14647703 Change-Id: I861b732306435994fbe2f82857a9f8f7a5a2b73e
-rw-r--r--src/com/android/car/messenger/core/util/VoiceUtil.java4
-rw-r--r--src/com/android/car/messenger/impl/CarMessengerApp.java3
-rw-r--r--src/com/android/car/messenger/impl/datamodels/ConversationsPerDeviceLiveData.java6
-rw-r--r--src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java16
-rw-r--r--src/com/android/car/messenger/impl/datamodels/UserAccountLiveData.java13
-rw-r--r--src/com/android/car/messenger/impl/datamodels/util/MessageUtils.java16
6 files changed, 41 insertions, 17 deletions
diff --git a/src/com/android/car/messenger/core/util/VoiceUtil.java b/src/com/android/car/messenger/core/util/VoiceUtil.java
index df6ae39..eb46c86 100644
--- a/src/com/android/car/messenger/core/util/VoiceUtil.java
+++ b/src/com/android/car/messenger/core/util/VoiceUtil.java
@@ -67,6 +67,10 @@ public class VoiceUtil {
/** Requests Voice request to read a conversation */
public static void voiceRequestReadConversation(
@NonNull Activity activity, @NonNull Conversation conversation) {
+ if (conversation.getMessages().isEmpty()) {
+ L.d("No messages to read from Conversation! Returning.");
+ return;
+ }
voiceRequestHelper(
activity,
conversation,
diff --git a/src/com/android/car/messenger/impl/CarMessengerApp.java b/src/com/android/car/messenger/impl/CarMessengerApp.java
index 4ed9440..98fbf58 100644
--- a/src/com/android/car/messenger/impl/CarMessengerApp.java
+++ b/src/com/android/car/messenger/impl/CarMessengerApp.java
@@ -50,8 +50,7 @@ public class CarMessengerApp extends Application implements UncaughtExceptionHan
if (background) {
L.e("Uncaught exception in background thread " + thread, ex);
final Handler handler = new Handler(getMainLooper());
- handler.post(
- () -> nullSafeUncaughtException(thread, ex));
+ handler.post(() -> nullSafeUncaughtException(thread, ex));
} else {
nullSafeUncaughtException(thread, ex);
}
diff --git a/src/com/android/car/messenger/impl/datamodels/ConversationsPerDeviceLiveData.java b/src/com/android/car/messenger/impl/datamodels/ConversationsPerDeviceLiveData.java
index fddb9fc..6cd2ec3 100644
--- a/src/com/android/car/messenger/impl/datamodels/ConversationsPerDeviceLiveData.java
+++ b/src/com/android/car/messenger/impl/datamodels/ConversationsPerDeviceLiveData.java
@@ -97,6 +97,12 @@ class ConversationsPerDeviceLiveData extends ContentProviderLiveData<Conversatio
getDifference(prevConversationIds, currentConversationIds);
if (newConversations.isEmpty() && removedConversations.isEmpty()) {
+ // Return early if no new conversations were added or removed since last change list.
+ // However, if no conversations is found, post an empty changelist to allow
+ // the subscriber update the UI with "no new conversations found"
+ if (currentConversationIds.isEmpty()) {
+ postValue(new ConversationIdChangeList());
+ }
return;
}
diff --git a/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java b/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java
index 7ae4a1f..1fee990 100644
--- a/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java
+++ b/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java
@@ -65,8 +65,6 @@ public class TelephonyDataModel implements DataModel {
private final HashMap<Integer, ConversationsPerDeviceLiveData>
mAccountIdToConversationListLiveData = new HashMap<>();
- @NonNull private final HashMap<String, Conversation> mConversationMap = new HashMap<>();
-
@NonNull
private static final Comparator<Conversation> sConversationComparator =
comparingLong(ConversationUtil::getConversationTimestamp).reversed();
@@ -86,26 +84,30 @@ public class TelephonyDataModel implements DataModel {
@Override
public LiveData<Collection<Conversation>> getConversations(@NonNull UserAccount userAccount) {
MediatorLiveData<Collection<Conversation>> liveData = new MediatorLiveData<>();
+ HashMap<String, Conversation> conversationMap = new HashMap<>();
subscribeToConversationItemChanges(
userAccount,
liveData,
/* onConversationItemChanged= */ conversationChangeSet -> {
- mConversationMap.put(
+ conversationMap.put(
conversationChangeSet.getConversation().getId(),
conversationChangeSet.getConversation());
liveData.postValue(
- mConversationMap.values().stream()
+ conversationMap.values().stream()
.sorted(sConversationComparator)
.collect(Collectors.toList()));
},
/* onConversationRemoved= */ conversationId -> {
- mConversationMap.remove(conversationId);
+ conversationMap.remove(conversationId);
liveData.postValue(
- mConversationMap.values().stream()
+ conversationMap.values().stream()
.sorted(sConversationComparator)
.collect(Collectors.toList()));
},
- /* onEmpty= */ onEmpty -> liveData.postValue(new ArrayList<>()));
+ /* onEmpty= */ onEmpty -> {
+ liveData.postValue(new ArrayList<>());
+ conversationMap.clear();
+ });
return liveData;
}
diff --git a/src/com/android/car/messenger/impl/datamodels/UserAccountLiveData.java b/src/com/android/car/messenger/impl/datamodels/UserAccountLiveData.java
index b37f5a7..0c3d27c 100644
--- a/src/com/android/car/messenger/impl/datamodels/UserAccountLiveData.java
+++ b/src/com/android/car/messenger/impl/datamodels/UserAccountLiveData.java
@@ -32,6 +32,7 @@ import com.android.car.messenger.impl.datamodels.UserAccountLiveData.UserAccount
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -112,6 +113,12 @@ public class UserAccountLiveData extends LiveData<UserAccountChangeList> {
Set<UserAccount> removedAccounts = getDifference(prevUserAccounts, accounts);
if (addedAccounts.isEmpty() && removedAccounts.isEmpty()) {
+ // Return early if no new accounts were added or removed since last change list.
+ // However, if no account is found, post an empty changelist to allow
+ // the subscriber update the UI with "no account found or all accounts disconnected"
+ if (accounts.isEmpty()) {
+ postValue(new UserAccountChangeList());
+ }
return;
}
@@ -192,8 +199,12 @@ public class UserAccountLiveData extends LiveData<UserAccountChangeList> {
List<SubscriptionInfo> subscriptionInfos =
mSubscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfos == null) {
- subscriptionInfos = new ArrayList<>();
+ return new ArrayList<>();
}
+ // The last added subscription is more likely the last device connection made
+ // and more likely relevant to the user.
+ // Reverse the subscription list to prioritize the last connected device.
+ Collections.reverse(subscriptionInfos);
return subscriptionInfos;
}
}
diff --git a/src/com/android/car/messenger/impl/datamodels/util/MessageUtils.java b/src/com/android/car/messenger/impl/datamodels/util/MessageUtils.java
index 3aa4c86..08dc1b3 100644
--- a/src/com/android/car/messenger/impl/datamodels/util/MessageUtils.java
+++ b/src/com/android/car/messenger/impl/datamodels/util/MessageUtils.java
@@ -87,14 +87,16 @@ public final class MessageUtils {
// lastReply references 2., messages references 3.
int messageStatus = message.getMessageStatus();
if (message.getMessageType() == MessageType.MESSAGE_TYPE_SENT) {
- lastReply.set(message.getTimestamp());
- return readMessages.isEmpty();
- } else {
- if (messageStatus == MessageStatus.MESSAGE_STATUS_READ
- || messageStatus == MessageStatus.MESSAGE_STATUS_NONE) {
- readMessages.add(message);
- return true;
+ if (lastReply.get() < message.getTimestamp()) {
+ lastReply.set(message.getTimestamp());
}
+ return readMessages.isEmpty();
+ }
+
+ if (messageStatus == MessageStatus.MESSAGE_STATUS_READ
+ || messageStatus == MessageStatus.MESSAGE_STATUS_NONE) {
+ readMessages.add(message);
+ return true;
}
return false;
});