// Path: saklib/src/main/java/com/wanjian/sak/config/Config.java
// public class Config {
// 
//     private int minRange;
//     private int maxRange;
// //    private List<AbsLayer> mLayerViews = new ArrayList<>();
//     private List<ISizeConverter> mSizeConverterList = new ArrayList<>();
//     private int startRange;
//     private int endRange;
//     private boolean clipDraw;
//     List<Item>mLayerList;
//     private Config(Build build) {
// //        mLayerViews.addAll(build.mDefaultLayerViews);
// //        mLayerViews.addAll(build.mCustomerLayerViews);
// 
//         ViewFilter.FILTER = build.mViewFilter;
//         mSizeConverterList.addAll(build.mSizeConverterList);
// 
//         minRange = build.min;
//         maxRange = build.max;
//         clipDraw = build.clipDraw;
//         mLayerList = build.mLayerList;
//     }
// 
//     public List<Item> getLayerList() {
//         return mLayerList;
//     }
// 
// //    public List<AbsLayer> getLayerViews() {
// //        return mLayerViews;
// //    }
// 
//     public List<ISizeConverter> getSizeConverters() {
//         if (mSizeConverterList == null || mSizeConverterList.isEmpty()) {
//             return Arrays.<ISizeConverter>asList(new OriginSizeConverter());
//         }
//         return mSizeConverterList;
//     }
// 
//     public int getStartRange() {
//         return startRange;
//     }
// 
//     public void setStartRange(int startRange) {
//         this.startRange = startRange;
//     }
// 
//     public int getEndRange() {
//         return endRange;
//     }
// 
//     public void setEndRange(int endRange) {
//         this.endRange = endRange;
//     }
// 
//     public boolean isClipDraw() {
//         return clipDraw;
//     }
// 
//     public void setClipDraw(boolean clipDraw) {
//         this.clipDraw = clipDraw;
//     }
// 
//     public int getMinRange() {
//         return minRange;
//     }
// 
//     public int getMaxRange() {
//         return maxRange;
//     }
// 
//     public static class Build {
//         Context mContext;
//         List<ISizeConverter> mSizeConverterList = new ArrayList<>();
//         ViewFilter mViewFilter;
//         List<Item>mLayerList=new ArrayList<>();
//         int min = 0;
//         int max = 50;
//         boolean clipDraw = true;
// 
//         public Build(Context context) {
//             Check.isNull(context, "context");
//             mContext = context.getApplicationContext();
// 
// 
//             mSizeConverterList.add(new Px2DpSizeConverter());
//             mSizeConverterList.add(new OriginSizeConverter());
//             mSizeConverterList.add(new Px2SpSizeConverter());
//             mViewFilter = ViewFilter.FILTER;
//         }
// 
//         public Build addSizeConverter(ISizeConverter sizeConverter) {
//             Check.isNull(sizeConverter, "sizeConverter");
//             mSizeConverterList.add(sizeConverter);
//             return this;
//         }
// 
// //        public Build addLayerView(AbsLayer layerView) {
// //            Check.isNull(layerView, "layerView");
// ////            mDefaultLayerViews.clear();
// ////            mCustomerLayerViews.add(layerView);
// //            return this;
// //        }
// 
//         public Build viewFilter(ViewFilter viewFilter) {
//             Check.isNull(viewFilter, "viewFilter");
//             mViewFilter = viewFilter;
//             return this;
//         }
// 
//         public Build range(int min, int max) {
//             if (min < 0) {
//                 throw new IllegalArgumentException();
//             }
//             if (max < min) {
//                 throw new IllegalArgumentException();
//             }
//             this.min = min;
//             this.max = max;
//             return this;
//         }
// 
//         public Build clipDraw(boolean clip) {
//             clipDraw = clip;
//             return this;
//         }
// 
//         public Build addLayer(Class<? extends Layer> clz, Drawable icon, String iconName) {
//             mLayerList.add(new Item(clz,icon,iconName));
//             return this;
//         }
//         public Config build() {
//             return new Config(this);
//         }
//     }
// }
// 
// Path: sak-nop/src/main/java/com/wanjian/sak/converter/ISizeConverter.java
// public abstract class ISizeConverter {
//     public static ISizeConverter CONVERTER;
// 
//     public abstract String desc();
// 
//     public abstract Size convert(Context context, float length);
// 
//     public abstract int recovery(Context context, float length);
// 
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/filter/ViewFilter.java
// public abstract class ViewFilter {
//     public static ViewFilter FILTER = new ViewFilter() {
//         @Override
//         protected boolean apply(View view) {
//             return view.getVisibility() == View.VISIBLE;
//         }
//     };
// 
// 
//     public final boolean filter(View view) {
//         return apply(view);
//     }
// 
//     protected abstract boolean apply(View view);
// 
//     @Override
//     public int hashCode() {
//         return getClass().hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null) {
//             return false;
//         }
//         return obj.getClass() == getClass();
//     }
// }


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
import com.wanjian.sak.config.Config;
import com.wanjian.sak.converter.ISizeConverter;
import com.wanjian.sak.filter.ViewFilter;

    }

    protected void onUiUpdate(Canvas canvas, View rootView) {

    }

    protected void onAttached(View rootView) {
    }


    protected void onDetached(View rootView) {
    }

    protected int[] getLocationAndSize(View view) {
        return null;
    }

    protected int dp2px(int dip) {
        return 0;
    }

    protected int px2dp(float pxValue) {
        return 0;
    }

    protected ISizeConverter getSizeConverter() {
        return null;
    }

