Show selection order in multi-select.

pull/9/head
Greyson Parrelli 5 years ago
parent ce0058864f
commit 5e6f71cd32

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

@ -49,15 +49,31 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/transparent_black_90" /> android:background="@color/transparent_black_90" />
<ImageView <FrameLayout
android:id="@+id/mediapicker_select_on" android:id="@+id/mediapicker_select_on"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="top|right|end" android:layout_gravity="top|right|end"
android:padding="6dp" android:padding="6dp"
android:src="@drawable/ic_select_on"
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_select_on" />
<TextView
android:id="@+id/mediapicker_select_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/core_white"
android:textSize="14dp"
android:gravity="center"
tools:text="3"/>
</FrameLayout>
<ImageView <ImageView
android:id="@+id/mediapicker_select_off" android:id="@+id/mediapicker_select_off"

@ -6,6 +6,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
@ -18,6 +19,7 @@ import org.thoughtcrime.securesms.util.StableIdGenerator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
@ -27,7 +29,7 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
private final GlideRequests glideRequests; private final GlideRequests glideRequests;
private final EventListener eventListener; private final EventListener eventListener;
private final List<Media> media; private final List<Media> media;
private final Set<Media> selected; private final List<Media> selected;
private final int maxSelection; private final int maxSelection;
private final StableIdGenerator<Media> stableIdGenerator; private final StableIdGenerator<Media> stableIdGenerator;
@ -39,7 +41,7 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
this.media = new ArrayList<>(); this.media = new ArrayList<>();
this.maxSelection = maxSelection; this.maxSelection = maxSelection;
this.stableIdGenerator = new StableIdGenerator<>(); this.stableIdGenerator = new StableIdGenerator<>();
this.selected = new LinkedHashSet<>(); this.selected = new LinkedList<>();
setHasStableIds(true); setHasStableIds(true);
} }
@ -81,7 +83,7 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
notifyDataSetChanged(); notifyDataSetChanged();
} }
Set<Media> getSelected() { List<Media> getSelected() {
return selected; return selected;
} }
@ -97,6 +99,7 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
private final View selectOn; private final View selectOn;
private final View selectOff; private final View selectOff;
private final View selectOverlay; private final View selectOverlay;
private final TextView selectOrder;
ItemViewHolder(@NonNull View itemView) { ItemViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
@ -105,9 +108,10 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
selectOn = itemView.findViewById(R.id.mediapicker_select_on); selectOn = itemView.findViewById(R.id.mediapicker_select_on);
selectOff = itemView.findViewById(R.id.mediapicker_select_off); selectOff = itemView.findViewById(R.id.mediapicker_select_off);
selectOverlay = itemView.findViewById(R.id.mediapicker_select_overlay); selectOverlay = itemView.findViewById(R.id.mediapicker_select_overlay);
selectOrder = itemView.findViewById(R.id.mediapicker_select_order);
} }
void bind(@NonNull Media media, boolean multiSelect, Set<Media> selected, int maxSelection, @NonNull GlideRequests glideRequests, @NonNull EventListener eventListener) { void bind(@NonNull Media media, boolean multiSelect, List<Media> selected, int maxSelection, @NonNull GlideRequests glideRequests, @NonNull EventListener eventListener) {
glideRequests.load(media.getUri()) glideRequests.load(media.getUri())
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.transition(DrawableTransitionOptions.withCrossFade()) .transition(DrawableTransitionOptions.withCrossFade())
@ -132,6 +136,7 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
selectOff.setVisibility(View.VISIBLE); selectOff.setVisibility(View.VISIBLE);
selectOn.setVisibility(View.VISIBLE); selectOn.setVisibility(View.VISIBLE);
selectOverlay.setVisibility(View.VISIBLE); selectOverlay.setVisibility(View.VISIBLE);
selectOrder.setText(String.valueOf(selected.indexOf(media) + 1));
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
selected.remove(media); selected.remove(media);
eventListener.onMediaSelectionChanged(new ArrayList<>(selected)); eventListener.onMediaSelectionChanged(new ArrayList<>(selected));
@ -154,6 +159,8 @@ public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItem
void recycle() { void recycle() {
itemView.setOnClickListener(null); itemView.setOnClickListener(null);
} }
} }
interface EventListener { interface EventListener {

Loading…
Cancel
Save