mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-17 23:43:34 +01:00
Fix select-all in the all media view.
This commit is contained in:
@@ -37,6 +37,7 @@ import org.signal.core.util.logging.Log;
|
|||||||
import org.signal.core.ui.logging.LoggingFragment;
|
import org.signal.core.ui.logging.LoggingFragment;
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
||||||
|
import org.thoughtcrime.securesms.components.SignalProgressDialog;
|
||||||
import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog;
|
import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog;
|
||||||
import org.thoughtcrime.securesms.components.menu.ActionItem;
|
import org.thoughtcrime.securesms.components.menu.ActionItem;
|
||||||
import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar;
|
import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar;
|
||||||
@@ -93,11 +94,13 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
|||||||
private GridMode gridMode;
|
private GridMode gridMode;
|
||||||
private VoiceNoteMediaController voiceNoteMediaController;
|
private VoiceNoteMediaController voiceNoteMediaController;
|
||||||
private SignalBottomActionBar bottomActionBar;
|
private SignalBottomActionBar bottomActionBar;
|
||||||
|
private SignalProgressDialog selectAllProgress;
|
||||||
private LifecycleDisposable lifecycleDisposable;
|
private LifecycleDisposable lifecycleDisposable;
|
||||||
private boolean pendingLoad = true;
|
private boolean pendingLoad = true;
|
||||||
private int loadLimit;
|
private int loadLimit;
|
||||||
private boolean allLoaded;
|
private boolean allLoaded;
|
||||||
private boolean loadingMore;
|
private boolean loadingMore;
|
||||||
|
private boolean pendingSelectAll;
|
||||||
|
|
||||||
public static @NonNull Fragment newInstance(long threadId,
|
public static @NonNull Fragment newInstance(long threadId,
|
||||||
@NonNull MediaLoader.MediaType mediaType,
|
@NonNull MediaLoader.MediaType mediaType,
|
||||||
@@ -252,9 +255,19 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
|||||||
totalMediaItems += groupedThreadMedia.getSectionItemCount(i);
|
totalMediaItems += groupedThreadMedia.getSectionItemCount(i);
|
||||||
}
|
}
|
||||||
allLoaded = totalMediaItems < loadLimit;
|
allLoaded = totalMediaItems < loadLimit;
|
||||||
|
} else {
|
||||||
|
allLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadingMore = false;
|
loadingMore = false;
|
||||||
|
|
||||||
|
if (pendingSelectAll) {
|
||||||
|
pendingSelectAll = false;
|
||||||
|
dismissSelectAllProgress();
|
||||||
|
getListAdapter().selectAllMedia();
|
||||||
|
updateMultiSelect();
|
||||||
|
}
|
||||||
|
|
||||||
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
|
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
|
||||||
getActivity().invalidateOptionsMenu();
|
getActivity().invalidateOptionsMenu();
|
||||||
}
|
}
|
||||||
@@ -401,8 +414,15 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleSelectAllMedia() {
|
private void handleSelectAllMedia() {
|
||||||
getListAdapter().selectAllMedia();
|
if (allLoaded) {
|
||||||
updateMultiSelect();
|
getListAdapter().selectAllMedia();
|
||||||
|
updateMultiSelect();
|
||||||
|
} else {
|
||||||
|
pendingSelectAll = true;
|
||||||
|
selectAllProgress = SignalProgressDialog.show(requireContext(), null, null, true);
|
||||||
|
loadLimit = 0;
|
||||||
|
LoaderManager.getInstance(this).restartLoader(0, null, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getActionModeTitle() {
|
private String getActionModeTitle() {
|
||||||
@@ -428,9 +448,18 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
|||||||
updateMultiSelect();
|
updateMultiSelect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void dismissSelectAllProgress() {
|
||||||
|
if (selectAllProgress != null && selectAllProgress.isShowing()) {
|
||||||
|
selectAllProgress.dismiss();
|
||||||
|
}
|
||||||
|
selectAllProgress = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void exitMultiSelect() {
|
private void exitMultiSelect() {
|
||||||
actionMode.finish();
|
actionMode.finish();
|
||||||
actionMode = null;
|
actionMode = null;
|
||||||
|
pendingSelectAll = false;
|
||||||
|
dismissSelectAllProgress();
|
||||||
ViewUtil.animateOut(bottomActionBar, bottomActionBar.getExitAnimation());
|
ViewUtil.animateOut(bottomActionBar, bottomActionBar.getExitAnimation());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user