package apps.makarov.com.whereismycurrency.view.adapters;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import apps.makarov.com.whereismycurrency.models.ResultOperation;
import apps.makarov.com.whereismycurrency.view.adapters.sections.SectionsAdapter;
import apps.makarov.com.whereismycurrency.view.adapters.sections.holder.ModelWrapper;
import apps.makarov.com.whereismycurrency.view.adapters.viewholders.ActiveOperationSectionViewHolderWrapper;
import apps.makarov.com.whereismycurrency.view.adapters.viewholders.ActiveOperationViewHolderWrapper;
import apps.makarov.com.whereismycurrency.view.adapters.viewholders.InactiveOperationSectionViewHolderWrapper;
import apps.makarov.com.whereismycurrency.view.adapters.viewholders.InactiveOperationViewHolderWrapper;
import apps.makarov.com.whereismycurrency.view.adapters.viewholders.ViewHolderWrapper;
/**
* Created by makarov on 30/06/15.
*/
/*
для создания нового типа элемента
1) реализовать новый тип враппера над моделью - ModelWrapper<T>
2) реализовать новый типа враппера над холдером - ViewHolderWrapper<T>
3)
*/
public class HistoryAdapter extends SectionsAdapter<ViewHolderWrapper> {
public static final String TAG = HistoryAdapter.class.getSimpleName();
private static final int ACTIVE_TYPE = 0;
private static final int INACTIVE_TYPE = 1;
private static final int ACTIVE_SECTION_TYPE = 2;
private static final int INACTIVE_SECTION_TYPE = 3;
private OnClickToPresenter mPresenter;
public HistoryAdapter(List<ResultOperation> resultOperations, OnClickToPresenter presenter) {
super(getHolderWrappers(resultOperations, presenter));
mPresenter = presenter;
}
private static List<ModelWrapper> getHolderWrappers(List<ResultOperation> historyItems, OnClickToPresenter onClickPresenter) {
List<ResultOperation> mHistoryItems = ResultOperation.findHistoryOperation(historyItems);
List<ResultOperation> mActiveItems = ResultOperation.findActiveOperation(historyItems);
List<ModelWrapper> modelWrapperList = new ArrayList<>();
if (mActiveItems.size() > 0)
modelWrapperList.add(new ActiveSectionModel("3 august 2015"));
for (ResultOperation operation : mActiveItems) {
modelWrapperList.add(new ActiveItemModel(operation));
}
if (mHistoryItems.size() > 0)
modelWrapperList.add(new InactiveSectionModel());
for (ResultOperation operation : mHistoryItems) {
modelWrapperList.add(new InactiveItemModel(operation));
}
return modelWrapperList;
}
@Override
protected ViewHolderWrapper getHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case ACTIVE_TYPE:
return new ActiveOperationViewHolderWrapper(parent);
case INACTIVE_TYPE:
return new InactiveOperationViewHolderWrapper(parent);
case ACTIVE_SECTION_TYPE:
return new ActiveOperationSectionViewHolderWrapper(parent);
case INACTIVE_SECTION_TYPE:
return new InactiveOperationSectionViewHolderWrapper(parent);
}
return null;
}
@Override
protected void createdListeners(ViewHolderWrapper holder, final Object object, int type) {
if (type == ACTIVE_TYPE || type == INACTIVE_TYPE
)
holder.setOnClicklistener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPresenter.onClick((ResultOperation) object);
}
});
}
public static class ActiveItemModel implements ModelWrapper<ResultOperation> {
private final ResultOperation mOperation;
public ActiveItemModel(ResultOperation operation) {
mOperation = operation;
}
@Override
public ResultOperation getModel() {
return mOperation;
}
@Override
public int getType() {
return ACTIVE_TYPE;
}
}
public static class InactiveItemModel implements ModelWrapper<ResultOperation> {
private final ResultOperation mOperation;
public InactiveItemModel(ResultOperation operation) {
mOperation = operation;
}
@Override
public ResultOperation getModel() {
return mOperation;
}
@Override
public int getType() {
return INACTIVE_TYPE;
}
}
public static class ActiveSectionModel implements ModelWrapper<String> {
private final String mSubTitle;
public ActiveSectionModel( String subTitle) {
mSubTitle = subTitle;
}
@Override
public String getModel() {
return mSubTitle;
}
@Override
public int getType() {
return ACTIVE_SECTION_TYPE;
}
}
public static class InactiveSectionModel implements ModelWrapper<Void> {
public InactiveSectionModel() {
}
@Override
public Void getModel() {
return null;
}
@Override
public int getType() {
return INACTIVE_SECTION_TYPE;
}
}
public interface OnClickToPresenter {
void onClick(ResultOperation operation);
}
}