package im.actor.sdk.controllers.conversation.attach; import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.FrameLayout; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.PipelineDraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.common.ResizeOptions; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import im.actor.runtime.mvvm.ValueModel; import im.actor.sdk.ActorSDK; import im.actor.sdk.R; import im.actor.sdk.controllers.ActorBinder; import im.actor.sdk.util.Screen; import static im.actor.sdk.util.ActorSDKMessenger.messenger; public class FastAttachAdapter extends RecyclerView.Adapter<FastAttachAdapter.FastShareVH> { private ArrayList<String> imagesPath = new ArrayList<>(); private Set<String> selected = new HashSet<>(); private Context context; private ValueModel<Set<String>> selectedVM; private ActorBinder binder; private WidthGetter widthGetter; public FastAttachAdapter(Context context, WidthGetter widthGetter) { this.widthGetter = widthGetter; this.context = context; // setHasStableIds(true); binder = new ActorBinder(); binder.bind(messenger().getGalleryVM().getGalleryMediaPath(), (val, valueModel) -> { imagesPath.clear(); imagesPath.addAll(val); notifyDataSetChanged(); }); selectedVM = new ValueModel<>("fast_share.selected", new HashSet<>()); } protected View inflate(int id, ViewGroup viewGroup) { return LayoutInflater .from(context) .inflate(id, viewGroup, false); } public void release() { binder.unbindAll(); } @Override public FastShareVH onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = inflate(R.layout.share_menu_fast_share, parent); itemView.setLayoutParams(new ViewGroup.LayoutParams(widthGetter.get(), widthGetter.get())); return new FastShareVH(itemView); } @Override public void onBindViewHolder(FastShareVH holder, int position) { holder.bind(imagesPath.get(position)); } @Override public int getItemCount() { return imagesPath.size(); } public class FastShareVH extends RecyclerView.ViewHolder { private SimpleDraweeView v; private CompoundButton chb; private String data; public FastShareVH(View itemView) { super(itemView); itemView.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor()); v = (SimpleDraweeView) itemView.findViewById(R.id.image); chb = (CheckBox) itemView.findViewById(R.id.check); int size = Screen.dp(80); v.setLayoutParams(new FrameLayout.LayoutParams(size, size)); chb.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked && data != null) { selected.add(data); notifyVm(); } else { selected.remove(data); notifyVm(); } }); } public void bind(String path) { data = path; ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(path))) .setResizeOptions(new ResizeOptions(v.getLayoutParams().width, v.getLayoutParams().height)) .build(); PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder() .setOldController(v.getController()) .setImageRequest(request) .build(); v.setController(controller); chb.setChecked(selected.contains(data)); } } public void notifyVm() { selectedVM.change(new HashSet<String>(selected)); } public void clearSelected() { selected.clear(); notifyVm(); notifyDataSetChanged(); } public ValueModel<Set<String>> getSelectedVM() { return selectedVM; } public interface WidthGetter { int get(); } }