// Path: saklib/src/main/java/com/wanjian/sak/config/Config.java
// public class Config {
// 
//     private int minRange;
//     private int maxRange;
// //    private List<AbsLayer> mLayerViews = new ArrayList<>();
//     private List<ISizeConverter> mSizeConverterList = new ArrayList<>();
//     private int startRange;
//     private int endRange;
//     private boolean clipDraw;
//     List<Item>mLayerList;
//     private Config(Build build) {
// //        mLayerViews.addAll(build.mDefaultLayerViews);
// //        mLayerViews.addAll(build.mCustomerLayerViews);
// 
//         ViewFilter.FILTER = build.mViewFilter;
//         mSizeConverterList.addAll(build.mSizeConverterList);
// 
//         minRange = build.min;
//         maxRange = build.max;
//         clipDraw = build.clipDraw;
//         mLayerList = build.mLayerList;
//     }
// 
//     public List<Item> getLayerList() {
//         return mLayerList;
//     }
// 
// //    public List<AbsLayer> getLayerViews() {
// //        return mLayerViews;
// //    }
// 
//     public List<ISizeConverter> getSizeConverters() {
//         if (mSizeConverterList == null || mSizeConverterList.isEmpty()) {
//             return Arrays.<ISizeConverter>asList(new OriginSizeConverter());
//         }
//         return mSizeConverterList;
//     }
// 
//     public int getStartRange() {
//         return startRange;
//     }
// 
//     public void setStartRange(int startRange) {
//         this.startRange = startRange;
//     }
// 
//     public int getEndRange() {
//         return endRange;
//     }
// 
//     public void setEndRange(int endRange) {
//         this.endRange = endRange;
//     }
// 
//     public boolean isClipDraw() {
//         return clipDraw;
//     }
// 
//     public void setClipDraw(boolean clipDraw) {
//         this.clipDraw = clipDraw;
//     }
// 
//     public int getMinRange() {
//         return minRange;
//     }
// 
//     public int getMaxRange() {
//         return maxRange;
//     }
// 
//     public static class Build {
//         Context mContext;
//         List<ISizeConverter> mSizeConverterList = new ArrayList<>();
//         ViewFilter mViewFilter;
//         List<Item>mLayerList=new ArrayList<>();
//         int min = 0;
//         int max = 50;
//         boolean clipDraw = true;
// 
//         public Build(Context context) {
//             Check.isNull(context, "context");
//             mContext = context.getApplicationContext();
// 
// 
//             mSizeConverterList.add(new Px2DpSizeConverter());
//             mSizeConverterList.add(new OriginSizeConverter());
//             mSizeConverterList.add(new Px2SpSizeConverter());
//             mViewFilter = ViewFilter.FILTER;
//         }
// 
//         public Build addSizeConverter(ISizeConverter sizeConverter) {
//             Check.isNull(sizeConverter, "sizeConverter");
//             mSizeConverterList.add(sizeConverter);
//             return this;
//         }
// 
// //        public Build addLayerView(AbsLayer layerView) {
// //            Check.isNull(layerView, "layerView");
// ////            mDefaultLayerViews.clear();
// ////            mCustomerLayerViews.add(layerView);
// //            return this;
// //        }
// 
//         public Build viewFilter(ViewFilter viewFilter) {
//             Check.isNull(viewFilter, "viewFilter");
//             mViewFilter = viewFilter;
//             return this;
//         }
// 
//         public Build range(int min, int max) {
//             if (min < 0) {
//                 throw new IllegalArgumentException();
//             }
//             if (max < min) {
//                 throw new IllegalArgumentException();
//             }
//             this.min = min;
//             this.max = max;
//             return this;
//         }
// 
//         public Build clipDraw(boolean clip) {
//             clipDraw = clip;
//             return this;
//         }
// 
//         public Build addLayer(Class<? extends Layer> clz, Drawable icon, String iconName) {
//             mLayerList.add(new Item(clz,icon,iconName));
//             return this;
//         }
//         public Config build() {
//             return new Config(this);
//         }
//     }
// }
// 
// Path: sak-nop/src/main/java/com/wanjian/sak/converter/ISizeConverter.java
// public abstract class ISizeConverter {
//     public static ISizeConverter CONVERTER;
// 
//     public abstract String desc();
// 
//     public abstract Size convert(Context context, float length);
// 
//     public abstract int recovery(Context context, float length);
// 
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/filter/ViewFilter.java
// public abstract class ViewFilter {
//     public static ViewFilter FILTER = new ViewFilter() {
//         @Override
//         protected boolean apply(View view) {
//             return view.getVisibility() == View.VISIBLE;
//         }
//     };
// 
// 
//     public final boolean filter(View view) {
//         return apply(view);
//     }
// 
//     protected abstract boolean apply(View view);
// 
//     @Override
//     public int hashCode() {
//         return getClass().hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null) {
//             return false;
//         }
//         return obj.getClass() == getClass();
//     }
// }


// Path: sak-nop/src/main/java/com/wanjian/sak/layer/AbsLayer.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
import com.wanjian.sak.config.Config;
import com.wanjian.sak.converter.ISizeConverter;
import com.wanjian.sak.filter.ViewFilter;


    }

    protected void onUiUpdate(Canvas canvas, View rootView) {

    }

    protected void onAttached(View rootView) {
    }


    protected void onDetached(View rootView) {
    }

    protected int[] getLocationAndSize(View view) {
        return null;
    }

    protected int dp2px(int dip) {
        return 0;
    }

    protected int px2dp(float pxValue) {
        return 0;
    }

    protected ISizeConverter getSizeConverter() {
        return null;
    }

    protected ViewFilter getViewFilter() {