package net.nightwhistler.pageturner.activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import net.nightwhistler.pageturner.R; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; public class FileAdapter extends BaseAdapter { private File currentFolder; private List<FileItem> items = new ArrayList<>(); private Context context; private ItemSelectionListener itemSelectionListener; public static interface ItemSelectionListener { void fileSelected( File file ); } public FileAdapter( Context context ) { this.context = context; } public void setFolder( File folder ) { this.currentFolder = folder; items = new ArrayList<>(); File[] listing = folder.listFiles(); if ( listing != null ) { for ( File childFile: listing ) { if ( childFile.isDirectory() || childFile.getName().toLowerCase(Locale.US).endsWith(".epub")) { items.add(new FileItem(childFile.getName(), childFile, ! childFile.isDirectory() )); } } } Collections.sort(items, (lhs, rhs) -> { if ((lhs.getFile().isDirectory() && rhs.getFile().isDirectory()) || (!lhs.getFile().isDirectory() && !rhs.getFile().isDirectory())) { return lhs.getFile().getName().compareTo(rhs.getFile().getName()); } if (lhs.getFile().isDirectory()) { return -1; } else { return 1; } }); items.add( 0, new FileItem( "[" + context.getString(R.string.import_this) + "]", folder, true)); if ( folder.getParentFile() != null ) { items.add(0, new FileItem( "[..]", folder.getParentFile(), false )); } notifyDataSetChanged(); } public String getCurrentFolder() { return this.currentFolder.getAbsolutePath(); } @Override public int getCount() { return items.size(); } @Override public FileItem getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View rowView; final FileItem fileItem = getItem(position); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if ( convertView == null ) { rowView = inflater.inflate(R.layout.folder_line, parent, false); } else { rowView = convertView; } ImageView img = (ImageView) rowView.findViewById(R.id.folderIcon); CheckBox selectBox = (CheckBox) rowView.findViewById(R.id.selectBox); if ( fileItem.getFile().isDirectory() ) { img.setImageDrawable( context.getResources().getDrawable(R.drawable.folder)); selectBox.setVisibility(View.VISIBLE); } else { img.setImageDrawable( context.getResources().getDrawable(R.drawable.file)); selectBox.setVisibility(View.GONE); } selectBox.setOnCheckedChangeListener( (buttonView, isChecked) -> { if ( isChecked && itemSelectionListener != null ) { this.itemSelectionListener.fileSelected( fileItem.getFile() ); } }); selectBox.setFocusable(false); TextView label = (TextView) rowView.findViewById(R.id.folderName); label.setText( fileItem.getLabel() ); return rowView; } public void setItemSelectionListener(ItemSelectionListener itemSelectionListener) { this.itemSelectionListener = itemSelectionListener; } }