diff --git a/res/layout/camera_contact_selection_fragment.xml b/res/layout/camera_contact_selection_fragment.xml index d807f50ef0..86766b7443 100644 --- a/res/layout/camera_contact_selection_fragment.xml +++ b/res/layout/camera_contact_selection_fragment.xml @@ -73,6 +73,7 @@ android:id="@+id/camera_contacts_list" android:layout_width="match_parent" android:layout_height="0dp" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="@id/camera_contacts_footer_barrier" app:layout_constraintTop_toBottomOf="@id/camera_contacts_toolbar" /> diff --git a/src/org/thoughtcrime/securesms/mediasend/CameraContactAdapter.java b/src/org/thoughtcrime/securesms/mediasend/CameraContactAdapter.java index 2d47ff9c98..1859d08505 100644 --- a/src/org/thoughtcrime/securesms/mediasend/CameraContactAdapter.java +++ b/src/org/thoughtcrime/securesms/mediasend/CameraContactAdapter.java @@ -119,8 +119,7 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter 0 ? count + 1 : 0; + return super.getItemCount() + 1; } public void setContacts(@NonNull CameraContacts contacts, @NonNull Collection selected) { @@ -140,8 +139,7 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter 0 && globalPosition == getItemCount() - 1; + return globalPosition == getItemCount() - 1; } public static class ContactSection extends SectionedRecyclerViewAdapter.Section { diff --git a/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionFragment.java b/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionFragment.java index cf0dd8265e..f960df11d1 100644 --- a/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionFragment.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.mediasend; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -163,11 +164,13 @@ public class CameraContactSelectionFragment extends Fragment implements CameraCo contactViewModel.getContacts().observe(getViewLifecycleOwner(), contactState -> { if (contactState == null) return; - if (contactState.getContacts().isEmpty()) { + if (contactState.getContacts().isEmpty() && TextUtils.isEmpty(contactState.getQuery())) { cameraContactsEmpty.setVisibility(View.VISIBLE); + contactList.setVisibility(View.GONE); selectionFooterGroup.setVisibility(View.GONE); } else { cameraContactsEmpty.setVisibility(View.GONE); + contactList.setVisibility(View.VISIBLE); sendButton.setOnClickListener(v -> controller.onCameraContactsSendClicked(contactState.getSelected())); diff --git a/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionViewModel.java b/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionViewModel.java index 66a46e768e..d181618cbc 100644 --- a/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionViewModel.java +++ b/src/org/thoughtcrime/securesms/mediasend/CameraContactSelectionViewModel.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.mediasend; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; @@ -24,6 +25,8 @@ class CameraContactSelectionViewModel extends ViewModel { private final SingleLiveEvent error; private final Set selected; + private String currentQuery; + private CameraContactSelectionViewModel(@NonNull CameraContactsRepository repository) { this.repository = repository; this.contacts = new MutableLiveData<>(); @@ -32,7 +35,7 @@ class CameraContactSelectionViewModel extends ViewModel { repository.getCameraContacts(cameraContacts -> { Util.runOnMain(() -> { - contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected))); + contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected), currentQuery)); }); }); } @@ -50,9 +53,11 @@ class CameraContactSelectionViewModel extends ViewModel { } void onQueryUpdated(String query) { + this.currentQuery = query; + repository.getCameraContacts(query, cameraContacts -> { Util.runOnMain(() -> { - contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected))); + contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected), query)); }); }); } @@ -60,7 +65,7 @@ class CameraContactSelectionViewModel extends ViewModel { void onRefresh() { repository.getCameraContacts(cameraContacts -> { Util.runOnMain(() -> { - contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected))); + contacts.postValue(new ContactState(cameraContacts, new ArrayList<>(selected), currentQuery)); }); }); } @@ -77,17 +82,19 @@ class CameraContactSelectionViewModel extends ViewModel { ContactState currentState = contacts.getValue(); if (currentState != null) { - contacts.setValue(new ContactState(currentState.getContacts(), new ArrayList<>(selected))); + contacts.setValue(new ContactState(currentState.getContacts(), new ArrayList<>(selected), currentQuery)); } } static class ContactState { - private final CameraContacts contacts; + private final CameraContacts contacts; private final List selected; + private final String query; - ContactState(CameraContacts contacts, List selected) { + ContactState(@NonNull CameraContacts contacts, @NonNull List selected, @Nullable String query) { this.contacts = contacts; this.selected = selected; + this.query = query; } public CameraContacts getContacts() { @@ -97,6 +104,10 @@ class CameraContactSelectionViewModel extends ViewModel { public List getSelected() { return selected; } + + public @Nullable String getQuery() { + return query; + } } enum Error {