package com.seafile.seadroid2.ui.adapter; 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.SeadroidApplication; import com.seafile.seadroid2.data.SeafRepo; import java.util.List; /** * Base ReposAdapter */ public abstract class ReposAdapter extends BaseAdapter { protected List<SeafRepo> repos = Lists.newArrayList(); protected boolean onlyShowWritableRepos; protected String encryptedRepoId; public ReposAdapter(boolean onlyShowWritableRepos, String encryptedRepoId) { this.onlyShowWritableRepos = onlyShowWritableRepos; this.encryptedRepoId = encryptedRepoId; } @Override public long getItemId(int position) { return position; } public boolean areAllReposSelectable() { return false; } public void setRepos(List<SeafRepo> seafRepos) { repos.clear(); for (SeafRepo repo: seafRepos) { if (onlyShowWritableRepos && !repo.hasWritePermission()) { continue; } if (encryptedRepoId != null && !repo.id.equals(encryptedRepoId)) { continue; } repos.add(repo); } notifyDataSetChanged(); } protected abstract int getChildLayout(); protected abstract int getChildTitleId(); protected abstract int getChildSubTitleId(); protected abstract int getChildIconId(); protected abstract int getChildActionId(); protected abstract SeafRepo getChildSeafRepo(int position); protected abstract void showRepoSelectedIcon(int position, ImageView imageView); @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; Viewholder viewHolder; SeafRepo repo = getChildSeafRepo(position); if (convertView == null) { view = LayoutInflater.from(SeadroidApplication.getAppContext()) .inflate(getChildLayout(), null); TextView title = (TextView) view.findViewById(getChildTitleId()); TextView subtitle = (TextView) view.findViewById(getChildSubTitleId()); ImageView icon = (ImageView) view.findViewById(getChildIconId()); ImageView action = (ImageView) view.findViewById(getChildActionId()); viewHolder = new Viewholder(title, subtitle, icon, action); view.setTag(viewHolder); } else { viewHolder = (Viewholder) convertView.getTag(); } viewHolder.title.setText(repo.getTitle()); viewHolder.subtitle.setText(repo.getSubtitle()); viewHolder.icon.setImageResource(repo.getIcon()); viewHolder.action.setVisibility(View.INVISIBLE); showRepoSelectedIcon(position, viewHolder.action); return view; } private class Viewholder { TextView title, subtitle; ImageView icon, action; public Viewholder(TextView title, TextView subtitle, ImageView icon, ImageView action) { super(); this.icon = icon; this.action = action; this.title = title; this.subtitle = subtitle; } } }