Fix not able to get to archived conversations when all archived.

This commit is contained in:
Alan Evans 2020-06-18 12:23:20 -03:00 committed by GitHub
parent a77997a4de
commit 80f9e1f4f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 30 deletions

View file

@ -30,14 +30,12 @@ import androidx.annotation.WorkerThread;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
import androidx.paging.PagedList;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.registration.PulsingFloatingActionButton;
import org.thoughtcrime.securesms.conversationlist.model.Conversation;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask;
@ -78,9 +76,7 @@ public class ConversationListArchiveFragment extends ConversationListFragment im
}
@Override
protected void onSubmitList(@NonNull PagedList<Conversation> conversations) {
super.onSubmitList(conversations);
protected void onPostSubmitList() {
list.setVisibility(View.VISIBLE);
emptyState.setVisibility(View.GONE);
}

View file

@ -58,7 +58,6 @@ import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.lifecycle.ViewModelProviders;
import androidx.paging.PagedList;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@ -115,7 +114,6 @@ import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
import org.thoughtcrime.securesms.util.AvatarUtil;
import org.thoughtcrime.securesms.util.CachedInflater;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.SnapToTopDataObserver;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
@ -509,7 +507,6 @@ public class ConversationListFragment extends MainFragment implements ActionMode
viewModel.getSearchResult().observe(this, this::onSearchResultChanged);
viewModel.getMegaphone().observe(this, this::onMegaphoneChanged);
viewModel.getConversationList().observe(this, this::onSubmitList);
viewModel.getArchivedCount().observe(this, defaultAdapter::updateArchived);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new DefaultLifecycleObserver() {
@Override
@ -756,8 +753,8 @@ public class ConversationListFragment extends MainFragment implements ActionMode
getNavigator().goToConversation(recipient.getId(), threadId, distributionType, -1);
}
protected void onSubmitList(@NonNull PagedList<Conversation> pagedList) {
if (pagedList.size() == 0) {
private void onSubmitList(@NonNull ConversationListViewModel.ConversationList conversationList) {
if (conversationList.isEmpty()) {
list.setVisibility(View.INVISIBLE);
emptyState.setVisibility(View.VISIBLE);
emptyImage.setImageResource(EMPTY_IMAGES[(int) (Math.random() * EMPTY_IMAGES.length)]);
@ -770,7 +767,13 @@ public class ConversationListFragment extends MainFragment implements ActionMode
cameraFab.stopPulse();
}
defaultAdapter.submitList(pagedList);
defaultAdapter.submitList(conversationList.getConversations());
defaultAdapter.updateArchived(conversationList.getArchivedCount());
onPostSubmitList();
}
protected void onPostSubmitList() {
}
@Override

View file

@ -26,20 +26,21 @@ import org.thoughtcrime.securesms.search.SearchRepository;
import org.thoughtcrime.securesms.util.Debouncer;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
import org.thoughtcrime.securesms.util.paging.Invalidator;
class ConversationListViewModel extends ViewModel {
private final Application application;
private final MutableLiveData<Megaphone> megaphone;
private final MutableLiveData<SearchResult> searchResult;
private final LiveData<PagedList<Conversation>> conversationList;
private final MutableLiveData<Integer> archivedCount;
private final SearchRepository searchRepository;
private final MegaphoneRepository megaphoneRepository;
private final Debouncer debouncer;
private final ContentObserver observer;
private final Invalidator invalidator;
private final Application application;
private final MutableLiveData<Megaphone> megaphone;
private final MutableLiveData<SearchResult> searchResult;
private final MutableLiveData<Integer> archivedCount;
private final LiveData<ConversationList> conversationList;
private final SearchRepository searchRepository;
private final MegaphoneRepository megaphoneRepository;
private final Debouncer debouncer;
private final ContentObserver observer;
private final Invalidator invalidator;
private String lastQuery;
@ -72,15 +73,19 @@ class ConversationListViewModel extends ViewModel {
.setEnablePlaceholders(true)
.build();
this.conversationList = new LivePagedListBuilder<>(factory, config).setFetchExecutor(ConversationListDataSource.EXECUTOR)
.setInitialLoadKey(0)
.build();
LiveData<PagedList<Conversation>> conversationList = new LivePagedListBuilder<>(factory, config).setFetchExecutor(ConversationListDataSource.EXECUTOR)
.setInitialLoadKey(0)
.build();
if (!isArchived) {
if (isArchived) {
this.archivedCount.setValue(0);
} else {
updateArchivedCount();
}
application.getContentResolver().registerContentObserver(DatabaseContentProviders.ConversationList.CONTENT_URI, true, observer);
this.conversationList = LiveDataUtil.combineLatest(conversationList, this.archivedCount, ConversationList::new);
}
@NonNull LiveData<SearchResult> getSearchResult() {
@ -91,14 +96,10 @@ class ConversationListViewModel extends ViewModel {
return megaphone;
}
@NonNull LiveData<PagedList<Conversation>> getConversationList() {
@NonNull LiveData<ConversationList> getConversationList() {
return conversationList;
}
@NonNull LiveData<Integer> getArchivedCount() {
return archivedCount;
}
void onVisible() {
megaphoneRepository.getNextMegaphone(megaphone::postValue);
}
@ -159,4 +160,26 @@ class ConversationListViewModel extends ViewModel {
return modelClass.cast(new ConversationListViewModel(ApplicationDependencies.getApplication(), new SearchRepository(), isArchived));
}
}
final static class ConversationList {
private final PagedList<Conversation> conversations;
private final int archivedCount;
ConversationList(PagedList<Conversation> conversations, int archivedCount) {
this.conversations = conversations;
this.archivedCount = archivedCount;
}
PagedList<Conversation> getConversations() {
return conversations;
}
int getArchivedCount() {
return archivedCount;
}
boolean isEmpty() {
return conversations.isEmpty() && archivedCount == 0;
}
}
}