Show selection order in multi-select.
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.3 KiB |
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 {
|
||||||
|