package org.horaapps.leafpic.adapters; import android.content.Context; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.BitmapDrawable; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.Priority; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.horaapps.leafpic.R; import org.horaapps.leafpic.data.Album; import org.horaapps.leafpic.data.Media; import org.horaapps.leafpic.util.ThemeHelper; import java.util.ArrayList; /** * Created by dnld on 1/7/16. */ public class AlbumsAdapter extends RecyclerView.Adapter<AlbumsAdapter.ViewHolder> { private ArrayList<Album> albums; private View.OnClickListener mOnClickListener; private View.OnLongClickListener mOnLongClickListener; private ThemeHelper theme; private BitmapDrawable placeholder; public AlbumsAdapter(ArrayList<Album> ph, Context context) { albums = ph; theme = new ThemeHelper(context); updateTheme(); } public void updateTheme() { theme.updateTheme(); placeholder = ((BitmapDrawable) theme.getPlaceHolder()); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(org.horaapps.leafpic.R.layout.card_album, parent, false); v.setOnClickListener(mOnClickListener); v.setOnLongClickListener(mOnLongClickListener); return new ViewHolder(v); } @Override public void onBindViewHolder(final AlbumsAdapter.ViewHolder holder, int position) { Album a = albums.get(position); Media f = a.getCoverAlbum(); Glide.with(holder.picture.getContext()) .load(f.getPath()) .asBitmap() .diskCacheStrategy(DiskCacheStrategy.RESULT) .priority(Priority.HIGH) .signature(f.getSignature()) .centerCrop() .error(org.horaapps.leafpic.R.drawable.ic_error) .placeholder(placeholder) .animate(org.horaapps.leafpic.R.anim.fade_in) .into(holder.picture); holder.name.setTag(a); String hexPrimaryColor = String.format("#%06X", (0xFFFFFF & theme.getPrimaryColor())); String hexAccentColor = String.format("#%06X", (0xFFFFFF & theme.getAccentColor())); if (hexAccentColor.equals(hexPrimaryColor)) { float[] hsv = new float[3]; int color = theme.getAccentColor(); Color.colorToHSV(color, hsv); hsv[2] *= 0.72f; // value component color = Color.HSVToColor(hsv); hexAccentColor= String.format("#%06X", (0xFFFFFF & color)); } String textColor = theme.getBaseTheme() != ThemeHelper.LIGHT_THEME ? "#FAFAFA" : "#2b2b2b"; if (a.isSelected()) { holder.layout.setBackgroundColor(Color.parseColor(hexPrimaryColor)); holder.picture.setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); holder.selectedIcon.setVisibility(View.VISIBLE); if (theme.getBaseTheme() == ThemeHelper.LIGHT_THEME ) textColor = "#FAFAFA"; } else { holder.picture.clearColorFilter(); holder.selectedIcon.setVisibility(View.GONE); holder.layout.setBackgroundColor(theme.getCardBackgroundColor()); } String albumNameHtml = "<i><font color='" + textColor + "'>" + a.getName() + "</font></i>"; String albumPhotoCountHtml = "<b><font color='" + hexAccentColor + "'>" + a.getCount() + "</font></b>" + "<font " + "color='" + textColor + "'> " + holder.nPhotos.getContext().getString(R.string.media) + "</font>"; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { holder.name.setText(Html.fromHtml(albumNameHtml, Html.FROM_HTML_MODE_LEGACY)); holder.nPhotos.setText(Html.fromHtml(albumPhotoCountHtml, Html.FROM_HTML_MODE_LEGACY)); } else { holder.name.setText(Html.fromHtml(albumNameHtml)); holder.nPhotos.setText(Html.fromHtml(albumPhotoCountHtml)); } // (a.getImagesCount() == 1 ? c.getString(R.string.singular_photo) : c.getString(R.string.plural_photos)) } public void setOnClickListener(View.OnClickListener lis) { mOnClickListener = lis; } public void setOnLongClickListener(View.OnLongClickListener lis) { mOnLongClickListener = lis; } public void swapDataSet(ArrayList<Album> asd) { if (albums.equals(asd)) return; albums = asd; notifyDataSetChanged(); } @Override public int getItemCount() { return albums.size(); } static class ViewHolder extends RecyclerView.ViewHolder { ImageView picture; View selectedIcon, layout; TextView name, nPhotos; ViewHolder(View itemView) { super(itemView); picture = (ImageView) itemView.findViewById(org.horaapps.leafpic.R.id.album_preview); selectedIcon = itemView.findViewById(org.horaapps.leafpic.R.id.selected_icon); layout = itemView.findViewById(org.horaapps.leafpic.R.id.linear_card_text); name = (TextView) itemView.findViewById(org.horaapps.leafpic.R.id.album_name); nPhotos = (TextView) itemView.findViewById(org.horaapps.leafpic.R.id.album_photos_count); } } }