package cw.kop.autobackground.images; import android.app.Activity; import android.graphics.PorterDuff; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Picasso; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import cw.kop.autobackground.R; import cw.kop.autobackground.files.FileHandler; import cw.kop.autobackground.settings.AppSettings; /** * Created by TheKeeperOfPie on 4/11/2015. */ public class AdapterImages extends RecyclerView.Adapter<AdapterImages.ViewHolder> { private static final int BYTE_TO_MEBIBYTE = 1048576; private File currentDir; private FolderCallback folderCallback; private File topDir; private Activity activity; private ArrayList<File> listFiles; private boolean finish; private int colorFilterInt; private float sideMarginPixels; public AdapterImages(Activity activity, File topDir, File startDir, FolderCallback folderCallback) { this.activity = activity; this.topDir = topDir; this.currentDir = startDir; this.folderCallback = folderCallback; listFiles = new ArrayList<>(); setDirectory(startDir); colorFilterInt = AppSettings.getColorFilterInt(activity); sideMarginPixels = activity.getResources().getDimensionPixelSize( R.dimen.side_margin); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.file_row, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { File file = listFiles.get(position); boolean isImage = FileHandler.getImageFileNameFilter().accept(null, file.getName()); if (isImage) { holder.fileImageFull.setVisibility(View.VISIBLE); holder.fileTitle.setVisibility(View.GONE); holder.fileSummary.setVisibility(View.GONE); holder.fileImage.setVisibility(View.GONE); holder.fileImage.clearColorFilter(); holder.fileImageFull.getLayoutParams().height = (int) ((folderCallback.getItemWidth() - 2f * sideMarginPixels) / 16f * 9); holder.fileImageFull.requestLayout(); Picasso.with(activity) .load(file) .fit() .centerCrop() .into(holder.fileImageFull); } else { holder.fileImageFull.setVisibility(View.GONE); holder.fileTitle.setVisibility(View.VISIBLE); holder.fileSummary.setVisibility(View.VISIBLE); holder.fileImage.setVisibility(View.VISIBLE); holder.fileImage.setColorFilter(colorFilterInt, PorterDuff.Mode.MULTIPLY); if (file.isDirectory()) { holder.fileImage.setImageResource(R.drawable.ic_folder_white_24dp); } else { holder.fileImage.setImageResource(R.drawable.ic_insert_drive_file_white_24dp); } holder.fileTitle.setText(file.getName()); holder.fileSummary.setText( (file.isDirectory() && file.list() != null) ? file.list().length + " Files" : "" + (file.length() / BYTE_TO_MEBIBYTE) + " MiB"); } } @Override public int getItemCount() { return listFiles.size(); } public File getDirectory() { return currentDir; } public void setDirectory(File selectedFile) { if (selectedFile != null && selectedFile.isDirectory()) { currentDir = selectedFile; ArrayList<File> folders = new ArrayList<>(); ArrayList<File> files = new ArrayList<>(); if (selectedFile.listFiles() != null) { for (File file : selectedFile.listFiles()) { if (file != null && file.exists()) { if (file.isDirectory()) { folders.add(file); } else { files.add(file); } } } } if (folders.size() > 0) { Collections.sort(folders, new Comparator<File>() { @Override public int compare(File lhs, File rhs) { return lhs.getName() .compareToIgnoreCase(rhs.getName()); } }); } if (files.size() > 0) { Collections.sort(files, new Comparator<File>() { @Override public int compare(File lhs, File rhs) { return lhs.getName().compareToIgnoreCase(rhs.getName()); } }); } folders.addAll(files); listFiles = folders; notifyDataSetChanged(); } } public boolean isFinished() { return finish; } public void setFinished() { finish = true; } public Boolean backDirectory() { if (finish || currentDir.getAbsolutePath().equals(topDir.getAbsolutePath())) { return true; } File parentDir = currentDir.getParentFile(); if (parentDir != null && parentDir.exists() && parentDir.isDirectory()) { setDirectory(parentDir); return false; } return true; } public void remove(int index) { listFiles.remove(index); notifyDataSetChanged(); } public File getItem(int positionInList) { return listFiles.get(positionInList); } protected class ViewHolder extends RecyclerView.ViewHolder { protected final TextView fileTitle; protected final TextView fileSummary; protected final ImageView fileImage; protected final ImageView fileImageFull; public ViewHolder(View itemView) { super(itemView); fileTitle = (TextView) itemView.findViewById(R.id.file_title); fileSummary = (TextView) itemView.findViewById(R.id.file_summary); fileImage = (ImageView) itemView.findViewById(R.id.file_image); fileImageFull = (ImageView) itemView.findViewById(R.id.file_image_full); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { folderCallback.onItemClick(getPosition()); } }); } } }