package com.markjmind.uni.progress;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.markjmind.uni.common.Store;
import com.markjmind.uni.mapper.Mapper;
import com.markjmind.uni.mapper.annotiation.adapter.GetViewAdapter;
import com.markjmind.uni.mapper.annotiation.adapter.LayoutAdapter;
import com.markjmind.uni.mapper.annotiation.adapter.OnClickAdapter;
import com.markjmind.uni.mapper.annotiation.adapter.ParamAdapter;
import com.markjmind.uni.thread.CancelAdapter;
/**
* <br>捲土重來<br>
*
* @author 오재웅(JaeWoong-Oh)
* @email markjmind@gmail.com
* @since 2016-02-19
*/
public class UniProgress implements OnProgressListener{
public static final int VIEW = 0;
public static final int DIALOG = 1;
private int mode;
public Store<?> param;
public Mapper mapper;
private int layoutId;
protected View layout;
boolean hasListener;
private ProgressBuilder.ProgressInterface progressInterface;
private ProgressBuilder builder;
protected UniProgress(){
this.layoutId = -1;
param = new Store<>();
hasListener = false;
}
public UniProgress(int layoutId){
this.layoutId = layoutId;
}
void setProgressInterface(ProgressBuilder.ProgressInterface progressInterface){
this.progressInterface = progressInterface;
}
public ProgressBuilder getBuilder(){
return builder;
}
public int getLayoutId() {
return layoutId;
}
public void setLayoutId(int layoutId) {
this.layoutId = layoutId;
}
View mapperInit(ViewGroup finder, Store<?> param) {
this.param = param;
if(hasListener) {
mapper = new Mapper(finder, this);
LayoutAdapter layoutAdapter = new LayoutAdapter();
mapper.inject(layoutAdapter);
if(layoutId == -1) {
layoutId = layoutAdapter.getLayoutId();
}
LayoutInflater inflater = ((LayoutInflater) finder.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE));
layout = inflater.inflate(layoutId, finder, false);
mapper.reset(layout, this);
mapper.inject(new GetViewAdapter(), new OnClickAdapter(), new ParamAdapter(param));
}else{
if(layoutId == -1) {
}
LayoutInflater inflater = ((LayoutInflater) finder.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE));
layout = inflater.inflate(layoutId, finder, false);
}
return layout;
}
public void setMode(int mode){
this.mode = mode;
}
public int getMode(){
return mode;
}
public void onBind(){
}
public View getLayout(){
return layout;
}
@Override
public void onStart(View layout, CancelAdapter cancelAdapter) {
}
@Override
public void onUpdate(View layout, Object value, CancelAdapter cancelAdapter) {
}
@Override
public void onDestroy(View layout, boolean attach) {
}
public void setInAnimation(AnimatorSet inAnimation){
progressInterface.setInAnimation(inAnimation);
}
public void setInAnimation(ValueAnimator inAnimation){
if(inAnimation==null){
progressInterface.setInAnimation(null);
}else {
AnimatorSet set = new AnimatorSet();
set.play(inAnimation);
this.setInAnimation(set);
progressInterface.setInAnimation(set);
}
}
public void setOutAnimation(AnimatorSet outAnimation){
progressInterface.setOutAnimation(outAnimation);
}
public void setOutAnimation(ValueAnimator outAnimation){
if(outAnimation==null){
progressInterface.setOutAnimation(null);
}else {
AnimatorSet set = new AnimatorSet();
set.play(outAnimation);
progressInterface.setOutAnimation(set);
}
}
private ValueAnimator defaultInAnimation(){
ObjectAnimator alpha = ObjectAnimator.ofFloat(layout, View.ALPHA, 0f, 1f);
alpha.setDuration(250);
return alpha;
}
private ValueAnimator defaultOutAnimation(){
ObjectAnimator alpha = ObjectAnimator.ofFloat(layout, View.ALPHA, 1f, 0f);
alpha.setDuration(250);
return alpha;
}
public void show(){
if(builder!=null){
builder.show();
}
}
public void dismiss(){
if(builder!=null){
builder.dismiss();
}
}
}