diff options
author | Uchenna Okoye <uokoye@google.com> | 2021-05-21 17:50:49 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-21 17:50:49 +0000 |
commit | 52e4a68c01ac8f21258865c73a8298547d2348df (patch) | |
tree | e4bb24ed2b23e0adf60f21bf3d458e88467532b8 | |
parent | 63d29cf19cde5da4d7cc779b05812fd0c550eb9f (diff) | |
parent | 59d19776c91a5ec906a3bf3d5164e2059722e931 (diff) | |
download | Messenger-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
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; }); |