package org.fdroid.fdroid.views; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.App; public class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements LinearLayoutManagerSnapHelper.LinearSnapHelperListener { private final App app; private final DisplayImageOptions displayImageOptions; private View selectedView; private int selectedPosition; private final int selectedItemElevation; private final int unselectedItemMargin; public ScreenShotsRecyclerViewAdapter(Context context, App app) { super(); this.app = app; selectedPosition = 0; selectedItemElevation = context.getResources().getDimensionPixelSize(R.dimen.details_screenshot_selected_elevation); unselectedItemMargin = context.getResources().getDimensionPixelSize(R.dimen.details_screenshot_margin); displayImageOptions = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .imageScaleType(ImageScaleType.NONE) .showImageOnLoading(R.drawable.ic_repo_app_default) .showImageForEmptyUri(R.drawable.ic_repo_app_default) .bitmapConfig(Bitmap.Config.RGB_565) .build(); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ScreenShotViewHolder vh = (ScreenShotViewHolder) holder; setViewSelected(vh.itemView, position == selectedPosition); if (position == selectedPosition) { this.selectedView = vh.itemView; } ImageLoader.getInstance().displayImage(app.iconUrlLarge, vh.image, displayImageOptions); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.app_details2_screenshot_item, parent, false); return new ScreenShotViewHolder(view); } @Override public int getItemCount() { return 7; } @Override public void onSnappedToView(View view, int snappedPosition) { // Deselect the previous selected view first setViewSelected(selectedView, false); // Change the selected view to the newly snapped-to view. selectedView = view; selectedPosition = snappedPosition; setViewSelected(selectedView, true); } private void setViewSelected(View view, boolean selected) { if (view != null) { RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); if (selected) { lp.setMargins(0, selectedItemElevation, 0, selectedItemElevation); } else { lp.setMargins(0, unselectedItemMargin, 0, unselectedItemMargin); } ViewCompat.setElevation(view, selected ? selectedItemElevation : selectedItemElevation / 2); view.setLayoutParams(lp); } } private class ScreenShotViewHolder extends RecyclerView.ViewHolder { final ImageView image; ScreenShotViewHolder(View view) { super(view); image = (ImageView) view.findViewById(R.id.image); } @Override public String toString() { return super.toString() + " screenshot"; } } }