package com.simplecity.amp_library.ui.modelviews;
import android.os.AsyncTask;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.TextView;
import com.simplecity.amp_library.R;
import com.simplecity.amp_library.interfaces.FileType;
import com.simplecity.amp_library.model.BaseFileObject;
import com.simplecity.amp_library.model.FileObject;
import com.simplecity.amp_library.model.FolderObject;
import com.simplecity.amp_library.ui.views.CircleImageView;
import com.simplecity.amp_library.utils.ColorUtils;
import com.simplecity.amp_library.utils.DrawableUtils;
import com.simplecity.amp_library.utils.SettingsManager;
import com.simplecity.amp_library.utils.StringUtils;
import java.lang.ref.WeakReference;
public class FolderView extends BaseAdaptableItem<BaseFileObject, FolderView.ViewHolder> {
public BaseFileObject baseFileObject;
private boolean mShowCheckboxes;
private boolean mIsChecked;
public FolderView(BaseFileObject baseFileObject) {
this.baseFileObject = baseFileObject;
}
public void setShowCheckboxes(boolean show) {
mShowCheckboxes = show;
}
public void setChecked(boolean checked) {
mIsChecked = checked;
}
@Override
public int getViewType() {
return ViewType.FOLDER;
}
@Override
public int getLayoutResId() {
return R.layout.list_item_folder;
}
@Override
public void bindView(ViewHolder holder) {
if (baseFileObject instanceof FileObject && SettingsManager.getInstance().getFolderBrowserShowFileNames()) {
holder.lineFour.setText(String.format("%s.%s", ((FileObject) baseFileObject).name, ((FileObject) baseFileObject).extension));
holder.lineFour.setVisibility(View.VISIBLE);
holder.textContainer.setVisibility(View.GONE);
} else {
holder.lineFour.setVisibility(View.GONE);
holder.textContainer.setVisibility(View.VISIBLE);
}
holder.lineThree.setText(null);
switch (baseFileObject.fileType) {
case FileType.PARENT:
holder.imageView.setImageDrawable(holder.itemView.getContext().getResources().getDrawable(R.drawable.ic_folder_open_white));
holder.lineTwo.setText(holder.itemView.getContext().getString(R.string.parent_folder));
holder.overflow.setVisibility(View.GONE);
holder.lineThree.setVisibility(View.GONE);
holder.lineOne.setText(baseFileObject.name);
break;
case FileType.FOLDER:
holder.overflow.setVisibility(View.VISIBLE);
holder.imageView.setImageDrawable(holder.itemView.getContext().getResources().getDrawable(R.drawable.ic_folder_closed_white));
holder.lineTwo.setText(StringUtils.makeSubfoldersLabel(holder.itemView.getContext(), ((FolderObject) baseFileObject).folderCount, ((FolderObject) baseFileObject).fileCount));
holder.lineThree.setVisibility(View.GONE);
holder.lineOne.setText(baseFileObject.name);
break;
case FileType.FILE:
holder.overflow.setVisibility(View.VISIBLE);
holder.imageView.setImageDrawable(holder.itemView.getContext().getResources().getDrawable(R.drawable.ic_headphones_white));
holder.lineThree.setVisibility(View.VISIBLE);
holder.lineOne.setText(((FileObject) baseFileObject).tagInfo.trackName);
holder.lineTwo.setText(String.format("%s - %s", ((FileObject) baseFileObject).tagInfo.artistName, ((FileObject) baseFileObject).tagInfo.albumName));
DurationTask durationTask = new DurationTask(holder.lineThree, (FileObject) baseFileObject);
durationTask.execute();
break;
}
if (ColorUtils.isPrimaryColorLowContrast(holder.itemView.getContext())) {
holder.imageView.setColorFilter(ColorUtils.getAccentColor());
} else {
holder.imageView.setColorFilter(ColorUtils.getPrimaryColor());
}
if (mShowCheckboxes && baseFileObject.fileType == FileType.FOLDER) {
holder.checkBox.setVisibility(View.VISIBLE);
holder.imageView.setVisibility(View.GONE);
} else {
holder.checkBox.setVisibility(View.GONE);
holder.imageView.setVisibility(View.VISIBLE);
}
holder.checkBox.setChecked(mIsChecked);
}
@Override
public ViewHolder getViewHolder(ViewGroup parent) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutResId(), parent, false));
}
@Override
public BaseFileObject getItem() {
return baseFileObject;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public View itemView;
public TextView lineOne;
public TextView lineTwo;
public TextView lineThree;
public TextView lineFour;
public View textContainer;
public CircleImageView imageView;
public ImageButton overflow;
public CheckBox checkBox;
public ViewHolder(final View itemView) {
super(itemView);
this.itemView = itemView;
lineOne = (TextView) itemView.findViewById(R.id.line_one);
lineTwo = (TextView) itemView.findViewById(R.id.line_two);
lineThree = (TextView) itemView.findViewById(R.id.line_three);
lineFour = (TextView) itemView.findViewById(R.id.line_four);
textContainer = itemView.findViewById(R.id.textContainer);
imageView = (CircleImageView) itemView.findViewById(R.id.image);
overflow = (ImageButton) itemView.findViewById(R.id.btn_overflow);
overflow.setImageDrawable(DrawableUtils.getColoredStateListDrawable(itemView.getContext(), R.drawable.ic_overflow_white));
checkBox = (CheckBox) itemView.findViewById(R.id.checkbox);
}
@Override
public String toString() {
return "FolderView.ViewHolder";
}
}
private static class DurationTask extends AsyncTask<Void, Void, String> {
private TextView textView;
private FileObject fileObject;
public DurationTask(TextView textView, FileObject fileObject) {
this.textView = textView;
this.fileObject = fileObject;
textView.setTag(new WeakReference<>(DurationTask.this));
}
@Override
protected String doInBackground(Void... params) {
return fileObject.getTimeString();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (textView != null) {
if (((WeakReference<DurationTask>) textView.getTag()).get() == DurationTask.this) {
textView.setText(s);
}
}
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FolderView that = (FolderView) o;
return baseFileObject != null ? baseFileObject.equals(that.baseFileObject) : that.baseFileObject == null;
}
@Override
public int hashCode() {
return baseFileObject != null ? baseFileObject.hashCode() : 0;
}
}