package com.github.florent37.carpaccio;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import com.github.florent37.carpaccio.controllers.adapter.CarpaccioRecyclerViewAdapter;
import com.github.florent37.carpaccio.controllers.adapter.OnHeaderClickListener;
import com.github.florent37.carpaccio.controllers.adapter.OnItemClickListener;
import com.github.florent37.carpaccio.controllers.adapter.OnItemSwipedListener;
import com.github.florent37.carpaccio.controllers.adapter.RecyclerViewCallback;
import com.github.florent37.carpaccio.mapping.MappingManager;
import java.util.ArrayList;
import java.util.List;
/**
* Created by florentchampigny on 21/07/15.
*/
public class Carpaccio extends FrameLayout {
private static final String TAG = "Carpaccio";
protected CarpaccioManager carpaccioManager;
public static boolean IN_EDIT_MODE = false;
protected boolean displayErrors = false;
protected boolean onlyForPreview = false; //is a normal FrameLayout on device, only effective on Preview
protected void handleAttributes(Context context, AttributeSet attrs) {
TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.Carpaccio);
{
String register = styledAttrs.getString(R.styleable.Carpaccio_register);
onlyForPreview = styledAttrs.getBoolean(R.styleable.Carpaccio_onlyForPreview, false);
displayErrors = styledAttrs.getBoolean(R.styleable.Carpaccio_displayErrors, false);
if(carpaccioManager != null)
carpaccioManager.displayErrors = this.displayErrors;
if ((onlyForPreview && IN_EDIT_MODE) || !IN_EDIT_MODE) {
if (register != null && carpaccioManager != null)
carpaccioManager.registerControllers(context,register);
}
}
styledAttrs.recycle();
}
public Carpaccio(Context context) {
super(context);
carpaccioManager = new CarpaccioManager(new MappingManager());
}
public Carpaccio(Context context, AttributeSet attrs) {
super(context, attrs);
carpaccioManager = new CarpaccioManager(new MappingManager());
handleAttributes(context, attrs);
}
public Carpaccio(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
carpaccioManager = new CarpaccioManager(new MappingManager());
handleAttributes(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
IN_EDIT_MODE = isInEditMode();
if (onlyForPreview) {
if (IN_EDIT_MODE) {
execute();
} else {
CarpaccioLogger.d(TAG, "This Carpaccio is only effective on preview");
}
} else {
execute();
}
}
public void execute() {
if (carpaccioManager != null) {
carpaccioManager.findCarpaccioControlledViews(this);
carpaccioManager.executeActionsOnViews();
}
}
public CarpaccioManager getCarpaccioManager() {
return carpaccioManager;
}
public void mapObject(String name, Object object) {
if (carpaccioManager != null)
carpaccioManager.mapObject(name, object);
}
public Object getMappedObject(String name) {
if (carpaccioManager != null)
return carpaccioManager.getMappedObject(name);
else
return null;
}
//region mapList
public <T> T registerAdapter(String mappedName, Object adapter) {
if (carpaccioManager != null)
return (T) carpaccioManager.registerAdapter(mappedName, adapter);
return null;
}
public CarpaccioRecyclerViewAdapter getAdapter(String mappedName) {
if (carpaccioManager != null)
return carpaccioManager.getAdapter(mappedName);
return null;
}
public Carpaccio onItemClick(String mappedName, OnItemClickListener onItemClickListener) {
CarpaccioRecyclerViewAdapter adapter = getAdapter(mappedName);
if (adapter != null) {
adapter.setOnItemClickListener(onItemClickListener);
}
return this;
}
public Carpaccio onHeaderClick(String listMappedName, OnHeaderClickListener onHeaderClickListener) {
CarpaccioRecyclerViewAdapter adapter = getAdapter(listMappedName);
if (adapter != null) {
adapter.setOnHeaderClickListener(onHeaderClickListener);
}
return this;
}
public Carpaccio onItemSwiped(String mappedName, OnItemSwipedListener onItemSwipedListener) {
CarpaccioRecyclerViewAdapter adapter = getAdapter(mappedName);
if (adapter != null) {
adapter.setOnItemSwipedListener(onItemSwipedListener);
}
return this;
}
public Carpaccio setRecyclerViewCallback(String mappedName, RecyclerViewCallback recyclerViewCallback) {
CarpaccioRecyclerViewAdapter adapter = getAdapter(mappedName);
if (adapter != null) {
adapter.setRecyclerViewCallback(recyclerViewCallback);
}
return this;
}
public Carpaccio mapList(String name, List list) {
if (carpaccioManager != null)
carpaccioManager.mapList(name, list);
return this;
}
public void appendList(String name, List list) {
if (carpaccioManager != null)
carpaccioManager.appendList(name, list);
}
public List getMappedList(String mapName) {
if (carpaccioManager != null)
return carpaccioManager.getMappedList(mapName);
return null;
}
public void addChildViews(View view) {
if (carpaccioManager != null)
carpaccioManager.addChildViews(view);
}
public Object bindView(View view, String mapName, int position) {
if (carpaccioManager != null)
return carpaccioManager.bindView(view, mapName, position);
return null;
}
public Object bindView(View view, String mapName) {
if (carpaccioManager != null)
return carpaccioManager.bindView(view, mapName);
return null;
}
public void addCarpaccioView(View view) {
if (carpaccioManager != null) {
//carpaccioManager.addView(view); //TODO
List<View> childrens = new ArrayList<>();
carpaccioManager.findCarpaccioControlledViews(view, childrens);
carpaccioManager.executeActionsOnViews(childrens, null);
}
}
//endregion
}