package com.seafile.seadroid2.ui.adapter; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.google.common.collect.Lists; import com.seafile.seadroid2.R; import com.seafile.seadroid2.SeadroidApplication; import com.seafile.seadroid2.data.SeafDirent; import java.util.Collections; import java.util.List; public class DirentsAdapter extends BaseAdapter { private List<SeafDirent> dirents; public DirentsAdapter() { dirents = Lists.newArrayList(); } /** sort files type */ public static final int SORT_BY_NAME = 9; /** sort files type */ public static final int SORT_BY_LAST_MODIFIED_TIME = 10; /** sort files order */ public static final int SORT_ORDER_ASCENDING = 11; /** sort files order */ public static final int SORT_ORDER_DESCENDING = 12; @Override public int getCount() { return dirents.size(); } @Override public boolean isEmpty() { return dirents.isEmpty(); } public void add(SeafDirent entry) { dirents.add(entry); } @Override public SeafDirent getItem(int position) { return dirents.get(position); } @Override public long getItemId(int position) { return position; } public void clearDirents() { dirents.clear(); } public void setDirents(List<SeafDirent> dirents) { clearDirents(); for (SeafDirent dirent : dirents) { this.dirents.add(dirent); } notifyDataSetChanged(); } public void sortFiles(int type, int order) { List<SeafDirent> folders = Lists.newArrayList(); List<SeafDirent> files = Lists.newArrayList(); for (SeafDirent item : dirents) { if (item.isDir()) { folders.add(item); } else { files.add(item); } } dirents.clear(); // sort SeafDirents if (type == SORT_BY_NAME) { // sort by name, in ascending order Collections.sort(folders, new SeafDirent.DirentNameComparator()); Collections.sort(files, new SeafDirent.DirentNameComparator()); if (order == SORT_ORDER_DESCENDING) { Collections.reverse(folders); Collections.reverse(files); } } else if (type == SORT_BY_LAST_MODIFIED_TIME) { // sort by last modified time, in ascending order Collections.sort(folders, new SeafDirent.DirentLastMTimeComparator()); Collections.sort(files, new SeafDirent.DirentLastMTimeComparator()); if (order == SORT_ORDER_DESCENDING) { Collections.reverse(folders); Collections.reverse(files); } } // Adds the objects in the specified collection to this ArrayList dirents.addAll(folders); dirents.addAll(files); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; Viewholder viewHolder; SeafDirent dirent = dirents.get(position); if (convertView == null) { view = LayoutInflater.from(SeadroidApplication.getAppContext()). inflate(R.layout.list_item_entry, null); TextView title = (TextView) view.findViewById(R.id.list_item_title); TextView subtitle = (TextView) view.findViewById(R.id.list_item_subtitle); ImageView icon = (ImageView) view.findViewById(R.id.list_item_icon); viewHolder = new Viewholder(title, subtitle, icon); view.setTag(viewHolder); } else { viewHolder = (Viewholder) convertView.getTag(); } viewHolder.title.setText(dirent.getTitle()); viewHolder.subtitle.setText(dirent.getSubtitle()); viewHolder.icon.setImageResource(dirent.getIcon()); int alpha; int titleColor; if (dirent.isDir()) { alpha = 255; titleColor = Color.BLACK; } else { alpha = 75; titleColor = Color.GRAY; } viewHolder.title.setTextColor(titleColor); viewHolder.subtitle.setTextColor(Color.GRAY); if (android.os.Build.VERSION.SDK_INT >= 11) { viewHolder.icon.setAlpha(alpha); } return view; } private class Viewholder { TextView title, subtitle; ImageView icon; public Viewholder(TextView title, TextView subtitle, ImageView icon) { super(); this.icon = icon; this.title = title; this.subtitle = subtitle; } } }