Show total file size of selected items when appropriate.

This commit is contained in:
Alan Evans 2019-12-05 09:40:09 -05:00 committed by Greyson Parrelli
parent 006343460e
commit acfba9ac96
3 changed files with 48 additions and 3 deletions

View File

@ -506,6 +506,14 @@
<string name="MediaOverviewActivity_List_view_description">List view</string>
<string name="MediaOverviewActivity_Selected_description">Selected</string>
<plurals name="MediaOverviewActivity_d_items_s">
<item quantity="one">%1$d item %2$s</item>
<item quantity="other">%1$d items %2$s</item>
</plurals>
<plurals name="MediaOverviewActivity_d_items">
<item quantity="one">%1$d item</item>
<item quantity="other">%1$d items</item>
</plurals>
<string name="MediaOverviewActivity_file">File</string>
<string name="MediaOverviewActivity_audio">Audio</string>
<string name="MediaOverviewActivity_video">Video</string>

View File

@ -27,6 +27,8 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
import org.thoughtcrime.securesms.R;
@ -187,6 +189,12 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
return selected.size();
}
public long getSelectedMediaTotalFileSize() {
//noinspection ConstantConditions attacment cannot be null if selected
return Stream.of(selected.values())
.collect(Collectors.summingLong(a -> a.getAttachment().getSize()));
}
@NonNull
public Collection<MediaRecord> getSelectedMedia() {
return new HashSet<>(selected.values());

View File

@ -37,6 +37,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
public final class MediaOverviewPageFragment extends Fragment
implements MediaGalleryAllAdapter.ItemClickListener,
@ -117,6 +118,7 @@ public final class MediaOverviewPageFragment extends Fragment
this.sorting = sorting;
adapter.setShowFileSizes(sorting.isRelatedToFileSize());
LoaderManager.getInstance(this).restartLoader(0, null, this);
refreshActionModeTitle();
}
});
@ -134,6 +136,7 @@ public final class MediaOverviewPageFragment extends Fragment
this.detail = detail;
adapter.setDetailView(detail);
refreshLayoutManager();
refreshActionModeTitle();
}
@Override
@ -202,7 +205,7 @@ public final class MediaOverviewPageFragment extends Fragment
if (adapter.getSelectedMediaCount() == 0) {
actionMode.finish();
} else {
actionMode.setTitle(String.valueOf(adapter.getSelectedMediaCount()));
refreshActionModeTitle();
}
}
@ -263,7 +266,33 @@ public final class MediaOverviewPageFragment extends Fragment
private void handleSelectAllMedia() {
getListAdapter().selectAllMedia();
actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount()));
refreshActionModeTitle();
}
private void refreshActionModeTitle() {
if (actionMode != null) {
actionMode.setTitle(getActionModeTitle());
}
}
private String getActionModeTitle() {
MediaGalleryAllAdapter adapter = getListAdapter();
int mediaCount = adapter.getSelectedMediaCount();
boolean showTotalFileSize = detail ||
mediaType != MediaLoader.MediaType.GALLERY ||
sorting == MediaDatabase.Sorting.Largest;
if (showTotalFileSize) {
long totalFileSize = adapter.getSelectedMediaTotalFileSize();
return getResources().getQuantityString(R.plurals.MediaOverviewActivity_d_items_s,
mediaCount,
mediaCount,
Util.getPrettyFileSize(totalFileSize));
} else {
return getResources().getQuantityString(R.plurals.MediaOverviewActivity_d_items,
mediaCount,
mediaCount);
}
}
private MediaGalleryAllAdapter getListAdapter() {
@ -283,7 +312,7 @@ public final class MediaOverviewPageFragment extends Fragment
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.media_overview_context, menu);
mode.setTitle("1");
refreshActionModeTitle();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = requireActivity().getWindow();