From ef9f1e98841ec52f32e1b298f75b03c519fb0937 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 1 Feb 2022 10:04:53 -0400 Subject: [PATCH] Fix crash when entering conversation search through bottom sheet. --- .../conversation/ConversationFragment.java | 4 +-- .../ConversationParentFragment.java | 9 +++---- .../conversation/ConversationViewModel.java | 25 +++++++++++++------ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 5005e19a7..878018406 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -384,7 +384,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect initializeMessageRequestViewModel(); initializeListAdapter(); - // TODO [alex] LargeScreenSupport -- conversationViewModel.getSearchQuery().observe(getViewLifecycleOwner(), this::onSearchQueryUpdated); + conversationViewModel.getSearchQuery().observe(getViewLifecycleOwner(), this::onSearchQueryUpdated); return view; } @@ -1161,7 +1161,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect return getListAdapter().isTypingViewEnabled(); } - public void onSearchQueryUpdated(@Nullable String query) { + private void onSearchQueryUpdated(@Nullable String query) { if (getListAdapter() != null) { getListAdapter().onSearchQueryUpdated(query); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index cb5dead65..c1ebf2dcf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -1020,8 +1020,7 @@ public class ConversationParentFragment extends Fragment public boolean onQueryTextSubmit(String query) { searchViewModel.onQueryUpdated(query, threadId, true); searchNav.showLoading(); - // TODO [alex] LargeScreenSupport -- Set search query on viewModel - fragment.onSearchQueryUpdated(query); + viewModel.setSearchQuery(query); return true; } @@ -1029,8 +1028,7 @@ public class ConversationParentFragment extends Fragment public boolean onQueryTextChange(String query) { searchViewModel.onQueryUpdated(query, threadId, false); searchNav.showLoading(); - // TODO [alex] LargeScreenSupport -- Set search query on viewModel - fragment.onSearchQueryUpdated(query); + viewModel.setSearchQuery(query); return true; } }; @@ -1059,8 +1057,7 @@ public class ConversationParentFragment extends Fragment searchViewModel.onSearchClosed(); searchNav.setVisibility(View.GONE); inputPanel.setHideForSearch(false); - // TODO [alex] LargeScreenSupport -- Set search query on viewModel - fragment.onSearchQueryUpdated(null); + viewModel.setSearchQuery(null); setBlockedUserState(recipient.get(), isSecureText, isDefaultSms); invalidateOptionsMenu(); return true; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java index 243dd3f6d..21dc02c10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java @@ -4,6 +4,7 @@ import android.app.Application; import androidx.annotation.MainThread; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveDataReactiveStreams; import androidx.lifecycle.MutableLiveData; @@ -90,6 +91,7 @@ public class ConversationViewModel extends ViewModel { private final Store threadAnimationStateStore; private final Observer threadAnimationStateStoreDriver; private final NotificationProfilesRepository notificationProfilesRepository; + private final MutableLiveData searchQuery; private final Map> sessionMemberCache = new HashMap<>(); @@ -115,6 +117,7 @@ public class ConversationViewModel extends ViewModel { this.conversationTopMargin = Transformations.distinctUntilChanged(LiveDataUtil.combineLatest(toolbarBottom, inlinePlayerHeight, Integer::sum)); this.threadAnimationStateStore = new Store<>(new ThreadAnimationState(-1L, null, false)); this.notificationProfilesRepository = new NotificationProfilesRepository(); + this.searchQuery = new MutableLiveData<>(); LiveData recipientLiveData = LiveDataUtil.mapAsync(recipientId, Recipient::resolved); LiveData threadAndRecipient = LiveDataUtil.combineLatest(threadId, recipientLiveData, ThreadAndRecipient::new); @@ -149,10 +152,10 @@ public class ConversationViewModel extends ViewModel { ApplicationDependencies.getDatabaseObserver().registerMessageInsertObserver(data.getThreadId(), messageInsertObserver); ConversationDataSource dataSource = new ConversationDataSource(context, data.getThreadId(), messageRequestData, data.showUniversalExpireTimerMessage()); - PagingConfig config = new PagingConfig.Builder().setPageSize(25) - .setBufferPages(3) - .setStartIndex(Math.max(startPosition, 0)) - .build(); + PagingConfig config = new PagingConfig.Builder().setPageSize(25) + .setBufferPages(3) + .setStartIndex(Math.max(startPosition, 0)) + .build(); Log.d(TAG, "Starting at position: " + startPosition + " || jumpToPosition: " + data.getJumpToPosition() + ", lastSeenPosition: " + data.getLastSeenPosition() + ", lastScrolledPosition: " + data.getLastScrolledPosition()); return new Pair<>(data.getThreadId(), PagedData.create(dataSource, config)); @@ -167,13 +170,13 @@ public class ConversationViewModel extends ViewModel { canShowAsBubble = LiveDataUtil.mapAsync(threadId, conversationRepository::canShowAsBubble); wallpaper = LiveDataUtil.mapDistinct(Transformations.switchMap(recipientId, id -> Recipient.live(id).getLiveData()), - Recipient::getWallpaper); + Recipient::getWallpaper); EventBus.getDefault().register(this); chatColors = LiveDataUtil.mapDistinct(Transformations.switchMap(recipientId, id -> Recipient.live(id).getLiveData()), - Recipient::getChatColors); + Recipient::getChatColors); threadAnimationStateStore.update(threadId, (id, state) -> { if (state.getThreadId() == id) { @@ -243,6 +246,14 @@ public class ConversationViewModel extends ViewModel { this.threadId.postValue(-1L); } + void setSearchQuery(@Nullable String query) { + searchQuery.setValue(query); + } + + @NonNull LiveData getSearchQuery() { + return searchQuery; + } + @NonNull LiveData getConversationTopMargin() { return conversationTopMargin; } @@ -310,7 +321,7 @@ public class ConversationViewModel extends ViewModel { .sortBy(Recipient::requireStringId) .toList(); - List names = ChatColorsPalette.Names.getAll(); + List names = ChatColorsPalette.Names.getAll(); Map colors = new HashMap<>(); for (int i = 0; i < sorted.size(); i++) { colors.put(sorted.get(i).getId(), names.get(i % names.size()));