package io.mapwize.mapwizeui.modeview; import android.graphics.Color; import android.graphics.PorterDuff; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; import io.mapwize.mapwizesdk.api.DirectionMode; import io.mapwize.mapwizeui.R; public class ModeViewAdapter extends RecyclerView.Adapter<ModeViewAdapter.ModeItemViewHolder> { private List<DirectionMode> modes; private DirectionMode selectedMode; private OnModeChangeListener listener; void swapData(List<DirectionMode> modes) { this.modes = modes; if (modes != null && modes.size() > 0 && (selectedMode == null || !modes.contains(selectedMode))) { setSelectedMode(modes.get(0), true); } else { notifyDataSetChanged(); } } void setSelectedMode(DirectionMode mode, boolean dispatchEvent) { selectedMode = mode; if (dispatchEvent) { listener.onModeChange(selectedMode); } notifyDataSetChanged(); } int getSelectedItemIndex() { return modes.indexOf(selectedMode); } @Override @NonNull public ModeItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.mapwize_mode_item, parent, false); ViewTreeObserver vto = parent.getViewTreeObserver(); vto.addOnGlobalLayoutListener(() -> { int width = parent.getMeasuredWidth(); ViewGroup.LayoutParams params = view.getLayoutParams(); int divider = modes.size() < 5 ? modes.size() : 4; params.width = (width / divider); view.setLayoutParams(params); }); return new ModeItemViewHolder(view); } @Override public void onBindViewHolder(ModeItemViewHolder holder, int position) { DirectionMode mode = modes.get(position); holder.imageView.setImageDrawable(holder.itemView.getResources().getDrawable(mode.getDrawableId())); holder.mode = mode; holder.setSelected(mode.equals(selectedMode)); } @Override public int getItemCount() { if (modes != null) { return modes.size(); } return 0; } public void setListener(OnModeChangeListener listener) { this.listener = listener; } class ModeItemViewHolder extends RecyclerView.ViewHolder { ImageView imageView; RelativeLayout layout; DirectionMode mode; ModeItemViewHolder(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.mode_image); layout = itemView.findViewById(R.id.mapwize_mode_layout); layout.setOnClickListener(v->{ setSelectedMode(mode, true);}); } void setSelected(boolean selected) { if (selected) { imageView.getDrawable().setColorFilter(itemView.getResources().getColor(R.color.mapwize_main_color), PorterDuff.Mode.SRC_ATOP); imageView.setBackground(itemView.getResources().getDrawable(R.drawable.mapwize_rounded_pink_selected_view)); } else { imageView.getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_ATOP); imageView.setBackground(itemView.getResources().getDrawable(R.drawable.mapwize_rounded_selected_view)); } } } public interface OnModeChangeListener { void onModeChange(DirectionMode mode); } }