package com.amaze.filemanager.adapters; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.ColorMatrixColorFilter; import android.graphics.drawable.GradientDrawable; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; import android.widget.Toast; import com.amaze.filemanager.R; import com.amaze.filemanager.activities.BaseActivity; import com.amaze.filemanager.activities.MainActivity; import com.amaze.filemanager.filesystem.BaseFile; import com.amaze.filemanager.fragments.Main; import com.amaze.filemanager.ui.Layoutelements; import com.amaze.filemanager.ui.icons.Icons; import com.amaze.filemanager.ui.icons.MimeTypes; import com.amaze.filemanager.ui.views.CircleGradientDrawable; import com.amaze.filemanager.ui.views.RoundedImageView; import com.amaze.filemanager.utils.DataUtils; import com.amaze.filemanager.utils.UtilitiesProviderInterface; import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersAdapter; import java.io.File; import java.util.ArrayList; /** * Created by Arpit on 11-04-2015. */ public class Recycleradapter extends RecyclerArrayAdapter<String, RecyclerView.ViewHolder> implements StickyRecyclerHeadersAdapter<RecyclerView.ViewHolder> { private UtilitiesProviderInterface utilsProvider; Main main; ArrayList<Layoutelements> items; Context context; private SparseBooleanArray myChecked = new SparseBooleanArray(); private SparseBooleanArray myanim = new SparseBooleanArray(); // ColorMatrixColorFilter colorMatrixColorFilter; LayoutInflater mInflater; int filetype=-1; int column,rowHeight; boolean topFab; int grey_color; private int c1,c2,c3,c4,c5,c6,c7,c8,c9,anim; public Recycleradapter(Main m, UtilitiesProviderInterface utilsProvider, ArrayList<Layoutelements> items, Context context){ this.main=m; this.utilsProvider = utilsProvider; this.items=items; this.context=context; for (int i = 0; i < items.size(); i++) { myChecked.put(i, false); myanim.put(i,false); } // colorMatrixColorFilter=main.colorMatrixColorFilter; mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); c1=Color.parseColor("#757575"); c2=Color.parseColor("#f06292"); c3=Color.parseColor("#9575cd"); c4=Color.parseColor("#da4336"); c5=Color.parseColor("#00bfa5"); c6=Color.parseColor("#e06055"); c7=Color.parseColor("#f9a825"); c8=Color.parseColor("#a4c439"); c9=Color.parseColor("#9e9e9e"); column=main.columns; rowHeight=main.dpToPx(100); grey_color=Color.parseColor("#ff666666"); anim = /*main.IS_LIST?R.anim.fade_in_top:*/R.anim.fade_in_top; } public void addItem(){ //notifyDataSetChanged(); notifyItemInserted(getItemCount()); } /** * called as to toggle selection of any item in adapter * @param position the position of the item * @param imageView the check {@link CircleGradientDrawable} that is to be animated */ public void toggleChecked(int position, ImageView imageView) { if(!stoppedAnimation)main.stopAnimation(); if (myChecked.get(position)) { // if the view at position is checked, un-check it myChecked.put(position, false); Animation iconAnimation = AnimationUtils.loadAnimation(context, R.anim.check_out); if (imageView!=null) { imageView.setAnimation(iconAnimation); } else { // TODO: we don't have the check icon object probably because of config change } } else { // if view is un-checked, check it myChecked.put(position, true); Animation iconAnimation = AnimationUtils.loadAnimation(context, R.anim.check_in); if (imageView!=null) { imageView.setAnimation(iconAnimation); } else { // TODO: we don't have the check icon object probably because of config change } if (main.mActionMode==null||main.selection==false) { // start actionmode if not already started // null condition if there is config change main.selection=true; main.mActionMode = main.MAIN_ACTIVITY.startSupportActionMode(main.mActionModeCallback); } } notifyDataSetChanged(); //notifyItemChanged(position); if(main.mActionMode!=null && main.selection) { // we have the actionmode visible, invalidate it's views main.mActionMode.invalidate(); } if (getCheckedItemPositions().size() == 0) { main.selection = false; main.mActionMode.finish(); main.mActionMode = null; } } public void toggleChecked(boolean b,String path) { int a; if(path.equals("/") || !main.GO_BACK_ITEM)a=0;else a=1; for (int i = a; i < items.size(); i++) { myChecked.put(i, b); notifyItemChanged(i); } if(main.mActionMode!=null) main.mActionMode.invalidate(); if (getCheckedItemPositions().size() == 0) { main.selection = false; if(main.mActionMode!=null) main.mActionMode.finish(); main.mActionMode = null; } } /** * called when we would want to toggle check for all items in the adapter * @param b if to toggle true or false */ public void toggleChecked(boolean b) { int a=0; for (int i = a; i < items.size(); i++) { myChecked.put(i, b); notifyItemChanged(i); } if(main.mActionMode!=null)main.mActionMode.invalidate(); if (getCheckedItemPositions().size() == 0) { main.selection = false; if(main.mActionMode!=null) main.mActionMode.finish(); main.mActionMode = null; } } public ArrayList<Integer> getCheckedItemPositions() { ArrayList<Integer> checkedItemPositions = new ArrayList<Integer>(); for (int i = 0; i < myChecked.size(); i++) { if (myChecked.get(i)) { (checkedItemPositions).add(i); } } return checkedItemPositions; } public boolean areAllChecked(String path) { boolean b = true; int a; if(path.equals("/") || !main.GO_BACK_ITEM)a=0;else a=1; for (int i = a; i < myChecked.size(); i++) { if (!myChecked.get(i)) { b = false; } } return b; } public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public RoundedImageView pictureIcon; public ImageView genericIcon, apkIcon; public ImageView imageView1; public TextView txtTitle; public TextView txtDesc; public TextView date; public TextView perm; public View rl; public TextView genericText; public ImageButton about; public ImageView checkImageView; public ImageView checkImageViewGrid; public ViewHolder(View view) { super(view); txtTitle = (TextView) view.findViewById(R.id.firstline); pictureIcon = (RoundedImageView) view.findViewById(R.id.picture_icon); rl = view.findViewById(R.id.second); perm = (TextView) view.findViewById(R.id.permis); date = (TextView) view.findViewById(R.id.date); txtDesc = (TextView) view.findViewById(R.id.secondLine); apkIcon = (ImageView) view.findViewById(R.id.apk_icon); genericText = (TextView) view.findViewById(R.id.generictext); imageView1 = (ImageView) view.findViewById(R.id.icon_thumb); about=(ImageButton) view.findViewById(R.id.properties); checkImageView = (ImageView) view.findViewById(R.id.check_icon); genericIcon = (ImageView) view.findViewById(R.id.generic_icon); checkImageViewGrid = (ImageView) view.findViewById(R.id.check_icon_grid); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==0){ View v= mInflater.inflate(R.layout.list_footer, parent, false); return new ViewHolder(v); } View v;if(main.IS_LIST) v= mInflater.inflate(R.layout.rowlayout, parent, false); else v= mInflater.inflate(R.layout.griditem, parent, false); ViewHolder vh = new ViewHolder(v); if(main.theme1==1) vh.txtTitle.setTextColor(main.MAIN_ACTIVITY.getResources().getColor(android.R.color.white)); return vh; } int offset=0; public boolean stoppedAnimation=false; Animation localAnimation; @Override public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { super.onViewAttachedToWindow(holder); ((ViewHolder)holder).rl.clearAnimation(); } @Override public boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) { ((ViewHolder)holder).rl.clearAnimation(); return super.onFailedToRecycleView(holder); } void animate(Recycleradapter.ViewHolder holder){ holder.rl.clearAnimation(); localAnimation = AnimationUtils.loadAnimation(context,anim); localAnimation.setStartOffset(this.offset); holder.rl.startAnimation(localAnimation); this.offset+=30; } public void generate(ArrayList<Layoutelements> arrayList){ offset=0; stoppedAnimation=false; notifyDataSetChanged(); column=main.columns; items=arrayList; for (int i = 0; i < items.size(); i++) { myChecked.put(i, false); myanim.put(i,false); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder vholder,final int p) { final ViewHolder holder = ((ViewHolder)vholder); if (main.IS_LIST) { if ( p == getItemCount() - 1) { holder.rl.setMinimumHeight(rowHeight); if (items.size() == (main.GO_BACK_ITEM ? 1 : 0)) holder.txtTitle.setText(R.string.nofiles); else holder.txtTitle.setText(""); return; } } if (!this.stoppedAnimation && !myanim.get(p)) { animate(holder); myanim.put(p, true); } final Layoutelements rowItem = items.get(p); if (main.IS_LIST) { holder.rl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { main.onListItemClicked(p, holder.checkImageView); } }); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { holder.checkImageView.setBackground(new CircleGradientDrawable(main.fabSkin, main.theme1, main.getResources().getDisplayMetrics())); } else holder.checkImageView.setBackgroundDrawable(new CircleGradientDrawable(main.fabSkin, main.theme1, main.getResources().getDisplayMetrics())); holder.rl.setOnLongClickListener(new View.OnLongClickListener() { public boolean onLongClick(View p1) { // check if the item on which action is performed is not the first {goback} item if (!rowItem.getSize().equals(main.goback)) { toggleChecked(p, holder.checkImageView); } return true; } }); filetype = -1; if (Icons.isPicture((rowItem.getDesc().toLowerCase()))) filetype = 0; else if (Icons.isApk((rowItem.getDesc()))) filetype = 1; else if (Icons.isVideo(rowItem.getDesc())) filetype = 2; else if (Icons.isgeneric(rowItem.getDesc())) filetype = 3; holder.txtTitle.setText(rowItem.getTitle()); holder.genericIcon.setImageDrawable(rowItem.getImageId()); holder.genericText.setText(""); if (holder.about != null) { if(main.theme1==0)holder.about.setColorFilter(grey_color); showPopup(holder.about,rowItem); } holder.genericIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.generic_icon || id == R.id.picture_icon || id == R.id.apk_icon) { // TODO: transform icon on press to the properties dialog with animation if (!rowItem.getSize().equals(main.goback)) { toggleChecked(p, holder.checkImageView); } else main.goBack(); } } }); holder.pictureIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!rowItem.getSize().equals(main.goback)) { toggleChecked(p, holder.checkImageView); } else main.goBack(); } }); holder.apkIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!rowItem.getSize().equals(main.goback)) { toggleChecked(p, holder.checkImageView); } else main.goBack(); } }); // resetting icons visibility holder.genericIcon.setVisibility(View.VISIBLE); holder.pictureIcon.setVisibility(View.INVISIBLE); holder.apkIcon.setVisibility(View.INVISIBLE); holder.checkImageView.setVisibility(View.INVISIBLE); // setting icons for various cases // apkIcon holder refers to square/non-circular drawable // pictureIcon is circular drawable if (filetype == 0) { if (main.SHOW_THUMBS) { holder.genericIcon.setVisibility(View.GONE); if (main.CIRCULAR_IMAGES) { holder.apkIcon.setVisibility(View.GONE); holder.pictureIcon.setVisibility(View.VISIBLE); holder.pictureIcon.setImageDrawable(main.DARK_IMAGE); main.ic.cancelLoad(holder.pictureIcon); main.ic.loadDrawable(holder.pictureIcon, (rowItem.getDesc()), null); } else { holder.apkIcon.setVisibility(View.VISIBLE); holder.apkIcon.setImageDrawable(main.DARK_IMAGE); main.ic.cancelLoad(holder.apkIcon); main.ic.loadDrawable(holder.apkIcon, (rowItem.getDesc()), null); } } } else if (filetype == 1) { if (main.SHOW_THUMBS) { holder.genericIcon.setVisibility(View.GONE); holder.pictureIcon.setVisibility(View.GONE); holder.apkIcon.setVisibility(View.VISIBLE); holder.apkIcon.setImageDrawable(main.apk); main.ic.cancelLoad(holder.apkIcon); main.ic.loadDrawable(holder.apkIcon, (rowItem.getDesc()), null); } } else if (filetype == 2) { if (main.SHOW_THUMBS) { holder.genericIcon.setVisibility(View.GONE); if (main.CIRCULAR_IMAGES) { holder.pictureIcon.setVisibility(View.VISIBLE); holder.pictureIcon.setImageDrawable(main.DARK_VIDEO); main.ic.cancelLoad(holder.pictureIcon); main.ic.loadDrawable(holder.pictureIcon,(rowItem.getDesc()), null); } else { holder.apkIcon.setVisibility(View.VISIBLE); holder.apkIcon.setImageDrawable(main.DARK_VIDEO); main.ic.cancelLoad(holder.apkIcon); main.ic.loadDrawable(holder.apkIcon, (rowItem.getDesc()), null); } } } else if (filetype == 3) { // if the file type is any unknown variable String ext = !new File(rowItem.getDesc()).isDirectory() ? MimeTypes.getExtension(rowItem.getTitle()) : null; if (ext != null && ext.trim().length() != 0) { holder.genericText.setText(ext); holder.genericIcon.setImageDrawable(null); //holder.genericIcon.setVisibility(View.INVISIBLE); } else { // we could not find the extension, set a generic file type icon // probably a directory holder.genericIcon.setVisibility(View.VISIBLE); } holder.pictureIcon.setVisibility(View.GONE); holder.apkIcon.setVisibility(View.GONE); } else { holder.pictureIcon.setVisibility(View.GONE); holder.apkIcon.setVisibility(View.GONE); holder.genericIcon.setVisibility(View.VISIBLE); } Boolean checked = myChecked.get(p); if (checked != null) { if (main.theme1 == 0) { holder.rl.setBackgroundResource(R.drawable.safr_ripple_white); } else { holder.rl.setBackgroundResource(R.drawable.safr_ripple_black); } holder.rl.setSelected(false); if (checked) { holder.checkImageView.setVisibility(View.VISIBLE); // making sure the generic icon background color filter doesn't get changed // to grey on picture/video/apk/generic text icons when checked // so that user can still look at the thumbs even after selection if ((filetype!=0 && filetype!=1 && filetype!=2)) { holder.apkIcon.setVisibility(View.GONE); holder.pictureIcon.setVisibility(View.GONE); holder.genericIcon.setVisibility(View.VISIBLE); GradientDrawable gradientDrawable = (GradientDrawable) holder.genericIcon.getBackground(); gradientDrawable.setColor(c1); } holder.rl.setSelected(true); //holder.genericText.setText(""); } else { holder.checkImageView.setVisibility(View.INVISIBLE); GradientDrawable gradientDrawable = (GradientDrawable) holder.genericIcon.getBackground(); if (main.COLORISE_ICONS) { if (rowItem.isDirectory()) gradientDrawable.setColor(main.icon_skin_color); else if (Icons.isVideo(rowItem.getDesc()) || Icons.isPicture(rowItem .getDesc())) gradientDrawable.setColor(c2); else if (Icons.isAudio(rowItem.getDesc())) gradientDrawable.setColor(c3); else if (Icons.isPdf(rowItem.getDesc())) gradientDrawable.setColor(c4); else if (Icons.isCode(rowItem.getDesc())) gradientDrawable.setColor(c5); else if (Icons.isText(rowItem.getDesc())) gradientDrawable.setColor(c6); else if (Icons.isArchive(rowItem.getDesc())) gradientDrawable.setColor(c7); else if(Icons.isApk(rowItem.getDesc())) gradientDrawable.setColor(c8); else if (Icons.isgeneric(rowItem.getDesc())) { gradientDrawable.setColor(c9); } else { gradientDrawable.setColor(main.icon_skin_color); } } else gradientDrawable.setColor((main.icon_skin_color)); if (rowItem.getSize().equals(main.goback)) gradientDrawable.setColor(c1); } } if (main.SHOW_PERMISSIONS) holder.perm.setText(rowItem.getPermissions()); if (main.SHOW_LAST_MODIFIED) holder.date.setText(rowItem.getDate()); String size = rowItem.getSize(); if (size.equals(main.goback)) { holder.date.setText(size); holder.txtDesc.setText(""); } else if (main.SHOW_SIZE) holder.txtDesc.setText(rowItem.getSize()); } else { // view is a grid view Boolean checked = myChecked.get(p); holder.checkImageViewGrid.setColorFilter(Color.parseColor(main.fabSkin)); holder.rl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { main.onListItemClicked(p, holder.checkImageViewGrid); } }); holder.rl.setOnLongClickListener(new View.OnLongClickListener() { public boolean onLongClick(View p1) { if (!rowItem.getSize().equals(main.goback)) { toggleChecked(p, holder.checkImageViewGrid); } return true; } }); holder.txtTitle.setText(rowItem.getTitle()); holder.imageView1.setVisibility(View.INVISIBLE); holder.genericIcon.setVisibility(View.VISIBLE); holder.checkImageViewGrid.setVisibility(View.INVISIBLE); holder.genericIcon.setImageDrawable(rowItem.getImageId()); if (Icons.isPicture((rowItem.getDesc().toLowerCase())) || Icons.isVideo(rowItem.getDesc().toLowerCase())) { holder.genericIcon.setColorFilter(null); holder.imageView1.setVisibility(View.VISIBLE); holder.imageView1.setImageDrawable(null); if (main.theme == 1) holder.imageView1.setBackgroundColor(Color.BLACK); main.ic.cancelLoad(holder.imageView1); main.ic.loadDrawable(holder.imageView1, (rowItem.getDesc()), null); } else if (Icons.isApk((rowItem.getDesc()))) { holder.genericIcon.setColorFilter(null); main.ic.cancelLoad(holder.genericIcon); main.ic.loadDrawable(holder.genericIcon, (rowItem.getDesc()), null); } if (rowItem.isDirectory()) holder.genericIcon.setColorFilter(main.icon_skin_color); else if (Icons.isVideo(rowItem.getDesc())) holder.genericIcon.setColorFilter(c2); else if (Icons.isAudio(rowItem.getDesc())) holder.genericIcon.setColorFilter(c3); else if (Icons.isPdf(rowItem.getDesc())) holder.genericIcon.setColorFilter(c4); else if (Icons.isCode(rowItem.getDesc())) holder.genericIcon.setColorFilter(c5); else if (Icons.isText(rowItem.getDesc())) holder.genericIcon.setColorFilter(c6); else if (Icons.isArchive(rowItem.getDesc())) holder.genericIcon.setColorFilter(c7); else if (Icons.isgeneric(rowItem.getDesc())) holder.genericIcon.setColorFilter(c9); else if (Icons.isApk(rowItem.getDesc()) || Icons.isPicture(rowItem.getDesc())) holder.genericIcon.setColorFilter(null); else holder.genericIcon.setColorFilter(main.icon_skin_color); if (rowItem.getSize().equals(main.goback)) holder.genericIcon.setColorFilter(c1); if (checked != null) { if (checked) { holder.genericIcon.setColorFilter(main.icon_skin_color); //holder.genericIcon.setImageDrawable(main.getResources().getDrawable(R.drawable.abc_ic_cab_done_holo_dark)); holder.checkImageViewGrid.setVisibility(View.VISIBLE); holder.rl.setBackgroundColor(Color.parseColor("#9f757575")); } else { holder.checkImageViewGrid.setVisibility(View.INVISIBLE); if (main.theme1 == 0) holder.rl.setBackgroundResource(R.drawable.item_doc_grid); else{ holder.rl.setBackgroundResource(R.drawable.ic_grid_card_background_dark); holder.rl.findViewById(R.id.icon_frame).setBackgroundColor(Color.parseColor("#303030")); } } } if (holder.about != null) { if(main.theme1==0)holder.about.setColorFilter(grey_color); showPopup(holder.about,rowItem); } if (main.SHOW_LAST_MODIFIED) holder.date.setText(rowItem.getDate()); if (rowItem.getSize().equals(main.goback)) { holder.date.setText(rowItem.getSize()); holder.txtDesc.setText(""); }/*else if(main.SHOW_SIZE) holder.txtDesc.setText(rowItem.getSize()); */ if (main.SHOW_PERMISSIONS) holder.perm.setText(rowItem.getPermissions()); } } @Override public long getHeaderId(int i) { if(items.size()==0)return -1; if(i>=0 && i<items.size()) if(main.IS_LIST){ if(i!=items.size()){ if(items.get(i).getSize().equals(main.goback))return -1; if(items.get(i).isDirectory())return 'D'; else return 'F';} } return -1;} public static class HeaderViewHolder extends RecyclerView.ViewHolder { public TextView ext; public HeaderViewHolder(View view) { super(view); ext = (TextView) view.findViewById(R.id.headertext); }} @Override public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup viewGroup) { View view = mInflater.inflate(R.layout.listheader, viewGroup, false); /*if(main.theme1==1) view.setBackgroundResource(R.color.holo_dark_background);*/ HeaderViewHolder holder = new HeaderViewHolder(view); if (main.theme1==0)holder.ext.setTextColor(Color.parseColor("#8A000000")); else holder.ext.setTextColor(Color.parseColor("#B3ffffff")); return holder; } private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; @Override public int getItemViewType(int position) { if (isPositionHeader(position)) return TYPE_HEADER; return TYPE_ITEM; } void showPopup(View v,final Layoutelements rowItem){ v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { PopupMenu popupMenu = new PopupMenu(main.getActivity(), view); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.about: utilsProvider.getFutils().showProps((rowItem).generateBaseFile(), rowItem.getPermissions(), main, BaseActivity.rootMode); return true; case R.id.share: ArrayList<File> arrayList = new ArrayList<File>(); arrayList.add(new File(rowItem.getDesc())); utilsProvider.getFutils().shareFiles(arrayList, main.MAIN_ACTIVITY, main.theme1, Color.parseColor(main.fabSkin)); return true; case R.id.rename: main.rename(rowItem.generateBaseFile()); return true; case R.id.cpy: MainActivity MAIN_ACTIVITY=main.MAIN_ACTIVITY; main.MAIN_ACTIVITY.MOVE_PATH = null; ArrayList<BaseFile> copies = new ArrayList<>(); copies.add(rowItem.generateBaseFile()); MAIN_ACTIVITY.COPY_PATH = copies; MAIN_ACTIVITY.supportInvalidateOptionsMenu(); return true; case R.id.cut: MainActivity MAIN_ACTIVITY1=main.MAIN_ACTIVITY; MAIN_ACTIVITY1.COPY_PATH = null; ArrayList<BaseFile> copie = new ArrayList<>(); copie.add(rowItem.generateBaseFile()); MAIN_ACTIVITY1.MOVE_PATH = copie; MAIN_ACTIVITY1.supportInvalidateOptionsMenu(); return true; case R.id.ex: main.MAIN_ACTIVITY.mainActivityHelper.extractFile(new File(rowItem.getDesc())); return true; case R.id.book: DataUtils.addBook(new String[]{rowItem.getTitle(),rowItem.getDesc()},true); main.MAIN_ACTIVITY.updateDrawer(); Toast.makeText(main.getActivity(), main.getResources().getString(R.string.bookmarksadded), Toast.LENGTH_LONG).show(); return true; } return false; } }); popupMenu.inflate(R.menu.item_extras); String x = rowItem.getDesc().toLowerCase(); if(rowItem.isDirectory())popupMenu.getMenu().findItem(R.id.share).setVisible(false); if (x.endsWith(".zip") || x.endsWith(".jar") || x.endsWith(".apk") || x.endsWith(".rar") || x.endsWith(".tar") || x.endsWith(".tar.gz")) popupMenu.getMenu().findItem(R.id.ex).setVisible(true); popupMenu.show(); } }); } private boolean isPositionHeader(int position) { if(main.IS_LIST) return (position== items.size()); return false;} @Override public void onBindHeaderViewHolder(RecyclerView.ViewHolder viewHolder, int i) { if(i!=getItemCount()-1) { HeaderViewHolder holder=(HeaderViewHolder)viewHolder; if(items.get(i).isDirectory())holder.ext.setText(R.string.directories); else holder.ext.setText(R.string.files); } } @Override public int getItemCount() { return main.IS_LIST?items.size()+1:items.size(); } }