From 9dbc3d9356d57fecb0f77782838161b53a9852f2 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 29 三月 2017 14:49:34 +0800
Subject: [PATCH] 

---
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/PlaceMng.java                      |   49 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/BaseMng.java                       |   36 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/IntervieweeQueryMng.java           |   37 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/TabNameUtil.java                      |   26 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorCheckInMng.java             |  101 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java                   |   33 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountrysModel.java                   |   46 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java                 |  116 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/Constant.java                         |    9 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorManagerListAdapter.java     |   76 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorTypeMng.java                |   81 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/SingleSelectionPopup.java           |  141 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/AttendanceRecyclerViewAdapter.java |   30 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/OneBottomRecylerViewAdapter.java   |  193 ++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java                     |   74 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyWheelAdapter.java                |   49 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/CheckInFragment.java              |  334 ++++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/JsonPares.java                        |   27 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountryModel.java                    |   31 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/VisitFragment.java                |  137 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/AttendanceFragment.java           |   85 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/RegisterFragment.java             |  303 +++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/WindowsUtil.java                      |   26 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/MyGLSurfaceView.java                |  356 ++++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/BaseCommonCallBack.java     |    2 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorQueryMng.java               |   22 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorRecyclerViewAdapter.java    |  176 ++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UrlUtil.java                          |    9 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitPurposePopup.java              |  144 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/MultipartUtility.java                 |  157 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/RegisterMng.java                   |   61 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyFragmentPagerAdapter.java        |   68 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/HomeFragment.java                 |  372 ++++
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitorView.java                    |   58 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/CountryPresenter.java                 |   90 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/PhoneCallFragment.java            |  133 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/ResultMsg.java                       |   42 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/InfoTextView.java                   |  110 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseActivity.java                     |   67 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseFragment.java                     |   71 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/listeners/OkButtonClickedListener.java     |   11 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/XmlParserHandler.java                 |   58 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java                  |   62 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/StreamUtils.java                      |   45 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Countrys.java                        |   50 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Person.java                          |    8 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/ToRegisterOnClickListener.java     |    2 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/GetNetResultJson.java                 |   53 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/DeviceFragment.java               |  127 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/AppApi.java                           |   22 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainUIBaseFragment.java               |   40 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/BirthdayPickerDialog.java           |  123 +
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/CompanyMng.java                    |   45 
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/CountrySelectionPopup.java          |  155 +
 54 files changed, 4,778 insertions(+), 1 deletions(-)

diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/AttendanceRecyclerViewAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/AttendanceRecyclerViewAdapter.java
new file mode 100644
index 0000000..7db5796
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/AttendanceRecyclerViewAdapter.java
@@ -0,0 +1,30 @@
+package cn.com.basic.face.adapter;
+
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import com.camnter.easyrecyclerview.adapter.EasyRecyclerViewAdapter;
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class AttendanceRecyclerViewAdapter extends EasyRecyclerViewAdapter {
+    private TextView mTvNumber,mTvTime,mTvAddress,mTvState;
+    @Override
+    public int[] getItemLayouts() {
+        return new int[]{R.layout.item_attendance};
+    }
+
+    @Override
+    public void onBindRecycleViewHolder(EasyRecyclerViewHolder viewHolder, int position) {
+        mTvNumber = viewHolder.findViewById(R.id.item_attendance_num);
+        mTvNumber.setText(position+1+"");
+    }
+
+    @Override
+    public int getRecycleViewItemType(int position) {
+        return 0;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyFragmentPagerAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyFragmentPagerAdapter.java
new file mode 100644
index 0000000..ccba3f6
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyFragmentPagerAdapter.java
@@ -0,0 +1,68 @@
+package cn.com.basic.face.adapter;
+
+import android.content.Context;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Administrator on 2016/10/17.
+ */
+public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
+
+    private final List<Fragment> mFragments = new ArrayList<>();
+    private final List<String> mFragmentTitles = new ArrayList<>();
+    private final List<Integer> mFragmentIcons = new ArrayList<>();
+    private Context context;
+    public MyFragmentPagerAdapter(FragmentManager fm,Context context) {
+        super(fm);
+        this.context = context;
+    }
+
+    public void addFragment(Fragment fragment, String title,int drawable) {
+        mFragments.add(fragment);
+        mFragmentTitles.add(title);
+        mFragmentIcons.add(drawable);
+    }
+
+    @Override
+    public Fragment getItem(int position) {
+        return mFragments.get(position);
+    }
+
+    @Override
+    public int getCount() {
+        return mFragments.size();
+    }
+
+    @Override
+    public CharSequence getPageTitle(int position) {
+//        return mFragmentTitles.get(position);
+        return null;
+
+//        Drawable image = context.getResources().getDrawable(R. mipmap.ic_launcher);
+////        image.setBounds(0, 0, image.getIntrinsicWidth()/2, image.getIntrinsicHeight()/2);
+//        image.setBounds(0, 0, image.getIntrinsicWidth()/2, image.getIntrinsicHeight()/2);
+//        ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
+//        SpannableString ss = new SpannableString("鍢垮樋");
+//        ss.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+//        return ss;
+    }
+    public View getTabView(int position){
+        View view = LayoutInflater.from(context).inflate(R.layout.tab_main,null);
+        TextView mTvTitle = (TextView) view.findViewById(R.id.tab_item_title);
+        mTvTitle.setText(mFragmentTitles.get(position));
+        ImageView mImgIcon = (ImageView) view.findViewById(R.id.tab_item_icon);
+        mImgIcon.setImageResource(mFragmentIcons.get(position));
+        return view;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyWheelAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyWheelAdapter.java
new file mode 100644
index 0000000..9eaf788
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/MyWheelAdapter.java
@@ -0,0 +1,49 @@
+package cn.com.basic.face.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import com.wx.wheelview.adapter.BaseWheelAdapter;
+
+import cn.com.basic.face.discern.entity.Dictionary;
+
+
+/**
+ * Created by Administrator on 2016/11/3.
+ */
+public class MyWheelAdapter extends BaseWheelAdapter<String> {
+    private Context mContext;
+
+    public MyWheelAdapter(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    protected View bindView(int position, View convertView, ViewGroup parent) {
+        ViewHolder viewHolder;
+        if (convertView == null) {
+            viewHolder = new ViewHolder();
+            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_wheel_list, null);
+            viewHolder.textView = (TextView) convertView.findViewById(R.id.item_wheel_name);
+            convertView.setTag(viewHolder);
+        } else {
+            viewHolder = (ViewHolder) convertView.getTag();
+        }
+        Object o = mList.get(position);
+        if (o instanceof Dictionary) {
+            viewHolder.textView.setText(((Dictionary) o).getName());
+        } else {
+            viewHolder.textView.setText(o+"");
+        }
+
+        return convertView;
+    }
+
+    static class ViewHolder {
+        TextView textView;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/OneBottomRecylerViewAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/OneBottomRecylerViewAdapter.java
new file mode 100644
index 0000000..570e669
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/OneBottomRecylerViewAdapter.java
@@ -0,0 +1,193 @@
+package cn.com.basic.face.adapter;
+
+import android.content.Context;
+import android.net.Uri;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.base.MainActivity;
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.util.AppApi;
+import cn.com.basic.face.util.WindowsUtil;
+import com.camnter.easyrecyclerview.adapter.EasyRecyclerViewAdapter;
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+
+import java.util.List;
+
+import cn.com.basic.face.discern.query.item.FacePhotoItem;
+import cn.com.basic.face.discern.query.item.VisitorQueryItem;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public class OneBottomRecylerViewAdapter extends EasyRecyclerViewAdapter {
+    private int TYPE_1 = 0,TYPE_2 = 1;
+    private int type;
+    private Context context;
+    private List list;
+    public OneBottomRecylerViewAdapter(Context context) {
+        this.context = context;
+    }
+
+    @Override
+    public int[] getItemLayouts() {
+        return new int[]{R.layout.item_visitor_registe,R.layout.item_visitor_user};
+    }
+
+    @Override
+    public void onBindRecycleViewHolder(EasyRecyclerViewHolder viewHolder, int position) {
+        int recycleViewItemType = getRecycleViewItemType(position);
+        switch (recycleViewItemType){
+            case 0:
+
+                RegisterViewHolder(viewHolder,position);
+                break;
+            case 1:
+                UserViewHolder(viewHolder,position);
+                break;
+        }
+    }
+
+    @Override
+    public int getRecycleViewItemType(int position) {
+        type = position%2;
+        switch (type){
+            case 0:
+                return TYPE_1;
+            case 1:
+                return TYPE_2;
+            default:
+                return TYPE_1;
+        }
+    }
+
+//    @Override
+//    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
+//        super.onAttachedToRecyclerView(recyclerView);
+//        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
+//        if (manager instanceof GridLayoutManager) {
+//            final GridLayoutManager gridManager = ((GridLayoutManager) manager);
+//            gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
+//                @Override
+//                public int getSpanSize(int position) {
+//                    return getRecycleViewItemType(position) == BANNER_TYPE ? gridManager.getSpanCount() : 1;
+//                }
+//            });
+//        }
+//    }
+    /**
+     * 绗竴鍒楁敞鍐�
+     * @param holder
+     * @param posistion
+     */
+    private void RegisterViewHolder(EasyRecyclerViewHolder holder,int posistion){
+
+        RelativeLayout mLayout = holder.findViewById(R.id.item_register_base);
+        ViewGroup.LayoutParams layoutParams = mLayout.getLayoutParams();
+        layoutParams.height = WindowsUtil.dip2px(context, 127);
+        layoutParams.width = WindowsUtil.dip2px(context, 104);
+        mLayout.setLayoutParams(layoutParams);
+
+        final Object data = this.getItem(posistion);
+
+        ImageView photoIv = (ImageView) mLayout.findViewById(R.id.item_register_bcg);
+        TextView toRegisterTv = (TextView) mLayout.findViewById(R.id.item_register_to_register);
+        toRegisterTv.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view) {
+                MainActivity.selectPage(1);
+                System.out.println(data.toString());
+            }
+        });
+
+//        ImageView mSdv = holder.findViewById(R.id.item_register_bcg);
+//        ViewGroup.LayoutParams mSdvLayoutParams = mSdv.getLayoutParams();
+//        mSdvLayoutParams.height = WindowsUtil.dip2px(context, 60);
+//        mSdvLayoutParams.width = WindowsUtil.dip2px(context, 60);
+//        mSdv.setLayoutParams(mSdvLayoutParams);
+    }
+
+
+    /**
+     * 绗簩鍒楃敤鎴锋儏鍐�
+     * @param holder
+     * @param posistion
+     */
+    private void UserViewHolder(EasyRecyclerViewHolder holder,int posistion){
+
+        RelativeLayout mLayout = holder.findViewById(R.id.item_user_base);
+        ViewGroup.LayoutParams layoutParams = mLayout.getLayoutParams();
+        layoutParams.height = WindowsUtil.dip2px(context, 127);
+        layoutParams.width = WindowsUtil.dip2px(context, 104);
+        mLayout.setLayoutParams(layoutParams);
+
+        ImageView photoIv = (ImageView) mLayout.findViewById(R.id.item_user_bcg);
+        TextView warningTv = (TextView) mLayout.findViewById(R.id.item_user_warning);
+        TextView nameTv = (TextView) mLayout.findViewById(R.id.item_user_name);
+        TextView statusTv = (TextView) mLayout.findViewById(R.id.item_user_status);
+        //statusTv.setText("");
+
+        Object data = this.getItem(posistion);
+        if (data instanceof FacePhotoItem) {
+            final FacePhotoItem item = (FacePhotoItem) data;
+
+            if (item.getWarning().length() > 0 && "鏉ヨ鐧昏".equals(item.getStatus())) {
+                //warningTv.setText("璀﹀憡");
+                warningTv.setVisibility(View.VISIBLE);
+            } else {
+                warningTv.setVisibility(View.GONE);
+            }
+
+
+            nameTv.setText(item.getName());
+
+            statusTv.setText(item.getStatus());
+            if ("鏉ヨ鐧昏".equals(item.getStatus())) {
+                statusTv.setBackground(context.getDrawable(R.drawable.rectangle_textview));
+
+                statusTv.setHeight((int)(context.getResources().getDisplayMetrics().density * 45));
+                statusTv.setOnClickListener(new View.OnClickListener(){
+                    @Override
+                    public void onClick(View view) {
+                        MainActivity.selectPage(2);
+                        CheckInFragment.getInstance().visitorCheckIn(item);
+                    }
+                });
+            } else {
+                statusTv.setBackground(null);
+                statusTv.setOnClickListener(null);
+            }
+        }
+
+        nameTv.setText("");
+        if (data instanceof VisitorQueryItem) {
+            final VisitorQueryItem item = (VisitorQueryItem)data;
+            nameTv.setText(item.getName());
+            photoIv.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE+item.getImagePath()));
+            if (1==1) {
+                statusTv.setBackground(context.getDrawable(R.drawable.rectangle_textview));
+
+                statusTv.setHeight((int)(context.getResources().getDisplayMetrics().density * 45));
+                statusTv.setOnClickListener(new View.OnClickListener(){
+                    @Override
+                    public void onClick(View view) {
+                        MainActivity.selectPage(2);
+                        CheckInFragment.getInstance().visitorCheckIn(item);
+                    }
+                });
+            }
+        }
+
+
+//        ImageView mSdv = holder.findViewById(R.id.item_user_bcg);
+//        ViewGroup.LayoutParams mSdvLayoutParams = mSdv.getLayoutParams();
+//        mSdvLayoutParams.height = WindowsUtil.dip2px(context, 60);
+//        mSdvLayoutParams.width = WindowsUtil.dip2px(context, 60);
+//        mSdv.setLayoutParams(mSdvLayoutParams);
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/ToRegisterOnClickListener.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/ToRegisterOnClickListener.java
new file mode 100644
index 0000000..ad0c503
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/ToRegisterOnClickListener.java
@@ -0,0 +1,2 @@
+package cn.com.basic.face.adapter;
+
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorManagerListAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorManagerListAdapter.java
new file mode 100644
index 0000000..dbdcd26
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorManagerListAdapter.java
@@ -0,0 +1,76 @@
+package cn.com.basic.face.adapter;
+
+import android.widget.CheckBox;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import com.camnter.easyrecyclerview.adapter.EasyRecyclerViewAdapter;
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class VisitorManagerListAdapter extends EasyRecyclerViewAdapter {
+    private CheckBox mCheckBox;
+    private int oldPosition,newPosition;
+    @Override
+    public int[] getItemLayouts() {
+        return new int[]{R.layout.item_visitor_manager_time,R.layout.item_visitor_manager_info};
+    }
+
+    @Override
+    public void onBindRecycleViewHolder(EasyRecyclerViewHolder viewHolder, int position) {
+        int type = getRecycleViewItemType(position);
+        switch (type){
+            case 0:
+                TimeViewHolder(viewHolder,position);
+                break;
+            case 1:
+                InfoViewHolder(viewHolder,position);
+                break;
+        }
+    }
+
+    @Override
+    public int getRecycleViewItemType(int position) {
+        switch (position){
+            case 0:
+                return 0;
+            case 3:
+                return 0;
+            case 8:
+                return 0;
+            default:
+                return 1;
+        }
+    }
+
+    /**
+     * 鏃ユ湡item
+     * @param viewHolder
+     * @param position
+     */
+    private void TimeViewHolder(EasyRecyclerViewHolder viewHolder,int position){
+
+    }
+    /**
+     * 淇℃伅鍐呭item
+     * @param viewHolder
+     * @param position
+     */
+    private void InfoViewHolder(EasyRecyclerViewHolder viewHolder,int position){
+        mCheckBox = viewHolder.findViewById(R.id.item_visitor_info_check);
+        if (position ==oldPosition){
+            mCheckBox.setChecked(false);
+        }
+        if (position == newPosition){
+            mCheckBox.setChecked(true);
+        }
+    }
+
+    public void checkItemShow(int oldPosition,int newPosition){
+        this.oldPosition = oldPosition;
+        this.newPosition = newPosition;
+        notifyDataSetChanged();
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorRecyclerViewAdapter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorRecyclerViewAdapter.java
new file mode 100644
index 0000000..8dea4ed
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/adapter/VisitorRecyclerViewAdapter.java
@@ -0,0 +1,176 @@
+package cn.com.basic.face.adapter;
+
+import android.content.Context;
+import android.net.Uri;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.util.AppApi;
+import cn.com.basic.face.util.Constant;
+import com.camnter.easyrecyclerview.adapter.EasyRecyclerViewAdapter;
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+import com.facebook.drawee.view.SimpleDraweeView;
+
+import java.util.List;
+
+import cn.com.basic.face.discern.query.item.VisitorQueryItem;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class VisitorRecyclerViewAdapter extends EasyRecyclerViewAdapter {
+    private Context mContext;
+    private int type, mTypeColor;
+    private List list;
+    private TextView mTvName, mTvDepartment;
+    public static final int TYPE_NAME = 10000;
+    public static final int TYPE_DEPARTMENT = 10001;
+    private TextView mToNameTv;
+    private TextView mToDepartmentTv;
+
+    public VisitorRecyclerViewAdapter(Context mContext, int type) {
+        this.mContext = mContext;
+        this.type = type;
+    }
+
+    @Override
+    public int[] getItemLayouts() {
+        return new int[]{R.layout.item_visitor_from, R.layout.item_visitor_to};
+    }
+
+    @Override
+    public void onBindRecycleViewHolder(EasyRecyclerViewHolder viewHolder, int position) {
+        switch (type) {
+            case Constant.VISITOR_FROM:
+                VisitorFromViewHolder(viewHolder, position);
+                break;
+            case Constant.VISITOR_TO:
+                VisitorToViewHolder(viewHolder, position);
+                break;
+        }
+    }
+
+    @Override
+    public int getRecycleViewItemType(int position) {
+        switch (type) {
+            case Constant.VISITOR_FROM:
+                return 0;
+            case Constant.VISITOR_TO:
+                return 1;
+            default:
+                return 1;
+        }
+    }
+
+    /**
+     * 鏉ヨ浜篐older
+     *
+     * @param holder
+     * @param posistion
+     */
+    private void VisitorFromViewHolder(EasyRecyclerViewHolder holder, final int posistion) {
+        LinearLayout mLayout = holder.findViewById(R.id.item_visitor_from_base);
+
+        TextView nameTv = (TextView)mLayout.findViewById(R.id.item_visitor_name);
+        SimpleDraweeView photoIv = (SimpleDraweeView) mLayout.findViewById(R.id.item_visitor_photo);
+
+
+
+        RelativeLayout itemVisitorFromRl = (RelativeLayout)mLayout.findViewById(R.id.item_visitor_from_rl);
+
+        itemVisitorFromRl.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view) {
+                Object data = getList().get(posistion);
+                if (data instanceof VisitorQueryItem) {
+                    VisitorQueryItem item = (VisitorQueryItem) data;
+                    CheckInFragment.getInstance().setVisitorInfo(item);
+                }
+            }
+        });
+
+        nameTv.setText("");
+
+        Object data = getList().get(posistion);
+        if (data instanceof VisitorQueryItem) {
+            VisitorQueryItem item = (VisitorQueryItem) data;
+            nameTv.setText(item.getName());
+
+            photoIv.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE + item.getImagePath()));
+
+        }
+
+        ViewGroup.LayoutParams layoutParams = mLayout.getLayoutParams();
+        mLayout.setLayoutParams(layoutParams);
+    }
+
+    /**
+     * 琚闂瓾older
+     *
+     * @param holder
+     * @param posistion
+     */
+    private void VisitorToViewHolder(EasyRecyclerViewHolder holder, final int posistion) {
+        LinearLayout mLayout = holder.findViewById(R.id.item_visitor_to_base);
+        mTvName = holder.findViewById(R.id.item_visitor_to_name);
+
+        mToNameTv = (TextView) mTvName.findViewById(R.id.item_visitor_to_name);
+        mToDepartmentTv = (TextView) mTvName.findViewById(R.id.item_visitor_to_department);
+        mTvDepartment = holder.findViewById(R.id.item_visitor_to_department);
+        SimpleDraweeView photoIv = (SimpleDraweeView) mLayout.findViewById(R.id.item_visitor_to_avatar);
+
+        Object data = getList().get(posistion);
+        if (data instanceof VisitorQueryItem) {
+            VisitorQueryItem item = (VisitorQueryItem) data;
+            mToNameTv.setText(item.getName());
+            mTvDepartment.setText(item.getDeptName());
+            photoIv.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE + item.getImagePath()));
+        }
+
+        RelativeLayout itemVisitorToRl = (RelativeLayout) holder.findViewById(R.id.item_visitor_to_rl);
+        itemVisitorToRl.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view) {
+                Object data = getList().get(posistion);
+                if (data instanceof VisitorQueryItem) {
+                    VisitorQueryItem item = (VisitorQueryItem) data;
+                    CheckInFragment.getInstance().setIntervieweeInfo(item);
+                }
+            }
+        });
+
+
+        if (mTypeColor == TYPE_DEPARTMENT) {
+            mTvName.setTextColor(mContext.getResources().getColor(R.color.colorText_b));
+            mTvDepartment.setTextColor(mContext.getResources().getColor(R.color.colorText_5));
+        } else {
+            mTvName.setTextColor(mContext.getResources().getColor(R.color.colorText_5));
+            mTvDepartment.setTextColor(mContext.getResources().getColor(R.color.colorText_b));
+        }
+
+    }
+
+    public void setVisitorToColor(int type) {
+        this.mTypeColor = type;
+    }
+//    public void setVisitorToTextColor(int type){
+//        switch (type){
+//            case TYPE_DEPARTMENT:
+//                mTvName.setTextColor(mContext.getResources().getColor(R.color.colorText_b));
+//                mTvDepartment.setTextColor(mContext.getResources().getColor(R.color.colorText_5));
+//                notifyDataSetChanged();
+//                break;
+//            case TYPE_NAME:
+//                mTvName.setTextColor(mContext.getResources().getColor(R.color.colorText_5));
+//                mTvDepartment.setTextColor(mContext.getResources().getColor(R.color.colorText_b));
+//                notifyDataSetChanged();
+//                break;
+//        }
+//    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseActivity.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseActivity.java
new file mode 100644
index 0000000..f9a5889
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseActivity.java
@@ -0,0 +1,67 @@
+package cn.com.basic.face.base;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AppCompatActivity;
+
+import org.xutils.x;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public abstract class BaseActivity extends AppCompatActivity{
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        x.view().inject(this);
+        //璁剧疆甯冨眬鍐呭
+        setContentView(getLayoutId());
+        //鍒濆鍖栨帶浠�
+        initViews(savedInstanceState);
+        //鍒濆鍖朤oolBar
+        initToolBar();
+        //鍒濆鍖栫洃鍚櫒
+        initListeners();
+        //鍒濆鍖栨暟鎹�
+        initData();
+    }
+
+    public abstract int getLayoutId();
+
+    public  void initViews(Bundle savedInstanceState){};
+
+    public  void initToolBar(){};
+
+    public  void initListeners(){};
+
+    public  void initData(){};
+
+    /**
+     * 璺宠浆鍒版寚瀹氱殑Activity
+     *
+     * @param targetActivity 瑕佽烦杞殑鐩爣Activity
+     */
+    protected final void startActivity(@NonNull Class<?> targetActivity) {
+        startActivity(new Intent(this, targetActivity));
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+    }
+
+    /**
+     * 璺宠浆鍒版寚瀹氱殑Activity
+     *
+     * @param data           Activity涔嬮棿浼犻�掓暟鎹紝Intent鐨凟xtra key涓篊onstant.EXTRA_NAME.DATA
+     * @param targetActivity 瑕佽烦杞殑鐩爣Activity
+     */
+    protected final void startActivity(@NonNull String name, @NonNull Bundle data, @NonNull Class<?> targetActivity) {
+        final Intent intent = new Intent();
+        intent.putExtra(name, data);
+        intent.setClass(this, targetActivity);
+        startActivity(intent);
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java
new file mode 100644
index 0000000..8916775
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java
@@ -0,0 +1,62 @@
+package cn.com.basic.face.base;
+
+import android.app.Application;
+
+import cn.com.basic.face.service.DictionaryMng;
+import cn.com.basic.face.service.PlaceMng;
+import cn.com.basic.face.service.VisitorTypeMng;
+import com.facebook.drawee.backends.pipeline.Fresco;
+import com.lzy.okhttputils.OkHttpUtils;
+import com.lzy.okhttputils.model.HttpHeaders;
+import com.lzy.okhttputils.model.HttpParams;
+
+import org.xutils.x;
+
+import cn.com.basic.face.discern.entity.Place;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public class BaseApplication extends Application{
+
+    private static BaseApplication application;
+
+    public static BaseApplication getInstance() {
+        return application;
+    }
+
+    private Place place;
+
+    public void setPlace(Place place) {
+        this.place = place;
+    }
+
+    public Place getPlace() {
+        return place;
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        x.Ext.init(this);
+        Fresco.initialize(this);
+        initOkHttpUtils();
+        application = this;
+        PlaceMng.getInstance().findPlace();
+        DictionaryMng.getInstance().loadAllDictionaryData();
+        VisitorTypeMng.getInstance().loadAll();
+    }
+
+    private void initOkHttpUtils() {
+        HttpHeaders headers = new HttpHeaders();
+        headers.put("commonHeaderKey1", "commonHeaderValue1");    //鎵�鏈夌殑 header 閮� 涓嶆敮鎸� 涓枃
+        headers.put("commonHeaderKey2", "commonHeaderValue2");
+        HttpParams params = new HttpParams();
+        params.put("commonParamsKey1", "commonParamsValue1");     //鎵�鏈夌殑 params 閮� 鏀寔 涓枃
+        params.put("commonParamsKey2", "杩欓噷鏀寔涓枃鍙傛暟");
+        //蹇呴』璋冪敤鍒濆鍖�
+        OkHttpUtils.init(this);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseFragment.java
new file mode 100644
index 0000000..ad747b4
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseFragment.java
@@ -0,0 +1,71 @@
+package cn.com.basic.face.base;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public abstract class BaseFragment extends Fragment{
+    private View view;
+
+    public View getView() {
+        return view;
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        if (this.view == null) {
+            this.view = inflater.inflate(this.getLayoutId(), container, false);
+        }
+        if (this.view.getParent() != null) {
+            ViewGroup parent = (ViewGroup) this.view.getParent();
+            parent.removeView(this.view);
+        }
+        this.initViews(this.view, savedInstanceState);
+        this.initToolbar(savedInstanceState);
+        this.initListeners();
+        this.initData();
+        return this.view;
+    }
+
+    /**
+     * 璺宠浆鍒版寚瀹氱殑Activity
+     *
+     * @param targetActivity 瑕佽烦杞殑鐩爣Activity
+     */
+    protected final void startActivity(@NonNull Class<?> targetActivity) {
+        startActivity(new Intent(getActivity(), targetActivity));
+    }
+
+    /**
+     * 璺宠浆鍒版寚瀹氱殑Activity
+     *
+     * @param data           Activity涔嬮棿浼犻�掓暟鎹紝Intent鐨凟xtra key涓篊onstant.EXTRA_NAME.DATA
+     * @param targetActivity 瑕佽烦杞殑鐩爣Activity
+     */
+    protected final void startActivity(@NonNull String name, @NonNull Bundle data, @NonNull Class<?> targetActivity) {
+        final Intent intent = new Intent();
+        intent.putExtra(name, data);
+        intent.setClass(getActivity(), targetActivity);
+        startActivity(intent);
+    }
+
+    protected abstract int getLayoutId();
+
+    protected abstract void initViews(View view, Bundle savedInstanceState);
+
+    protected void initToolbar(Bundle savedInstanceState){};
+
+    protected void initListeners() {};
+
+    protected abstract void initData();
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
new file mode 100644
index 0000000..cf867f7
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
@@ -0,0 +1,74 @@
+package cn.com.basic.face.base;
+
+import android.content.Context;
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.os.Bundle;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.MyFragmentPagerAdapter;
+import cn.com.basic.face.util.TabNameUtil;
+import cn.com.basic.face.fragment.AttendanceFragment;
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.fragment.DeviceFragment;
+import cn.com.basic.face.fragment.HomeFragment;
+import cn.com.basic.face.fragment.PhoneCallFragment;
+import cn.com.basic.face.fragment.RegisterFragment;
+import cn.com.basic.face.fragment.VisitFragment;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MainActivity extends BaseActivity {
+
+    private static MainActivity instance;
+
+    private static TabLayout mTabLayout;
+    private static ViewPager mViewPager;
+
+    public static void selectPage(int pageNum) {
+        mTabLayout.getTabAt(pageNum).select();
+    }
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_main;
+    }
+
+    @Override
+    public void initViews(Bundle savedInstanceState) {
+        mTabLayout = (TabLayout) findViewById(R.id.tab_layout);
+        mViewPager = (ViewPager) findViewById(R.id.viewpager);
+        mTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
+        instance = this;
+    }
+
+    @Override
+    public void initData() {
+        List<String> tabNamesList = Arrays.asList(TabNameUtil.tabNames);
+        int[] tabIcons = TabNameUtil.tabIcons;
+        MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),MainActivity.this);
+        myFragmentPagerAdapter.addFragment(HomeFragment.getInstance(), tabNamesList.get(0),tabIcons[0]);
+        myFragmentPagerAdapter.addFragment(RegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
+        myFragmentPagerAdapter.addFragment(CheckInFragment.getInstance(), tabNamesList.get(2),tabIcons[2]);
+        myFragmentPagerAdapter.addFragment(PhoneCallFragment.newInstance(), tabNamesList.get(3),tabIcons[3]);
+        myFragmentPagerAdapter.addFragment(VisitFragment.newInstance(), tabNamesList.get(4),tabIcons[4]);
+        myFragmentPagerAdapter.addFragment(AttendanceFragment.newInstance(), tabNamesList.get(5),tabIcons[5]);
+        myFragmentPagerAdapter.addFragment(DeviceFragment.newInstance(), tabNamesList.get(6),tabIcons[6]);
+        mViewPager.setAdapter(myFragmentPagerAdapter);
+        mViewPager.setOffscreenPageLimit(6);//viewpager缂撳瓨涓暟
+        mTabLayout.setupWithViewPager(mViewPager);
+        mTabLayout.setTabMode(TabLayout.MODE_FIXED);
+        for (int i = 0; i < mTabLayout.getTabCount(); i++) {
+            TabLayout.Tab tab = mTabLayout.getTabAt(i);
+            tab.setCustomView(myFragmentPagerAdapter.getTabView(i));
+            if (i == 0) {
+                tab.getCustomView().setSelected(true);
+            }
+        }
+    }
+
+    public static Context getInstance() {
+        return instance;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainUIBaseFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainUIBaseFragment.java
new file mode 100644
index 0000000..669c7c2
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainUIBaseFragment.java
@@ -0,0 +1,40 @@
+package cn.com.basic.face.base;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+/**
+ * Created by Administrator on 2017/2/20 0020.
+ */
+
+public abstract class MainUIBaseFragment extends BaseFragment{
+    private View view;
+    @Override
+    protected void initViews(View view, Bundle savedInstanceState) {
+        this.view = view;
+        FrameLayout right = (FrameLayout) this.view.findViewById(R.id.main_ui_base_right);
+        FrameLayout left = (FrameLayout) this.view.findViewById(R.id.main_ui_base_left);
+        if (addLeftLayout() != null ){
+            left.addView(addLeftLayout());
+        }
+        if (addRightLayout() != null ){
+            right.addView(addRightLayout());
+        }
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.fragment_main_ui_base;
+    }
+
+    @Override
+    protected void initToolbar(Bundle savedInstanceState) {
+
+    }
+
+    public abstract View addLeftLayout();
+    public abstract View addRightLayout() ;
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/BaseCommonCallBack.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/BaseCommonCallBack.java
index c5dcf25..35fae14 100644
--- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/BaseCommonCallBack.java
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/BaseCommonCallBack.java
@@ -5,7 +5,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.bsk.zhangbo.demoforbsk.base.BaseApplication;
+import cn.com.basic.face.base.BaseApplication;
 
 import org.xutils.common.Callback;
 
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/AttendanceFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/AttendanceFragment.java
new file mode 100644
index 0000000..d1cc924
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/AttendanceFragment.java
@@ -0,0 +1,85 @@
+package cn.com.basic.face.fragment;
+
+import android.support.v7.widget.LinearLayoutManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Toast;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.AttendanceRecyclerViewAdapter;
+import cn.com.basic.face.adapter.VisitorManagerListAdapter;
+import cn.com.basic.face.base.MainUIBaseFragment;
+import cn.com.basic.face.base.MainActivity;
+
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class AttendanceFragment extends MainUIBaseFragment  implements EasyRecyclerViewHolder.OnItemClickListener{
+    private View mViewLeft,mViewRight;
+    private EasyRecyclerView mRightRecyclerView,mLeftRecyclerView;
+    private AttendanceRecyclerViewAdapter mRightAdapter;
+    private VisitorManagerListAdapter mLeftAdapter;
+    public static AttendanceFragment newInstance(){
+        return new AttendanceFragment();
+    }
+    @Override
+    public View addLeftLayout() {
+        mViewLeft = LayoutInflater.from(getActivity()).inflate(R.layout.attendance_manager_left, null);
+        mLeftRecyclerView = (EasyRecyclerView) mViewLeft.findViewById(R.id.visitor_manager_recycler);
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
+        mLeftRecyclerView.setLayoutManager(manager);
+        mLeftAdapter = new VisitorManagerListAdapter();
+        ViewUtils.inject(this, mViewLeft);
+        return mViewLeft;
+    }
+
+    @Override
+    public View addRightLayout() {
+        mViewRight = LayoutInflater.from(getActivity()).inflate(R.layout.attendance_manager_right, null);
+        mRightRecyclerView = (EasyRecyclerView) mViewRight.findViewById(R.id.attendance_recycler);
+        mRightAdapter = new AttendanceRecyclerViewAdapter();
+        ViewUtils.inject(this, mViewRight);
+        return mViewRight;
+    }
+
+    @Override
+    protected void initListeners() {
+        mLeftAdapter.setOnItemClickListener(this);
+    }
+
+    @Override
+    protected void initData() {
+        List list = new ArrayList();
+        for (int i = 0;i<20;i++){
+            list.add("");
+        }
+        mRightAdapter.setList(list);
+        mRightRecyclerView.setAdapter(mRightAdapter);
+        mLeftAdapter.setList(list);
+        mLeftRecyclerView.setAdapter(mLeftAdapter);
+    }
+
+    @Override
+    public void onItemClick(View convertView, int position) {
+        if (position ==0 ||position ==3 ||position ==8){
+
+        }else {
+            Toast.makeText(getActivity(),position+"",Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    @OnClick(R.id.attendance_manager_back)
+    public void back(View view) {
+        MainActivity.selectPage(0);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/CheckInFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/CheckInFragment.java
new file mode 100644
index 0000000..7793cbc
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/CheckInFragment.java
@@ -0,0 +1,334 @@
+package cn.com.basic.face.fragment;
+
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.VisitorRecyclerViewAdapter;
+import cn.com.basic.face.base.MainUIBaseFragment;
+import cn.com.basic.face.listeners.OkButtonClickedListener;
+import cn.com.basic.face.service.DictionaryMng;
+import cn.com.basic.face.service.VisitorCheckInMng;
+import cn.com.basic.face.base.MainActivity;
+import cn.com.basic.face.util.AppApi;
+import cn.com.basic.face.util.Constant;
+import cn.com.basic.face.widget.VisitPurposePopup;
+import cn.com.basic.face.widget.VisitorView;
+import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import org.xutils.http.RequestParams;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import cn.com.basic.face.discern.common.CommonVariables;
+import cn.com.basic.face.discern.entity.Visit;
+import cn.com.basic.face.discern.query.item.FacePhotoItem;
+import cn.com.basic.face.discern.query.item.VisitorQueryItem;
+
+/**
+ * Created by Administrator on 2017/2/20 0020.
+ */
+
+public class CheckInFragment extends MainUIBaseFragment {
+    private View mViewLeft,mViewRight;
+    private RadioGroup mRGTop,mRGClass;
+    private LinearLayout mLlRadioGroupClass;
+    private VisitorView right, left;
+    private VisitorRecyclerViewAdapter mAdapter;
+    private EasyRecyclerView mRecyclerView;
+    private List mList = new ArrayList();;
+
+    private static CheckInFragment instance = new CheckInFragment();
+    private TextView leftCompanyName;
+    private TextView leftIdentityNumber;
+    private ImageView leftPhoto;
+    private TextView leftMobilePhone;
+    private TextView rightDepartment;
+    private TextView rightPost;
+    private TextView rightMobilePhone;
+    private TextView rightTel;
+    //private TextView visitorReasonTv;
+    private List<String> visitPurposeList = new ArrayList<String>();
+    private VisitorQueryItem selectedVisitor;
+    private VisitorQueryItem selectedInterviewee;
+
+    @ViewInject(R.id.visitor_remark_et)
+    private EditText visitorRemarkEt;
+    @ViewInject(R.id.visitor_reason_tv)
+    private TextView visitorReasonTv;
+    @ViewInject(R.id.visitor_register_search_et)
+    private EditText visitorRegisterSearchEt;
+    @ViewInject(R.id.visitor_register_rb_left)
+    private RadioButton visitorRegisterRbLeft;
+    @ViewInject(R.id.visitor_register_check_department)
+    private RadioButton visitorRegisterCheckDepartment;
+    private ImageView rightPhoto;
+
+    public static CheckInFragment getInstance() {
+        return instance;
+    }
+
+    @Override
+    protected void initViews(View view, Bundle savedInstanceState) {
+        super.initViews(view, savedInstanceState);
+    }
+
+    @Override
+    protected void initListeners() {
+        mRGTop.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup radioGroup, int i) {
+                switch (radioGroup.getCheckedRadioButtonId()){
+                    case R.id.visitor_register_rb_left:
+                        //Toast.makeText(MainActivity.getInstance(), "鏉ヨ浜哄憳", Toast.LENGTH_SHORT).show();
+                        mLlRadioGroupClass.setVisibility(View.GONE);
+                        mAdapter = new VisitorRecyclerViewAdapter(getActivity(), Constant.VISITOR_FROM);
+                        //mList.clear();
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        int pageNum = 1;
+                        VisitorCheckInMng.getInstance().findVisitorList(pageNum+"", visitorRegisterSearchEt.getText().toString(), true);
+                        break;
+                    case R.id.visitor_register_rb_right:
+                        //Toast.makeText(MainActivity.getInstance(), "琚浜哄憳", Toast.LENGTH_SHORT).show();
+                        mLlRadioGroupClass.setVisibility(View.VISIBLE);
+                        mAdapter = new VisitorRecyclerViewAdapter(getActivity(), Constant.VISITOR_TO);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        //mList.clear();
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        int pageNum1 = 1;
+                        VisitorCheckInMng.getInstance().findIntervieweeList(pageNum1+"", visitorRegisterSearchEt.getText().toString(), true);
+                        break;
+                }
+            }
+        });
+        mRGClass.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup radioGroup, int i) {
+                switch (radioGroup.getCheckedRadioButtonId()){
+                    case R.id.visitor_register_check_name:
+//                        mAdapter.setVisitorToTextColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        sort(mList, false);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        break;
+                    case R.id.visitor_register_check_department:
+//                        mAdapter.setVisitorToTextColor(VisitorRecyclerViewAdapter.TYPE_DEPARTMENT);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_DEPARTMENT);
+                        sort(mList, true);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+
+                        break;
+                }
+            }
+        });
+        visitorRegisterSearchEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
+
+            @Override
+            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
+
+            @Override
+            public void afterTextChanged(Editable editable) {
+                loadList();
+            }
+        });
+    }
+
+    public void loadList() {
+        if (visitorRegisterRbLeft.isChecked()) {
+            VisitorCheckInMng.getInstance().findVisitorList(1+"", visitorRegisterSearchEt.getText().toString(), true);
+        } else {
+            VisitorCheckInMng.getInstance().findIntervieweeList(1+"", visitorRegisterSearchEt.getText().toString(), true);
+        }
+    }
+
+    private void sort(List<VisitorQueryItem> list, final boolean sortedByDept) {
+        Collections.sort(list, new Comparator<VisitorQueryItem>() {
+            @Override
+            public int compare(VisitorQueryItem t1, VisitorQueryItem t2) {
+                if (sortedByDept) {
+                    String dept1Name = t1.getDeptName()==null?"":t1.getDeptName();
+                    String dept2Name = t2.getDeptName()==null?"":t2.getDeptName();
+                    if(!dept1Name.equals(dept2Name)) {
+                        return dept1Name.compareTo(dept2Name);
+                    }
+                }
+                String name1 = t1.getName()==null?"":t1.getName();
+                String name2 = t2.getName()==null?"":t2.getName();
+                return name1.compareTo(name2);
+            }
+        });
+    }
+
+
+    @Override
+    protected void initData() {
+        loadList();
+    }
+
+    @Override
+    public View addLeftLayout() {
+        mViewLeft = LayoutInflater.from(getActivity()).inflate(R.layout.visitor_register_left,null);
+        mRGTop = (RadioGroup) mViewLeft.findViewById(R.id.visitor_register_radio);
+        mRGClass = (RadioGroup) mViewLeft.findViewById(R.id.visitor_register_check_class);
+        mLlRadioGroupClass = (LinearLayout) mViewLeft.findViewById(R.id.visitor_register_check_class_ll);
+        mRecyclerView = (EasyRecyclerView) mViewLeft.findViewById(R.id.visitor_register_recycler);
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
+        mRecyclerView.setLayoutManager(manager);
+        mAdapter = new VisitorRecyclerViewAdapter(getActivity(),Constant.VISITOR_FROM);
+
+        ViewUtils.inject(this, mViewLeft);
+        return mViewLeft;
+    }
+
+    @Override
+    public View addRightLayout() {
+        mViewRight = LayoutInflater.from(getActivity()).inflate(R.layout.visitor_register_right,null);
+        left = (VisitorView) mViewRight.findViewById(R.id.visitor_view_left);
+        left.setType(Constant.VISITOR_FROM);
+        left.setTitle("");
+        leftCompanyName = (TextView) left.findViewById(R.id.visitor_view_left_company_name);
+        leftIdentityNumber = (TextView) left.findViewById(R.id.visitor_view_left_identity_number);
+        leftMobilePhone = (TextView) left.findViewById(R.id.visitor_view_left_phone);
+        leftPhoto = (ImageView) left.findViewById(R.id.visitor_view_left_photo);
+
+        right = (VisitorView) mViewRight.findViewById(R.id.visitor_view_right);
+        right.setType(Constant.VISITOR_TO);
+        right.setTitle("");
+        rightDepartment = (TextView) right.findViewById(R.id.view_visitor_right_deptartment);
+        rightPost = (TextView) right.findViewById(R.id.view_visitor_right_post);
+        rightMobilePhone = (TextView) right.findViewById(R.id.visitor_right_phone);
+        rightTel = (TextView) right.findViewById(R.id.visitor_right_tel);
+        rightPhoto = (ImageView) right.findViewById(R.id.visitor_view_right_photo);
+
+        ViewUtils.inject(this, mViewRight);
+        return mViewRight;
+    }
+
+    @OnClick(R.id.visitor_register_back)
+    public void back(View view) {
+        MainActivity.selectPage(0);
+    }
+
+    @OnClick(R.id.visitor_register_print)
+    public void print(View view) {
+
+    }
+
+    @OnClick(R.id.visitor_register_add)
+    public void add(View view) {
+
+    }
+
+    @OnClick(R.id.visitor_register_save)
+    public void save(View view) {
+        if (selectedVisitor == null || selectedInterviewee == null) {
+            return;
+        }
+        RequestParams params = new RequestParams();
+        params.addBodyParameter(Visit.FieldNames.matterId, DictionaryMng.getInstance().getId(CommonVariables.DictionaryType.VISIT_PURPOSE+visitorReasonTv.getText().toString()));
+        params.addBodyParameter(Visit.FieldNames.remark, visitorRemarkEt.getText().toString());
+        params.addBodyParameter(Visit.FieldNames.visitorPersonId, selectedVisitor.getId());
+        params.addBodyParameter(Visit.FieldNames.visiteePersonId, selectedInterviewee.getId());
+        params.addBodyParameter(Visit.FieldNames.visitorCompanyId, selectedVisitor.getCompanyId());
+        params.addBodyParameter(Visit.FieldNames.visiteeCompanyId, selectedInterviewee.getCompanyId());
+
+        VisitorCheckInMng.getInstance().add(params);
+    }
+
+    @OnClick(R.id.visitor_reason_tv)
+    public void visitorReason(View view) {
+        VisitPurposePopup popup1 = new VisitPurposePopup(getActivity(),visitPurposeList,"璇烽�夋嫨鎷滆浜嬬敱");
+        popup1.showAtLocation(getView(), Gravity.CENTER,0,0);
+        popup1.addOkButtonClickedListener(new OkButtonClickedListener() {
+            @Override
+            public void onItemSelected(int position, Object o, String item) {
+                visitorReasonTv.setText(item);
+            }
+        });
+    }
+
+    public void visitorCheckIn(FacePhotoItem item) {
+        left.setTitle(item.getName());
+    }
+
+    public void visitorCheckIn(VisitorQueryItem item) {
+        left.setTitle(item.getName());
+        leftMobilePhone.setText(item.getMobilePhone());
+        leftCompanyName.setText(item.getCompanyName());
+        leftIdentityNumber.setText(item.getIdentify());
+        leftPhoto.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE + item.getImagePath()));
+    }
+
+    public void listChanged(List list, boolean isClear) {
+        if (isClear) {
+            mList.clear();
+        }
+        if (visitorRegisterCheckDepartment.isChecked()) {
+            sort(list, false);
+        } else {
+            sort(list, true);
+        }
+        mList.addAll(list);
+        mAdapter.setList(mList);
+        mRecyclerView.setAdapter(mAdapter);
+    }
+
+    public void setVisitorInfo(VisitorQueryItem item) {
+        left.setTitle(item.getName());
+        leftCompanyName.setText(item.getCompanyName());
+        leftIdentityNumber.setText(item.getIdentify());
+        leftMobilePhone.setText(item.getPhone());
+        leftPhoto.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE + item.getImagePath()));
+        selectedVisitor = item;
+    }
+
+    public void setIntervieweeInfo(final VisitorQueryItem item) {
+        right.setTitle(item.getName());
+        rightDepartment.setText(item.getDeptName());
+        rightPost.setText(item.getPostName());
+        rightMobilePhone.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view) {
+                Toast.makeText(MainActivity.getInstance(), "姝e湪鍛煎彨鎵嬫満"+item.getMobilePhone(), Toast.LENGTH_SHORT).show();
+            }
+        });
+        rightTel.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view) {
+                Toast.makeText(MainActivity.getInstance(), "姝e湪鍛煎彨搴ф満"+item.getPhone(), Toast.LENGTH_SHORT).show();
+            }
+        });
+        rightPhoto.setImageURI(Uri.parse(AppApi.CHENXINGGROUND_IMAGEURL_BASE + item.getImagePath()));
+        selectedInterviewee = item;
+    }
+
+    public void setVisitPurposeList(List<String> visitPurposeList) {
+        this.visitPurposeList = visitPurposeList;
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/DeviceFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/DeviceFragment.java
new file mode 100644
index 0000000..7282216
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/DeviceFragment.java
@@ -0,0 +1,127 @@
+package cn.com.basic.face.fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.CheckBox;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.base.MainUIBaseFragment;
+import cn.com.basic.face.base.MainActivity;
+
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class DeviceFragment extends MainUIBaseFragment implements View.OnClickListener{
+    private View mViewLeft,mViewRight;
+    private RelativeLayout mLayoutWifi,mLayoutLandline,mLayoutSchool,mLayoutCamera1,mLayoutCamera2;
+    private TextView mTvWifi,mTvLandline,mTvSchool,mTvCamera1,mTvCamera2;
+    private CheckBox mCheckWifi,mCheckLandline,mCheckSchool,mCheckCamera1,mCheckCamera2;
+    private List<CheckBox> listCheck = new ArrayList<>();
+    public static DeviceFragment newInstance() {
+        return new DeviceFragment();
+    }
+
+    @Override
+    public View addLeftLayout() {
+        mViewLeft = LayoutInflater.from(getActivity()).inflate(R.layout.device_manager_left,null);
+        mLayoutWifi = (RelativeLayout) mViewLeft.findViewById(R.id.device_wifi);
+        mLayoutLandline = (RelativeLayout) mViewLeft.findViewById(R.id.device_landline);
+        mLayoutSchool = (RelativeLayout) mViewLeft.findViewById(R.id.device_school);
+        mLayoutCamera1 = (RelativeLayout) mViewLeft.findViewById(R.id.device_camera1);
+        mLayoutCamera2 = (RelativeLayout) mViewLeft.findViewById(R.id.device_camera2);
+
+        mTvWifi = (TextView) mLayoutWifi.findViewById(R.id.item_device_tv);
+        mCheckWifi = (CheckBox) mLayoutWifi.findViewById(R.id.item_device_check);
+
+        mTvLandline = (TextView) mLayoutLandline.findViewById(R.id.item_device_tv);
+        mCheckLandline = (CheckBox) mLayoutLandline.findViewById(R.id.item_device_check);
+
+        mTvSchool = (TextView) mLayoutSchool.findViewById(R.id.item_device_tv);
+        mCheckSchool = (CheckBox) mLayoutSchool.findViewById(R.id.item_device_check);
+
+        mTvCamera1 = (TextView) mLayoutCamera1.findViewById(R.id.item_device_tv);
+        mCheckCamera1= (CheckBox) mLayoutCamera1.findViewById(R.id.item_device_check);
+
+        mTvCamera2 = (TextView) mLayoutCamera2.findViewById(R.id.item_device_tv);
+        mCheckCamera2 = (CheckBox) mLayoutCamera2.findViewById(R.id.item_device_check);
+        listCheck.add(mCheckWifi);
+        listCheck.add(mCheckLandline);
+        listCheck.add(mCheckSchool);
+        listCheck.add(mCheckCamera1);
+        listCheck.add(mCheckCamera2);
+        setLeftCheck(mCheckWifi);
+        ViewUtils.inject(this, mViewLeft);
+        return mViewLeft;
+    }
+
+    @Override
+    public View addRightLayout() {
+        mViewRight = LayoutInflater.from(getActivity()).inflate(R.layout.device_manager_right,null);
+        return mViewRight;
+    }
+
+    @Override
+    protected void initListeners() {
+        mLayoutWifi.setOnClickListener(this);
+        mLayoutLandline.setOnClickListener(this);
+        mLayoutSchool.setOnClickListener(this);
+        mLayoutCamera1.setOnClickListener(this);
+        mLayoutCamera2.setOnClickListener(this);
+    }
+
+    @Override
+    protected void initData() {
+        mTvWifi.setText(R.string.device_wifi);
+        mTvLandline.setText(R.string.device_landline);
+        mTvSchool.setText(R.string.device_school);
+        mTvCamera1.setText(R.string.device_camera1);
+        mTvCamera2.setText(R.string.device_camera2);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()){
+            case R.id.device_wifi:
+                setLeftCheck(mCheckWifi);
+                break;
+            case R.id.device_landline:
+                setLeftCheck(mCheckLandline);
+                break;
+            case R.id.device_school:
+                setLeftCheck(mCheckSchool);
+                break;
+            case R.id.device_camera1:
+                setLeftCheck(mCheckCamera1);
+                break;
+            case R.id.device_camera2:
+                setLeftCheck(mCheckCamera2);
+                break;
+        }
+    }
+
+    /**
+     * 閫夋嫨鍣�
+     * @param checkBox
+     */
+    private void setLeftCheck(CheckBox checkBox){
+        for (CheckBox box:listCheck){
+            box.setChecked(false);
+        }
+        checkBox.setChecked(true);
+    }
+
+    @OnClick(R.id.device_manager_back)
+    public void back(View view){
+        MainActivity.selectPage(0);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/HomeFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/HomeFragment.java
new file mode 100644
index 0000000..c5040b9
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/HomeFragment.java
@@ -0,0 +1,372 @@
+package cn.com.basic.face.fragment;
+
+import android.graphics.Rect;
+import android.graphics.SurfaceTexture;
+import android.os.Bundle;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.OneBottomRecylerViewAdapter;
+import cn.com.basic.face.base.BaseFragment;
+import cn.com.basic.face.service.VisitorCheckInMng;
+import cn.com.basic.face.util.RtspFaceNative;
+import cn.com.basic.face.util.WindowsUtil;
+import cn.com.basic.face.widget.MyGLSurfaceView;
+import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
+import com.orhanobut.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.basic.face.discern.query.item.FacePhotoItem;
+import cn.com.basic.face.discern.query.item.VisitorQueryItem;
+
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public class HomeFragment extends BaseFragment {
+
+    private RadioGroup mRadioGroup;
+    private RadioButton mRadioButton1, mRadioButton2;
+    private View mRadioLine1, mRadioLine2;
+    private OneBottomRecylerViewAdapter mAdapter;
+    private List mList;
+    private EasyRecyclerView mRecyclerViewRegister, mRecyclerViewUser;
+
+    //鎾斁
+
+    String mSourceString = "clips/testfile.mp4";
+
+    SurfaceView mSurfaceView1;
+    SurfaceView mSurfaceView2;
+    SurfaceHolder mSurfaceHolder1;
+
+    VideoSink mSelectedVideoSink;
+
+
+    SurfaceHolderVideoSink mSurfaceHolder1VideoSink;
+
+    VideoSink mNativeCodecPlayerVideoSink;
+    GLViewVideoSink mGLView1VideoSink;
+    boolean mCreated = false;
+    boolean mIsPlaying = false;
+
+    /** Load jni .so on initialization */
+    static {
+        //System.loadLibrary("rtspface");//xiuxi
+    }
+
+
+    private static HomeFragment instance = new HomeFragment();
+
+    public static HomeFragment getInstance() {
+        return instance;
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.fragment_one;
+    }
+
+    @Override
+    protected void initViews(View view, Bundle savedInstanceState) {
+        mRadioGroup = (RadioGroup) view.findViewById(R.id.radio_group);
+        mRadioButton1 = (RadioButton) view.findViewById(R.id.radio1);
+        mRadioButton2 = (RadioButton) view.findViewById(R.id.radio2);
+        mRadioLine1 = view.findViewById(R.id.radio_line1);
+        mRadioLine2 = view.findViewById(R.id.radio_line2);
+        mRecyclerViewRegister = (EasyRecyclerView) view.findViewById(R.id.recyclerview_register);
+        mRecyclerViewUser = (EasyRecyclerView) view.findViewById(R.id.recyclerview_user);
+        mRadioButton1.setChecked(true);
+        mRecyclerViewRegister.addItemDecoration(new SpaceItemDecoration());
+        GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
+        gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+        mRecyclerViewRegister.setLayoutManager(gridLayoutManager);
+        mAdapter = new OneBottomRecylerViewAdapter(getActivity());
+
+
+        mSurfaceView2 = (SurfaceView) view.findViewById(R.id.surfaceview2);
+        mSurfaceView1 = (SurfaceView) view.findViewById(R.id.surfaceview1);
+        RtspFaceNative.init();
+        RtspFaceNative.setSurface(1, mSurfaceView1.getHolder().getSurface());
+        RtspFaceNative.setSurface(2, mSurfaceView2.getHolder().getSurface());
+
+        mSurfaceHolder1 = mSurfaceView1.getHolder();
+
+        mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() {
+
+            @Override
+            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+                Logger.e( "surfaceChanged format=" + format + ", width=" + width + ", height="
+                        + height);
+            }
+
+            @Override
+            public void surfaceCreated(SurfaceHolder holder) {
+                Logger.e( "surfaceCreated");
+            }
+
+            @Override
+            public void surfaceDestroyed(SurfaceHolder holder) {
+                Logger.e( "surfaceDestroyed");
+            }
+
+        });
+        //surfaceview
+        if (mSurfaceHolder1VideoSink == null) {
+            mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1);
+        }
+        mSelectedVideoSink = mSurfaceHolder1VideoSink;
+
+
+        //openGL
+        if(mSurfaceView2 instanceof MyGLSurfaceView) {
+            ((MyGLSurfaceView)mSurfaceView2).onResume();
+        }
+        if (mGLView1VideoSink == null) {
+            mGLView1VideoSink = new GLViewVideoSink(mSurfaceView2);
+        }
+        mSelectedVideoSink = mGLView1VideoSink;
+
+
+        //鎾斁寤惰繜锛堝垵濮嬪寲杈冩參锛屽彲鑳藉鑷存棤娉曟甯告挱鏀撅級
+        Thread thread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Thread.sleep(5000);
+                    if (!mCreated) {
+                        if (mNativeCodecPlayerVideoSink == null) {
+                            if (mSelectedVideoSink == null) {
+                                return;
+                            }
+                            mSelectedVideoSink.useAsSinkForNative();
+                            mSurfaceHolder1VideoSink.useAsSinkForNative();
+                            //mSelectedVideoSink.useAsSinkForNative();
+                            //mSurfaceHolder1VideoSink.useAsSinkForNative();
+                            mNativeCodecPlayerVideoSink = mSelectedVideoSink;
+                        }
+                        if (mSourceString != null) {
+                            //mCreated = createStreamingMediaPlayer(getResources().getAssets(),
+                            //        mSourceString);
+                            mCreated = RtspFaceNative.createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/sub/av_stream");
+                            mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/sub/av_stream");
+                            ////mCreated = createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+                        }
+                    }
+                    if (mCreated) {
+                        mIsPlaying = !mIsPlaying;
+                        //setPlayingStreamingMediaPlayer(mIsPlaying);
+                    }
+
+
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        thread.start();//xiuxi
+    }
+
+    @Override
+    protected void initListeners() {
+        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup group, int checkedId) {
+                switch (checkedId) {
+                    case R.id.radio1:
+                        mRadioLine1.setVisibility(View.VISIBLE);
+                        mRadioLine2.setVisibility(View.INVISIBLE);
+                        mRecyclerViewRegister.setVisibility(View.VISIBLE);
+                        mRecyclerViewUser.setVisibility(View.GONE);
+                        break;
+                    case R.id.radio2:
+                        mRadioLine1.setVisibility(View.INVISIBLE);
+                        mRadioLine2.setVisibility(View.VISIBLE);
+                        mRecyclerViewRegister.setVisibility(View.GONE);
+                        mRecyclerViewUser.setVisibility(View.VISIBLE);
+                        break;
+                }
+            }
+        });
+    }
+
+    @Override
+    protected void initData() {
+//        switchSurface();
+        mList = new ArrayList();
+        for (int i = 0; i < 125; i++) {
+            FacePhotoItem item = new FacePhotoItem();
+            //item.setType();
+            item.setName("寮犱笁"+i);
+            if (i % 3 == 0) {
+                item.setStatus("鏉ヨ鐧昏");
+            } else {
+                item.setStatus("绛剧");
+            }
+            if (i % 5 == 0) {
+                item.setWarning("");
+            } else {
+                item.setWarning("璀﹀憡");
+            }
+            mList.add(item);
+        }
+        VisitorCheckInMng.getInstance().findVisitorList();
+        mAdapter.setList(mList);
+        mRecyclerViewRegister.setAdapter(mAdapter);
+    }
+
+    public void visitorListChanged(List<VisitorQueryItem> list) {
+        mList.clear();
+        mList.addAll(list);
+        mAdapter.setList(mList);
+        mRecyclerViewRegister.setAdapter(mAdapter);
+    }
+
+    private class SpaceItemDecoration extends RecyclerView.ItemDecoration {
+        @Override
+        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+            super.getItemOffsets(outRect, view, parent, state);
+//            outRect.bottom = WindowsUtil.dip2px(getActivity(), 7);
+            outRect.right = WindowsUtil.dip2px(getActivity(), 15);
+
+            if (parent.getChildLayoutPosition(view) == 0 || parent.getChildLayoutPosition(view) == 1) {
+                outRect.left = WindowsUtil.dip2px(getActivity(), 14);
+            }
+            if (parent.getChildLayoutPosition(view) % 2 == 0) {
+                outRect.bottom = WindowsUtil.dip2px(getActivity(), 7);
+            }
+        }
+    }
+
+    void switchSurface() {
+        if (mCreated && mNativeCodecPlayerVideoSink != mSelectedVideoSink) {
+            // shutdown and recreate on other surface
+            Log.i("@@@", "shutting down player");
+            RtspFaceNative.shutdown(1);
+            mCreated = false;
+            mSelectedVideoSink.useAsSinkForNative();
+            mNativeCodecPlayerVideoSink = mSelectedVideoSink;
+            if (mSourceString != null) {
+                Log.i("@@@", "recreating player");
+                //mCreated = createStreamingMediaPlayer(getResources().getAssets(), mSourceString);
+                mIsPlaying = false;
+                mCreated = RtspFaceNative.createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+                mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+                ////mCreated = createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+            }
+        }
+    }
+
+    /**
+     * Called when the activity is about to be paused.
+     */
+    @Override
+    public void onPause() {
+        mIsPlaying = false;
+        if(mSurfaceView2 instanceof MyGLSurfaceView) {
+            ((MyGLSurfaceView)mSurfaceView2).onPause();
+        }
+        //setPlayingStreamingMediaPlayer(false);//xiuxi
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        if(mSurfaceView2 instanceof MyGLSurfaceView) {
+            ((MyGLSurfaceView)mSurfaceView2).onResume();
+        }
+    }
+
+    /**
+     * Called when the activity is about to be destroyed.
+     */
+    @Override
+    public void onDestroy() {
+        RtspFaceNative.shutdown(1);
+        mCreated = false;
+        super.onDestroy();
+    }
+
+
+    // VideoSink abstracts out the difference between Surface and SurfaceTexture
+    // aka SurfaceHolder and GLSurfaceView
+    static abstract class VideoSink {
+
+        abstract void setFixedSize(int width, int height);
+
+        abstract void useAsSinkForNative();
+
+    }
+
+    static class SurfaceHolderVideoSink extends VideoSink {
+
+        private final SurfaceHolder mSurfaceHolder;
+
+        SurfaceHolderVideoSink(SurfaceHolder surfaceHolder) {
+            mSurfaceHolder = surfaceHolder;
+        }
+
+        @Override
+        void setFixedSize(int width, int height) {
+            mSurfaceHolder.setFixedSize(width, height);
+        }
+
+        @Override
+        void useAsSinkForNative() {
+            Surface s = mSurfaceHolder.getSurface();
+            Log.i("@@@", "setting surface " + s);
+            RtspFaceNative.setSurface(1, s);
+
+
+            /*SurfaceTexture st = mSurfaceHolder.getSurfaceTexture();
+            Surface s = new Surface(st);
+            RtspFaceNative.setSurface(2, s);
+            s.release();*/
+        }
+
+    }
+
+
+    static class GLViewVideoSink extends VideoSink {
+
+        private final SurfaceView SurfaceView;
+        private final SurfaceHolder mSurfaceHolder;
+
+        GLViewVideoSink(SurfaceView myGLSurfaceView) {
+            SurfaceView = myGLSurfaceView;
+            mSurfaceHolder = SurfaceView.getHolder();
+        }
+
+        @Override
+        void setFixedSize(int width, int height) {
+            mSurfaceHolder.setFixedSize(width, height);
+        }
+
+        @Override
+        void useAsSinkForNative() {
+            if(SurfaceView instanceof MyGLSurfaceView) {
+                SurfaceTexture st = ((MyGLSurfaceView)SurfaceView).getSurfaceTexture();
+                Surface s = new Surface(st);
+                RtspFaceNative.setSurface(2, s);
+                s.release();
+            } else {
+                RtspFaceNative.setSurface(2, SurfaceView.getHolder().getSurface());
+            }
+
+        }
+
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/PhoneCallFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/PhoneCallFragment.java
new file mode 100644
index 0000000..ff38e1d
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/PhoneCallFragment.java
@@ -0,0 +1,133 @@
+package cn.com.basic.face.fragment;
+
+import android.support.v7.widget.LinearLayoutManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.RadioGroup;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.VisitorRecyclerViewAdapter;
+import cn.com.basic.face.base.MainUIBaseFragment;
+import cn.com.basic.face.base.MainActivity;
+import cn.com.basic.face.util.Constant;
+import cn.com.basic.face.widget.VisitorView;
+import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class PhoneCallFragment extends MainUIBaseFragment {
+
+
+    private View mViewLeft,mViewRight;
+    private RadioGroup mRGTop,mRGClass;
+    private LinearLayout mLlRadioGroupClass;
+    private VisitorView mVisitorTo;
+    private VisitorRecyclerViewAdapter mAdapter;
+    private EasyRecyclerView mRecyclerView;
+    private List mList;
+
+
+
+    public static PhoneCallFragment newInstance() {
+        return new PhoneCallFragment();
+    }
+    @Override
+    public View addLeftLayout() {
+
+        mViewLeft = LayoutInflater.from(getActivity()).inflate(R.layout.tel_phone_left,null);
+        mRGTop = (RadioGroup) mViewLeft.findViewById(R.id.visitor_register_radio);
+        mRGClass = (RadioGroup) mViewLeft.findViewById(R.id.visitor_register_check_class);
+        mLlRadioGroupClass = (LinearLayout) mViewLeft.findViewById(R.id.visitor_register_check_class_ll);
+        mRecyclerView = (EasyRecyclerView) mViewLeft.findViewById(R.id.visitor_register_recycler);
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
+        mRecyclerView.setLayoutManager(manager);
+        mAdapter = new VisitorRecyclerViewAdapter(getActivity(),Constant.VISITOR_FROM);
+        ViewUtils.inject(this, mViewLeft);
+
+        mLlRadioGroupClass.setVisibility(View.VISIBLE);
+        mAdapter = new VisitorRecyclerViewAdapter(getActivity(), Constant.VISITOR_TO);
+        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+        mAdapter.setList(mList);
+        mRecyclerView.setAdapter(mAdapter);
+
+        return mViewLeft;
+    }
+
+    @Override
+    public View addRightLayout() {
+        mViewRight = LayoutInflater.from(getActivity()).inflate(R.layout.tel_phone_right,null);
+        mVisitorTo = (VisitorView) mViewRight.findViewById(R.id.tel_phone_to);
+        mVisitorTo.setType(Constant.VISITOR_TO);
+        mVisitorTo.setTitle("dasfasdfasdf");
+        return mViewRight;
+    }
+
+    @Override
+    protected void initListeners() {
+        mRGTop.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup radioGroup, int i) {
+                switch (radioGroup.getCheckedRadioButtonId()){
+                    case R.id.visitor_register_rb_left:
+                        mLlRadioGroupClass.setVisibility(View.GONE);
+                        mAdapter = new VisitorRecyclerViewAdapter(getActivity(), Constant.VISITOR_FROM);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        break;
+                    case R.id.visitor_register_rb_right:
+                        mLlRadioGroupClass.setVisibility(View.VISIBLE);
+                        mAdapter = new VisitorRecyclerViewAdapter(getActivity(), Constant.VISITOR_TO);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        break;
+                }
+            }
+        });
+        mRGClass.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup radioGroup, int i) {
+                switch (radioGroup.getCheckedRadioButtonId()){
+                    case R.id.visitor_register_check_name:
+//                        mAdapter.setVisitorToTextColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_NAME);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        break;
+                    case R.id.visitor_register_check_department:
+//                        mAdapter.setVisitorToTextColor(VisitorRecyclerViewAdapter.TYPE_DEPARTMENT);
+                        mAdapter.setVisitorToColor(VisitorRecyclerViewAdapter.TYPE_DEPARTMENT);
+                        mAdapter.setList(mList);
+                        mRecyclerView.setAdapter(mAdapter);
+                        break;
+                }
+            }
+        });
+
+    }
+
+    @Override
+    protected void initData() {
+
+        mList = new ArrayList();
+        for (int i=0;i<25;i++){
+            mList.add("");
+        }
+        mAdapter.setList(mList);
+        mRecyclerView.setAdapter(mAdapter);
+    }
+
+    @OnClick(R.id.tel_phone_back)
+    public void back(View view) {
+        MainActivity.selectPage(0);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/RegisterFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/RegisterFragment.java
new file mode 100644
index 0000000..7947d93
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/RegisterFragment.java
@@ -0,0 +1,303 @@
+package cn.com.basic.face.fragment;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.DatePicker;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.base.BaseFragment;
+import cn.com.basic.face.service.DictionaryMng;
+import cn.com.basic.face.service.RegisterMng;
+import cn.com.basic.face.service.VisitorTypeMng;
+import cn.com.basic.face.listeners.OkButtonClickedListener;
+
+import cn.com.basic.face.widget.BirthdayPickerDialog;
+import cn.com.basic.face.widget.CountrySelectionPopup;
+import cn.com.basic.face.widget.SingleSelectionPopup;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import org.xutils.http.RequestParams;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import cn.com.basic.face.base.MainActivity;
+import cn.com.basic.face.discern.entity.Person;
+import cn.com.basic.face.discern.entity.VisitPersonType;
+
+/**
+ * Created by Administrator on 2017/2/20 0020.
+ */
+//@ContentView(value = R.layout.fragment_register)
+public class RegisterFragment extends BaseFragment implements View.OnClickListener{
+
+    private static final int PICK_IMAGE_REQUEST = 1;
+    @ViewInject(value = R.id.register_tv_content, parentId = R.id.register_id_class)
+    private TextView identityTypeTv;
+    private TextView genderTv;
+    private TextView countryTv;
+    private TextView birthdayTv;
+    private TextView isitorvTypeTv;
+    private TextView mViewVisitorClassTitle;
+
+    private EditText nameEt, phoneEt, identifyEt, companyEt,mViewRemarkContent;
+    private List mSexList;
+    private List mVisitorTypeList;
+    private List mCredentialsList;
+    private LinearLayout mBaseLayout;
+
+    @ViewInject(R.id.register_name)
+    private View mViewName;
+    @ViewInject(R.id.register_gender)
+    private View mViewSex;
+    @ViewInject(R.id.register_country)
+    private View mViewNation;
+    @ViewInject(R.id.register_birthday)
+    private View mViewBirthday;
+    @ViewInject(R.id.register_visitor_class)
+    private View mViewVisitorClass;
+    @ViewInject(R.id.register_phone)
+    private View mViewPhone;
+    @ViewInject(R.id.register_id_class)
+    private View mViewIdClass;
+    @ViewInject(R.id.register_id_num)
+    private View mViewIdNumber;
+    @ViewInject(R.id.register_company)
+    private View mViewCompayName;
+    @ViewInject(R.id.register_remark)
+    private View mViewRemark;
+
+    private String[] countryWordData;
+    private List<String> countryWordList;
+    private HashMap<String, List<String>> countryData;
+
+    private static RegisterFragment instance = new RegisterFragment();
+
+    public static RegisterFragment getInstance() {
+        return instance;
+    }
+    @Override
+    protected int getLayoutId() {
+        return R.layout.fragment_register;
+    }
+
+    @Override
+    protected void initViews(View view, Bundle savedInstanceState) {
+        mBaseLayout = (LinearLayout) view.findViewById(R.id.register_base);
+        ViewUtils.inject(this, mBaseLayout);
+
+        genderTv = (TextView) mViewSex.findViewById(R.id.register_tv_content);
+        countryTv = (TextView) mViewNation.findViewById(R.id.register_tv_content);
+        birthdayTv= (TextView) mViewBirthday.findViewById(R.id.register_tv_content);
+        isitorvTypeTv = (TextView) mViewVisitorClass.findViewById(R.id.register_tv_content);
+       // mViewIdentityTypeContent = (TextView) mViewIdClass.findViewById(R.id.register_tv_content);
+        nameEt = (EditText) mViewName.findViewById(R.id.register_et_content);
+        phoneEt = (EditText) mViewPhone.findViewById(R.id.register_et_content);
+        identifyEt = (EditText) mViewIdNumber.findViewById(R.id.register_et_content);
+        companyEt = (EditText) mViewCompayName.findViewById(R.id.register_et_content);
+        mViewRemarkContent = (EditText) mViewRemark.findViewById(R.id.register_et_content);
+
+        ((TextView) mViewName.findViewById(R.id.register_et_title)).setText(R.string.title_name);
+        ((TextView) mViewSex.findViewById(R.id.register_tv_title)).setText(R.string.title_sex);
+        ((TextView) mViewNation.findViewById(R.id.register_tv_title)).setText(R.string.title_nation);
+        ((TextView) mViewBirthday.findViewById(R.id.register_tv_title)).setText(R.string.title_birthday);
+        ((TextView) mViewVisitorClass.findViewById(R.id.register_tv_title)).setText(R.string.title_visitorClass);
+        ((TextView) mViewPhone.findViewById(R.id.register_et_title)).setText(R.string.title_phone);
+        ((TextView) mViewIdClass.findViewById(R.id.register_tv_title)).setText(R.string.title_idClass);
+        ((TextView) mViewIdNumber.findViewById(R.id.register_et_title)).setText(R.string.title_idNumber);
+        ((TextView) mViewCompayName.findViewById(R.id.register_et_title)).setText(R.string.title_companyName);
+        ((TextView) mViewRemark.findViewById(R.id.register_et_title)).setText(R.string.title_remark);
+    }
+
+    @OnClick(R.id.register_save)
+    public void registerEdit(View view) {
+
+    }
+
+    @OnClick(R.id.register_add)
+    public void registerAdd(View v) {
+        RequestParams params = new RequestParams();
+
+        params.addBodyParameter(Person.FieldNames.name, nameEt.getText().toString());
+        params.addBodyParameter(Person.FieldNames.phone, phoneEt.getText().toString());
+        params.addBodyParameter(Person.FieldNames.gender, DictionaryMng.getInstance().getId(genderTv.getText().toString()));
+        params.addBodyParameter(Person.FieldNames.identityType, DictionaryMng.getInstance().getId(identityTypeTv.getText().toString()));
+        params.addBodyParameter(Person.FieldNames.country, DictionaryMng.getInstance().getId(countryTv.getText().toString()));
+        params.addBodyParameter(Person.FieldNames.identify, identifyEt.getText().toString());
+        params.addBodyParameter(Person.FieldNames.birthday, birthdayTv.getText().toString());
+        params.addBodyParameter("companyName", companyEt.getText().toString());
+
+        //visitor_type
+        params.addBodyParameter(VisitPersonType.FieldNames.visitorTypeId, VisitorTypeMng.getInstance().getId(isitorvTypeTv.getText().toString()));
+        params.addBodyParameter(VisitPersonType.FieldNames.registerCompanyId, "0");
+
+        RegisterMng.getInstance().add(params);
+    }
+
+    @Override
+    protected void initData() {
+//        mVisitorTypeList = VisitorTypeMng.mVisitorTypeList;
+//        mSexList = DictionaryMng.mSexList;
+//        mCredentialsList = DictionaryMng.mCredentialsList;
+    }
+
+    public void setVisitorTypeList(List visitorTypeList) {
+        this.mVisitorTypeList = visitorTypeList;
+    }
+
+    public void setSexList(List sexList) {
+        this.mSexList = sexList;
+    }
+
+    public void setCredentialsList(List credentialsList) {
+        this.mCredentialsList = credentialsList;
+    }
+
+    @OnClick(R.id.register_gender)
+    public void selectGender(View view) {
+        SingleSelectionPopup popup = new SingleSelectionPopup(getActivity(),mSexList,"鎬у埆");
+        popup.showAtLocation(mBaseLayout, Gravity.CENTER,0,0);
+        popup.addOkButtonClickedListener(new OkButtonClickedListener() {
+            @Override
+            public void onItemSelected(int position, Object o, String item) {
+                genderTv.setText(item);
+            }
+        });
+    }
+
+    public void setCountryData(String[] countryWordData, List<String> countryWordList, HashMap<String, List<String>> countryData) {
+        this.countryData = countryData;
+        this.countryWordList = countryWordList;
+        this.countryData = countryData;
+    }
+
+    @OnClick(R.id.register_country)
+    public void selectCountry(View view) {
+        CountrySelectionPopup countrySelectionPopup = new CountrySelectionPopup(getActivity(),
+                countryWordData,countryWordList,countryData);
+        countrySelectionPopup.showAtLocation(mBaseLayout, Gravity.CENTER,0,0);
+        countrySelectionPopup.addOkButtonClickedListener(new OkButtonClickedListener() {
+            @Override
+            public void onItemSelected(int position, Object o, String item) {
+                countryTv.setText(item);
+            }
+        });
+    }
+
+    @OnClick(R.id.register_birthday)
+    public void selectBirthday(View view) {
+        Date date = new Date();
+        BirthdayPickerDialog myDatePickerDialog=new BirthdayPickerDialog(getActivity(),android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
+                new BirthdayPickerDialog.OnDateSetListener(){
+
+                    @Override
+                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
+                        int month=monthOfYear+1;
+                        birthdayTv.setText(year+"-"+month+"-"+dayOfMonth);
+                    }
+                },date);
+        myDatePickerDialog.myShow();
+    }
+
+    @OnClick(R.id.register_visitor_class)
+    public void selectVisitorType(View view) {
+        SingleSelectionPopup popup1 = new SingleSelectionPopup(getActivity(),mVisitorTypeList,"璁垮绫诲瀷");
+        popup1.showAtLocation(mBaseLayout, Gravity.CENTER,0,0);
+        popup1.addOkButtonClickedListener(new OkButtonClickedListener() {
+            @Override
+            public void onItemSelected(int position, Object o, String item) {
+                isitorvTypeTv.setText(item);
+            }
+        });
+    }
+
+    @OnClick(R.id.register_id_class)
+    public void selectIdentityType(View view) {
+        SingleSelectionPopup popup2 = new SingleSelectionPopup(getActivity(),mCredentialsList,"璇佷欢绫诲瀷");
+        popup2.showAtLocation(mBaseLayout, Gravity.CENTER,0,0);
+        popup2.addOkButtonClickedListener(new OkButtonClickedListener() {
+            @Override
+            public void onItemSelected(int position, Object o, String item) {
+                identityTypeTv.setText(item);
+            }
+        });
+    }
+
+    /**
+     * 閫夋嫨浜虹墿蹇収
+     * @param view
+     */
+    @OnClick(R.id.register_choose_photo)
+    public void selectPersonPhoto(View view) {
+        Toast.makeText(getActivity(), "閫夋嫨浜虹墿蹇収", Toast.LENGTH_SHORT).show();
+    }
+
+    /**
+     * 鐐瑰嚮涓婁紶鍥剧墖
+     * @param view
+     */
+    @OnClick(R.id.register_update__photo)
+    public void clickUploadPhoto(View view) {
+        Intent intent = new Intent();
+        intent.setType("image/*");
+        intent.setAction(Intent.ACTION_GET_CONTENT);
+        startActivityForResult(Intent.createChooser(intent, "閫夋嫨鍥剧墖"), PICK_IMAGE_REQUEST);
+    }
+
+    @ViewInject(R.id.register_update__photo)
+    private ImageView ploadPhotoIv;
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
+
+            Uri uri = data.getData();
+
+            try {
+                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
+                // Log.d(TAG, String.valueOf(bitmap));u
+                ploadPhotoIv.setImageBitmap(bitmap);
+//                ImageView imageView = (ImageView) findViewById(R.id.imageView);
+//                imageView.setImageBitmap(bitmap);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 璇佷欢蹇収
+     * @param view
+     */
+    @OnClick(R.id.register_idcard_photo)
+    public void identityPhoto(View view) {
+        Toast.makeText(getActivity(), "璇佷欢蹇収", Toast.LENGTH_SHORT).show();
+    }
+
+    @OnClick(R.id.register_back)
+    public void back(View view) {
+        MainActivity.selectPage(0);
+    }
+
+    @Override
+    public void onClick(View v) {}
+
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/VisitFragment.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/VisitFragment.java
new file mode 100644
index 0000000..3717694
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/fragment/VisitFragment.java
@@ -0,0 +1,137 @@
+package cn.com.basic.face.fragment;
+
+import android.support.v7.widget.LinearLayoutManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.VisitorManagerListAdapter;
+import cn.com.basic.face.base.MainUIBaseFragment;
+import cn.com.basic.face.base.MainActivity;
+
+import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder;
+import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.event.OnClick;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class VisitFragment extends MainUIBaseFragment implements EasyRecyclerViewHolder.OnItemClickListener{
+    private View mViewLeft,mViewRight;
+    private LinearLayout mRowLayout1,mRowLayout2,mRowLayout3,mRowLayout4,mRowLayout5,mRowLayout6,mRowLayout7;
+    private TextView mRow1TextViewLeft,mRow1TextViewRight,mRow2TextViewLeft,mRow2TextViewRight,mRow3TextViewLeft,mRow3TextViewRight,mRow4TextViewLeft,mRow4TextViewRight,
+    mRow5TextViewLeft,mRow5TextViewRight,mRow6TextViewLeft,mRow6TextViewRight,mRow7TextViewLeft,mRow7TextViewRight;
+    private VisitorManagerListAdapter mAdapter;
+    private EasyRecyclerView mRecyclerView;
+    private int mOldPosition = 0,mNewPosition = 0;
+    public static VisitFragment newInstance(){
+        return new VisitFragment();
+    }
+
+
+
+    @Override
+    public View addLeftLayout() {
+        mViewLeft = LayoutInflater.from(getActivity()).inflate(R.layout.visitor_manager_left,null);
+        mRecyclerView = (EasyRecyclerView) mViewLeft.findViewById(R.id.visitor_manager_recycler);
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
+        mRecyclerView.setLayoutManager(manager);
+        mAdapter = new VisitorManagerListAdapter();
+        ViewUtils.inject(this, mViewLeft);
+        return mViewLeft;
+    }
+
+    @Override
+    public View addRightLayout() {
+        mViewRight = LayoutInflater.from(getActivity()).inflate(R.layout.visitor_manager_right,null);
+        mRowLayout1 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row1);
+        mRowLayout2 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row2);
+        mRowLayout3 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row3);
+        mRowLayout4 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row4);
+        mRowLayout5 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row5);
+        mRowLayout6 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row6);
+        mRowLayout7 = (LinearLayout) mViewRight.findViewById(R.id.visitor_manager_row7);
+
+        mRow1TextViewLeft = (TextView) mRowLayout1.findViewById(R.id.visitor_manager_row_title_left);
+        mRow1TextViewRight = (TextView) mRowLayout1.findViewById(R.id.visitor_manager_row_title_right);
+        mRow1TextViewLeft.setText(R.string.title_name);
+        mRow1TextViewRight.setText(R.string.title_phone);
+
+        mRow2TextViewLeft = (TextView) mRowLayout2.findViewById(R.id.visitor_manager_row_title_left);
+        mRow2TextViewRight = (TextView) mRowLayout2.findViewById(R.id.visitor_manager_row_title_right);
+        mRow2TextViewLeft.setText(R.string.title_sex);
+        mRow2TextViewRight.setText(R.string.title_idClass);
+
+        mRow3TextViewLeft = (TextView) mRowLayout3.findViewById(R.id.visitor_manager_row_title_left);
+        mRow3TextViewRight = (TextView) mRowLayout3.findViewById(R.id.visitor_manager_row_title_right);
+        mRow3TextViewLeft.setText(R.string.title_nation);
+        mRow3TextViewRight.setText(R.string.title_idNumber);
+
+        mRow4TextViewLeft = (TextView) mRowLayout4.findViewById(R.id.visitor_manager_row_title_left);
+        mRow4TextViewRight = (TextView) mRowLayout4.findViewById(R.id.visitor_manager_row_title_right);
+        mRow4TextViewLeft.setText(R.string.title_birthday);
+        mRow4TextViewRight.setText(R.string.title_companyName);
+
+        mRow5TextViewLeft = (TextView) mRowLayout5.findViewById(R.id.visitor_manager_row_title_left);
+        mRow5TextViewRight = (TextView) mRowLayout5.findViewById(R.id.visitor_manager_row_title_right);
+        mRow5TextViewLeft.setText(R.string.title_visitor);
+        mRow5TextViewRight.setText(R.string.title_visitor_thing);
+
+        mRow6TextViewLeft = (TextView) mRowLayout6.findViewById(R.id.visitor_manager_row_title_left);
+        mRow6TextViewRight = (TextView) mRowLayout6.findViewById(R.id.visitor_manager_row_title_right);
+        mRow6TextViewLeft.setText(R.string.title_visitor_department);
+        mRow6TextViewRight.setText(R.string.title_visitor_state);
+
+        mRow7TextViewLeft = (TextView) mRowLayout7.findViewById(R.id.visitor_manager_row_title_left);
+        mRow7TextViewRight = (TextView) mRowLayout7.findViewById(R.id.visitor_manager_row_title_right);
+        mRow7TextViewLeft.setText(R.string.title_visitor_start_time);
+        mRow7TextViewRight.setText(R.string.title_visitor_end_time);
+        return mViewRight;
+    }
+
+    @Override
+    protected void initListeners() {
+        mAdapter.setOnItemClickListener(this);
+    }
+
+    @Override
+    protected void initData() {
+        List list = new ArrayList();
+        for (int i = 0;i<20;i++){
+            list.add("");
+        }
+        mAdapter.setList(list);
+        mRecyclerView.setAdapter(mAdapter);
+    }
+
+    @Override
+    public void onItemClick(View convertView, int position) {
+        if (position ==0 ||position ==3 ||position ==8){
+
+        }else {
+            mNewPosition = position;
+            mAdapter.checkItemShow(mOldPosition,mNewPosition);
+            mOldPosition = mNewPosition;
+            mAdapter.getItem(position);
+            Toast.makeText(getActivity(),position+"",Toast.LENGTH_SHORT).show();
+//            Log.e("aaaaaaaaaaaaaaaaaa",position+"");
+////            ((CheckBox)mRecyclerView.getChildAt(position).findViewById(R.id.item_visitor_info_check)).setChecked(true);
+//            CheckBox checkBox = (CheckBox) mRecyclerView.getChildAt(position).findViewById(R.id.item_visitor_info_check);
+//            checkBox.setChecked(true);
+        }
+    }
+
+    @OnClick(R.id.visitor_manager_back)
+    public void back(View view) {
+        MainActivity.selectPage(0);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/listeners/OkButtonClickedListener.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/listeners/OkButtonClickedListener.java
new file mode 100644
index 0000000..21b5f4d
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/listeners/OkButtonClickedListener.java
@@ -0,0 +1,11 @@
+package cn.com.basic.face.listeners;
+
+/**
+ * Created by xiuxi on 2017/3/20.
+*/
+
+public interface OkButtonClickedListener {
+
+    public void onItemSelected(int position, Object o, String item);
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountryModel.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountryModel.java
new file mode 100644
index 0000000..d36e205
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountryModel.java
@@ -0,0 +1,31 @@
+package cn.com.basic.face.model;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class CountryModel {
+    private String name;
+
+    public CountryModel() {
+    }
+
+    public CountryModel(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "CountryModel{" +
+                "name='" + name + '\'' +
+                '}';
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Countrys.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Countrys.java
new file mode 100644
index 0000000..b0647c6
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Countrys.java
@@ -0,0 +1,50 @@
+package cn.com.basic.face.model;
+
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class Countrys {
+
+    /**
+     * name : A
+     * countrys : [{"country":"闃垮瘜姹�"},{"country":"婢冲ぇ鍒╀簹"}]
+     */
+
+    private String name;
+    private List<CountrysBean> countrys;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<CountrysBean> getCountrys() {
+        return countrys;
+    }
+
+    public void setCountrys(List<CountrysBean> countrys) {
+        this.countrys = countrys;
+    }
+
+    public static class CountrysBean {
+        /**
+         * country : 闃垮瘜姹�
+         */
+
+        private String country;
+
+        public String getCountry() {
+            return country;
+        }
+
+        public void setCountry(String country) {
+            this.country = country;
+        }
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountrysModel.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountrysModel.java
new file mode 100644
index 0000000..b0366a6
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/CountrysModel.java
@@ -0,0 +1,46 @@
+package cn.com.basic.face.model;
+
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class CountrysModel {
+    private String name;
+    private List<CountryModel> countryModelList;
+
+    public CountrysModel() {
+        super();
+    }
+
+    public CountrysModel(String name, List<CountryModel> countryModelList) {
+        super();
+        this.name = name;
+        this.countryModelList = countryModelList;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<CountryModel> getCountryModelList() {
+        return countryModelList;
+    }
+
+    public void setCountryModelList(List<CountryModel> countryModelList) {
+        this.countryModelList = countryModelList;
+    }
+
+    @Override
+    public String toString() {
+        return "CountrysModel{" +
+                "name='" + name + '\'' +
+                ", countryModelList=" + countryModelList +
+                '}';
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Person.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Person.java
new file mode 100644
index 0000000..2cc5837
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/Person.java
@@ -0,0 +1,8 @@
+package cn.com.basic.face.model;
+
+/**
+ * Created by Sinoe on 2017/2/27.
+ */
+
+public class Person {
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/ResultMsg.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/ResultMsg.java
new file mode 100644
index 0000000..23739cf
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/model/ResultMsg.java
@@ -0,0 +1,42 @@
+package cn.com.basic.face.model;
+
+/**
+ * Created by Sinoe on 2017/3/6.
+ */
+
+public class ResultMsg {
+    /**
+     * code : 0
+     * info :
+     * message :
+     * time :
+     */
+    private int code;
+    private String info;
+    private String message;
+    private long time;
+    public int getCode() {
+        return code;
+    }
+    public void setCode(int code) {
+        this.code = code;
+    }
+    public String getInfo() {
+        return info;
+    }
+    public void setInfo(String info) {
+        this.info = info;
+    }
+    public String getMessage() {
+        return message;
+    }
+    public void setMessage(String message) {
+        this.message = message;
+    }
+    public long getTime() {
+        return time;
+    }
+    public void setTime(long time) {
+        this.time = time;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/BaseMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/BaseMng.java
new file mode 100644
index 0000000..e75cccb
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/BaseMng.java
@@ -0,0 +1,36 @@
+package cn.com.basic.face.service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class BaseMng {
+
+    public Map<String, String> idMap = new HashMap<String, String>();
+
+    public String getId(String name) {
+        return idMap.get(name);
+    }
+/*
+    public <T> List<T> getSyncList(String url, Map<String, String> condition, Class<T> requiredType){
+        RequestParams params = new RequestParams(AppApi.BASEURL+url);
+        addParameters(params, condition);
+        try {
+            ResultBean resultBean = x.http().getSync(params, ResultBean.class);
+            return resultBean.getListBeanOfType(requiredType);
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
+        }
+        return null;
+    }
+
+    private void addParameters(RequestParams params, Map<String, String> condition) {
+        try {
+            for (Map.Entry<String, String> entry : condition.entrySet()) {
+                params.addParameter(entry.getKey(), entry.getValue());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }*/
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/CompanyMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/CompanyMng.java
new file mode 100644
index 0000000..104411e
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/CompanyMng.java
@@ -0,0 +1,45 @@
+package cn.com.basic.face.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.basic.face.discern.entity.Company;
+
+/**
+ * Created by xiuxi on 2017/3/22.
+ */
+
+public class CompanyMng extends BaseMng {
+
+    private static CompanyMng instance = new CompanyMng();
+
+    public static CompanyMng getInstance() {
+        return instance;
+    }
+
+
+    public static List<Company> companies = new ArrayList<Company>();
+
+    public void loadAll() {
+        loadCompanies();
+    }
+
+    private void loadCompanies() {
+        /*RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.COMPANY_LIST);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<Company> items = getList(Company.class);
+                mVisitorTypeList = new ArrayList<String>();
+                for (Company item : items) {
+                    mVisitorTypeList.add(item.getLabel());
+                    idMap.put(item.getLabel(), item.getId()+"");
+                }
+            }
+
+        });
+        */
+
+    }
+
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java
new file mode 100644
index 0000000..2a656f1
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java
@@ -0,0 +1,116 @@
+package cn.com.basic.face.service;
+
+import cn.com.basic.face.fragment.RegisterFragment;
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.util.AppApi;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+import cn.com.basic.face.discern.common.CommonVariables;
+import cn.com.basic.face.discern.entity.Dictionary;
+
+public class DictionaryMng extends BaseMng {
+
+    public static DictionaryMng instance = new DictionaryMng();
+
+    public static DictionaryMng getInstance() {
+        return instance;
+    }
+
+    public static List<String> nationList = new ArrayList<String>();
+    public static List<String> mCredentialsList = new ArrayList<String>();
+    public static List<String> mSexList = new ArrayList<String>();
+    public static List<String> countryWordList = new ArrayList<String>();
+    public static HashMap<String,List<String>> countryData = new HashMap<String,List<String>>();
+    public static String[] countryWordData = new String[]{};
+    public static List<String> visitPurposeList = new ArrayList<String>();
+
+    public void loadAllDictionaryData() {
+        loadCountries();
+        loadCredentialsList();
+        loadSexList();
+        loadVisitPurposeList();
+    }
+
+    public void loadCountries() {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+        params.addParameter(Dictionary.FieldNames.type, CommonVariables.DictionaryType.COUNTRY);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<Dictionary> items = getList(Dictionary.class);
+                countryWordData = new String[items.size()];
+                int i=0;
+                for (Dictionary item : items) {
+                    idMap.put(item.getName(), item.getId()+"");
+                    nationList.add(item.getName());
+                    String firstLetter = item.getRemark();
+                    List list = countryData.get(firstLetter);
+                    if (list == null) {
+                        list = new ArrayList();
+                        countryData.put(firstLetter, list);
+                        countryWordList.add(0, firstLetter);
+                    }
+                    list.add(item.getName());
+                    countryWordData[i] = item.getName();
+                    i++;
+                }
+                RegisterFragment.getInstance().setCountryData(countryWordData, countryWordList, countryData);
+            }
+        });
+
+    }
+
+    public void loadCredentialsList() {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+        params.addParameter(Dictionary.FieldNames.type, CommonVariables.DictionaryType.CREDENTIALS);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<Dictionary> items = getList(Dictionary.class);
+                for (Dictionary item : items) {
+                    idMap.put(item.getName(), item.getId()+"");
+                    mCredentialsList.add(item.getName());
+                }
+                RegisterFragment.getInstance().setCredentialsList(mCredentialsList);
+            }
+        });
+    }
+
+    private void loadSexList() {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+        params.addParameter(Dictionary.FieldNames.type, CommonVariables.DictionaryType.SEX);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<Dictionary> items = getList(Dictionary.class);
+                for (Dictionary item : items) {
+                    idMap.put(item.getName(), item.getId()+"");
+                    mSexList.add(item.getName());
+                }
+                RegisterFragment.getInstance().setSexList(mSexList);
+            }
+        });
+
+    }
+
+    private void loadVisitPurposeList() {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+        params.addParameter(Dictionary.FieldNames.type, CommonVariables.DictionaryType.VISIT_PURPOSE);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<Dictionary> items = getList(Dictionary.class);
+                for (Dictionary item : items) {
+                    idMap.put(CommonVariables.DictionaryType.VISIT_PURPOSE+item.getName(), item.getId()+"");
+                    visitPurposeList.add(item.getName());
+                }
+                CheckInFragment.getInstance().setVisitPurposeList(visitPurposeList);
+            }
+        });
+    }
+
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/IntervieweeQueryMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/IntervieweeQueryMng.java
new file mode 100644
index 0000000..0587281
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/IntervieweeQueryMng.java
@@ -0,0 +1,37 @@
+package cn.com.basic.face.service;
+
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.util.AppApi;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+import cn.com.basic.face.discern.query.condition.IntervieweeQueryCondition;
+import cn.com.basic.face.discern.query.item.IntervieweeQueryItem;
+
+/**
+ * Created by xiuxi on 2017/3/27.
+ */
+
+public class IntervieweeQueryMng {
+
+    public static IntervieweeQueryMng instance = new IntervieweeQueryMng();
+
+    public static IntervieweeQueryMng getInstance() {
+        return instance;
+    }
+
+    public void queryInterviewee(String name, String orderBy, final boolean isClear) {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+        params.addBodyParameter(IntervieweeQueryCondition.FieldNames.companyId, "1");
+        params.addBodyParameter(IntervieweeQueryCondition.FieldNames.name, name);
+        x.http().post(params, new BaseCommonCallBack() {
+            public void success() {
+                CheckInFragment.getInstance().listChanged(getList(IntervieweeQueryItem.class), isClear);
+            }
+        });
+
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/PlaceMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/PlaceMng.java
new file mode 100644
index 0000000..e047203
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/PlaceMng.java
@@ -0,0 +1,49 @@
+package cn.com.basic.face.service;
+
+import android.widget.Toast;
+
+import cn.com.basic.face.base.BaseApplication;
+import cn.com.basic.face.util.AppApi;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import java.util.List;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+import cn.com.basic.face.discern.entity.Place;
+
+/**
+ * Created by xiuxi on 2017/3/28.
+ */
+
+public class PlaceMng {
+    public static PlaceMng instance = new PlaceMng();
+
+    public static final String authorationId = "101";
+
+    public static PlaceMng getInstance() {
+        return instance;
+    }
+
+    public void findPlace() {
+        try {
+            RequestParams params = new RequestParams(AppApi.BASEURL + AppApi.PLACE_LIST);
+            params.addBodyParameter(Place.FieldNames.authorizationId, authorationId);
+            x.http().post(params, new BaseCommonCallBack() {
+                public void success() {
+                    List<Place> places = resultBean.getListBeanOfType(Place.class);
+                    if (places.size() > 0) {
+                        BaseApplication.getInstance().setPlace(places.get(0));
+                    } else {
+                        Toast.makeText(BaseApplication.getInstance(), "鏁版嵁搴撲腑鎵句笉鍒拌璁惧", Toast.LENGTH_SHORT).show();
+                    }
+                }
+            });
+        } catch (Throwable e) {
+            e.printStackTrace();
+            Toast.makeText(BaseApplication.getInstance(), "鏁版嵁搴撲腑鎵句笉鍒拌璁惧", Toast.LENGTH_SHORT).show();
+        }
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/RegisterMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/RegisterMng.java
new file mode 100644
index 0000000..f6815a8
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/RegisterMng.java
@@ -0,0 +1,61 @@
+package cn.com.basic.face.service;
+
+import android.widget.Toast;
+
+import cn.com.basic.face.base.BaseApplication;
+import cn.com.basic.face.util.AppApi;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import java.io.File;
+import java.io.FileWriter;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+
+/**
+ * Created by xiuxi on 2017/3/23.
+ */
+
+public class RegisterMng extends BaseMng {
+
+    public static RegisterMng instance = new RegisterMng();
+
+    public static RegisterMng getInstance() {
+        return instance;
+    }
+
+    public void add(RequestParams params) {
+
+        try {
+            File path = BaseApplication.getInstance().getFilesDir();
+            File f1 = new File(path, "1.txt");
+            if (!f1.exists()) {
+                f1.createNewFile();
+            }
+            File f2 = new File(path, "2.txt");
+            if (!f2.exists()) {
+                f2.createNewFile();
+            }
+            FileWriter fw1 = new FileWriter(f1);
+            fw1.write("test1");
+            fw1.close();
+            FileWriter fw2 = new FileWriter(f2);
+            fw2.write("test2");
+            fw2.close();
+            params.setUri(AppApi.BASEURL+AppApi.REGISTER_ADD);
+            params.addBodyParameter("file1", f1);
+            params.addBodyParameter("file2", f2);
+            x.http().post(params, new BaseCommonCallBack() {
+                @Override
+                public void success() {
+                    Toast.makeText(BaseApplication.getInstance(),"娣诲姞鎴愬姛", Toast.LENGTH_SHORT).show();
+                }
+            });
+        }catch(Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorCheckInMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorCheckInMng.java
new file mode 100644
index 0000000..0774dc2
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorCheckInMng.java
@@ -0,0 +1,101 @@
+package cn.com.basic.face.service;
+
+import android.widget.Toast;
+
+import cn.com.basic.face.base.BaseApplication;
+import cn.com.basic.face.fragment.HomeFragment;
+import cn.com.basic.face.fragment.CheckInFragment;
+import cn.com.basic.face.util.AppApi;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+import cn.com.basic.face.discern.query.condition.VisitorQueryCondition;
+import cn.com.basic.face.discern.query.item.VisitorQueryItem;
+
+/**
+ * 鏉ヨ鐧昏
+ */
+
+public class VisitorCheckInMng {
+
+    public static VisitorCheckInMng instance = new VisitorCheckInMng();
+
+    public static VisitorCheckInMng getInstance() {
+        return instance;
+    }
+
+    /**
+     * 鏌ヨ鏉ヨ浜哄憳鍒楄〃
+     */
+    public void findVisitorList(String pageNum, String name, final boolean isClear) {
+        //id锛屽悕绉帮紝澶村儚璺緞锛岃仈绯荤數璇濓紝鍏徃鍚嶇О锛岃瘉浠剁紪鍙�
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.VISITOR_LIST);
+        params.addBodyParameter(VisitorQueryCondition.FieldNames.notCompanyId, BaseApplication.getInstance().getPlace().getCompanyId());
+        params.addBodyParameter(VisitorQueryCondition.FieldNames.name, name);
+        x.http().post(params, new BaseCommonCallBack() {
+            public void success() {
+                CheckInFragment.getInstance().listChanged(getList(VisitorQueryItem.class), isClear);
+            }
+        });
+    }
+
+    /**
+     * 鏌ヨ鏉ヨ浜哄憳鍒楄〃
+     */
+    public void findVisitorList() {
+        //id锛屽悕绉帮紝澶村儚璺緞锛岃仈绯荤數璇濓紝鍏徃鍚嶇О锛岃瘉浠剁紪鍙�
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.VISITOR_LIST);
+        params.addBodyParameter(VisitorQueryCondition.FieldNames.notCompanyId, BaseApplication.getInstance().getPlace().getCompanyId());
+        x.http().post(params, new BaseCommonCallBack() {
+            public void success() {
+                HomeFragment.getInstance().visitorListChanged(getList(VisitorQueryItem.class));
+            }
+        });
+    }
+
+    /**
+     * 鏌ヨ琚闂汉鍛樺垪琛�
+     */
+    public void findIntervieweeList(String pageNum, String name, final boolean isClear) {
+//        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.DICTIONARY_TYPE_LIST);
+//        params.addBodyParameter(IntervieweeQueryCondition.FieldNames.companyId, "1");
+//        params.addBodyParameter(IntervieweeQueryCondition.FieldNames.name, name);
+//        x.http().post(params, new BaseCommonCallBack() {
+//            public void success() {
+//                VisitorRegisterFragment.getInstance().listChanged(getList(IntervieweeQueryItem.class), isClear);
+//            }
+//        });
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.VISITOR_LIST);
+        params.addBodyParameter(VisitorQueryCondition.FieldNames.companyId, BaseApplication.getInstance().getPlace().getCompanyId());
+        params.addBodyParameter(VisitorQueryCondition.FieldNames.name, name);
+        x.http().post(params, new BaseCommonCallBack() {
+            public void success() {
+                CheckInFragment.getInstance().listChanged(getList(VisitorQueryItem.class), isClear);
+            }
+        });
+    }
+
+    /**
+     * 娣诲姞璁垮璁板綍
+     * @param params
+     */
+    public void add(RequestParams params) {
+
+        params.setUri(AppApi.BASEURL+AppApi.CHECK_IN_ADD);
+        x.http().post(params, new BaseCommonCallBack() {
+            @Override
+            public void success() {
+                Toast.makeText(BaseApplication.getInstance(),"娣诲姞鎴愬姛", Toast.LENGTH_SHORT).show();
+            }
+        });
+
+    }
+
+
+    /**
+     * 鏌ヨ鎷滆浜嬬敱鍒楄〃
+     */
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorQueryMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorQueryMng.java
new file mode 100644
index 0000000..d635041
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorQueryMng.java
@@ -0,0 +1,22 @@
+package cn.com.basic.face.service;
+
+/**
+ * Created by xiuxi on 2017/3/27.
+ */
+
+public class VisitorQueryMng {
+
+    private static VisitorQueryMng instance = new VisitorQueryMng();
+    public static VisitorQueryMng getInstance() {
+        return instance;
+    }
+
+    public void queryVisitor() {
+
+
+
+
+    }
+
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorTypeMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorTypeMng.java
new file mode 100644
index 0000000..937e837
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/VisitorTypeMng.java
@@ -0,0 +1,81 @@
+package cn.com.basic.face.service;
+
+import cn.com.basic.face.fragment.RegisterFragment;
+import cn.com.basic.face.util.AppApi;
+import cn.com.basic.face.util.MultipartUtility;
+
+import org.xutils.http.RequestParams;
+import org.xutils.x;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.basic.face.discern.common.BaseCommonCallBack;
+import cn.com.basic.face.discern.query.item.VistorTypeQueryItem;
+
+/**
+ * Created by xiuxi on 2017/3/22.
+ */
+
+public class VisitorTypeMng extends BaseMng {
+
+    public static VisitorTypeMng instance = new VisitorTypeMng();
+
+    public static VisitorTypeMng getInstance() {
+        return instance;
+    }
+
+    public static List<String> mVisitorTypeList = new ArrayList<String>();
+
+    public void loadAll() {
+        loadVisitorTypeList();
+    }
+
+    private void loadVisitorTypeList() {
+        RequestParams params = new RequestParams(AppApi.BASEURL+AppApi.VISITOR_TYPE_LIST);
+        x.http().get(params, new BaseCommonCallBack() {
+            public void success() {
+                List<VistorTypeQueryItem> items = getList(VistorTypeQueryItem.class);
+                mVisitorTypeList = new ArrayList<String>();
+                for (VistorTypeQueryItem item : items) {
+                    mVisitorTypeList.add(item.getLabel());
+                    idMap.put(item.getLabel(), item.getId()+"");
+                }
+                RegisterFragment.getInstance().setVisitorTypeList(mVisitorTypeList);
+            }
+
+        });
+    }
+
+    private void uploadMedia() {
+        try {
+
+            String charset = "UTF-8";
+            File uploadFile1 = new File("/sdcard/myvideo.mp4");
+            String requestURL = AppApi.BASEURL+AppApi.REGISTER_ADD;
+
+            MultipartUtility multipart = new MultipartUtility(requestURL, charset);
+
+//            multipart.addHeaderField("User-Agent", "CodeJava");
+//            multipart.addHeaderField("Test-Header", "Header-Value");
+
+            multipart.addFormField("friend_id", "Cool Pictures");
+            multipart.addFormField("userid", "Java,upload,Spring");
+
+            multipart.addFilePart("uploadedfile", uploadFile1);
+
+            List<String> response = multipart.finish();
+
+            //Log.v("rht", "SERVER REPLIED:");
+
+            for (String line : response) {
+                //Log.v("rht", "Line : "+line);
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/AppApi.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/AppApi.java
new file mode 100644
index 0000000..e2d2b53
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/AppApi.java
@@ -0,0 +1,22 @@
+package cn.com.basic.face.util;
+
+public class AppApi {
+	public final static String CHENXINGGROUND_IMAGEURL_BASE = "http://192.168.1.27:8080/ssm/img/";
+	public final static String CHENXINGARGEEMRNT = "";// 鍗忚鍓嶇紑
+	public final static String BASEURL = "http://192.168.1.27:8080/ssm/";
+
+	public final static String VISITOR_TYPE_LIST = "VisitorType/v_list.do";
+
+	public final static String DICTIONARY_TYPE_LIST = "Dictionary/v_list.do"; //鏁版嵁瀛楀吀
+
+	public static final String REGISTER_ADD = "Person/o_add.do"; //璁垮娉ㄥ唽
+
+	public static final String QUERY_INTERVIEWEE = "queryInterviewee/v_read.do";//琚浜哄垪琛�
+
+	public final static String PLACE_LIST = "Place/v_list.do"; //璁惧鍒楄〃
+
+	public final static String VISITOR_LIST = "queryVisitor/v_list.do"; //璁垮鍒楄〃
+
+	public static final String CHECK_IN_ADD = "Visit/o_add.do";	//娣诲姞璁块棶璁板綍
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/Constant.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/Constant.java
new file mode 100644
index 0000000..116b660
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/Constant.java
@@ -0,0 +1,9 @@
+package cn.com.basic.face.util;
+
+/**
+ * Created by Sinoe on 2017/2/23.
+ */
+
+public class Constant {
+    public static final int VISITOR_TO = 1,VISITOR_FROM = 2;
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/CountryPresenter.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/CountryPresenter.java
new file mode 100644
index 0000000..f442ef8
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/CountryPresenter.java
@@ -0,0 +1,90 @@
+package cn.com.basic.face.util;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+
+import cn.com.basic.face.model.CountryModel;
+import cn.com.basic.face.model.CountrysModel;
+
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class CountryPresenter {
+
+    protected String mCurrentCountrysWord;
+    protected String mCurrentCountryName;
+    protected String[] mCountryWordDatas;
+    protected Map<String, String[]> mCountryDatasMap = new HashMap<>();
+
+    private Context mContext;
+
+    public CountryPresenter(Context mContext) {
+        this.mContext = mContext;
+        initCountrys();
+    }
+
+    private void initCountrys() {
+        List<CountrysModel> countrysModelList = null;
+        AssetManager asset = mContext.getAssets();
+        try {
+            InputStream input = asset.open("countrys.xml");
+            SAXParserFactory spf = SAXParserFactory.newInstance();
+            SAXParser parser = spf.newSAXParser();
+            XmlParserHandler handler = new XmlParserHandler();
+            parser.parse(input, handler);
+            input.close();
+            countrysModelList = handler.getDataList();
+            if (countrysModelList != null && !countrysModelList.isEmpty()) {
+                mCurrentCountrysWord = countrysModelList.get(0).getName();
+                List<CountryModel> countryList = countrysModelList.get(0).getCountryModelList();
+                if (countryList != null && !countryList.isEmpty()) {
+                    mCurrentCountryName = countryList.get(0).getName();
+                }
+            }
+            mCountryWordDatas = new String[countrysModelList.size()];
+            for (int i = 0; i < countrysModelList.size(); i++) {
+                mCountryWordDatas[i] = countrysModelList.get(i).getName();
+                List<CountryModel> countryModelList = countrysModelList.get(i).getCountryModelList();
+                String[] CountryNames = new String[countryModelList.size()];
+                for (int j = 0; j < countryModelList.size(); j++) {
+                    CountryNames[j] = countryModelList.get(j).getName();
+                }
+                mCountryDatasMap.put(countrysModelList.get(i).getName(), CountryNames);
+            }
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public String[] getCountryWordData() {
+        if (mCountryWordDatas == null) {
+            initCountrys();
+        }
+        return mCountryWordDatas;
+    }
+    public HashMap<String, List<String>> getCountryData() {
+        HashMap<String, List<String>> cityDataMap = new HashMap<>();
+        if (mCountryDatasMap == null) {
+            initCountrys();
+        }
+        for (int i = 0; i < mCountryDatasMap.size(); i++) {
+            String[] cities = mCountryDatasMap.get(mCountryWordDatas[i]);
+            if (cities == null) {
+                cities = new String[]{""};
+            }
+            cityDataMap.put(mCountryWordDatas[i], Arrays.asList(cities));
+        }
+        return cityDataMap;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/GetNetResultJson.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/GetNetResultJson.java
new file mode 100644
index 0000000..bb3ffe9
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/GetNetResultJson.java
@@ -0,0 +1,53 @@
+package cn.com.basic.face.util;
+
+
+import com.lzy.okhttputils.OkHttpUtils;
+import com.lzy.okhttputils.callback.FileCallback;
+import com.lzy.okhttputils.callback.StringCallback;
+
+import java.io.File;
+
+import okhttp3.Call;
+import okhttp3.Response;
+
+/**
+ * Created by Sinoe on 2017/3/6.
+ */
+
+public class GetNetResultJson {
+    public String getResultJson(String url){
+        OkHttpUtils.post(url)
+                .tag(this)
+                .params("","")
+                .execute(new StringCallback() {
+                    @Override
+                    public void onSuccess(String s, Call call, Response response) {
+
+                    }
+                });
+        OkHttpUtils.post(url)
+                .tag(this)
+                .params("","")
+                .execute(new FileCallback() {
+                    @Override
+                    public void onSuccess(File file, Call call, Response response) {
+
+                    }
+                });
+        return null;
+    }
+
+    public static String post(String url){
+        String fullUrl = UrlUtil.BaseUrl+url;
+        OkHttpUtils.post(fullUrl)
+                .params("","")
+                .execute(new StringCallback() {
+                    @Override
+                    public void onSuccess(String s, Call call, Response response) {
+
+                    }
+                });
+        return null;
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/JsonPares.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/JsonPares.java
new file mode 100644
index 0000000..82e869b
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/JsonPares.java
@@ -0,0 +1,27 @@
+package cn.com.basic.face.util;
+
+import cn.com.basic.face.model.ResultMsg;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Created by Sinoe on 2017/3/6.
+ */
+
+public class JsonPares {
+    //鍩虹瑙f瀽
+    public static ResultMsg getResultMsg(String json) {
+        ResultMsg msg = new ResultMsg();
+        try {
+            JSONObject object = new JSONObject(json);
+            msg.setCode(object.getInt("code"));
+            msg.setInfo(object.getString("info"));
+            msg.setMessage(object.getString("message"));
+            msg.setTime(object.getLong("time"));
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return msg;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/MultipartUtility.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/MultipartUtility.java
new file mode 100644
index 0000000..33ffff1
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/MultipartUtility.java
@@ -0,0 +1,157 @@
+package cn.com.basic.face.util;
+
+import java.util.List;
+
+import java.io.BufferedReader;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+
+/**
+ * This utility class provides an abstraction layer for sending multipart HTTP
+ * POST requests to a web server.
+ *
+ * @author www.codejava.net
+ */
+public class MultipartUtility {
+    private final String boundary;
+    private static final String LINE_FEED = "\r\n";
+    private HttpURLConnection httpConn;
+    private String charset;
+    private OutputStream outputStream;
+    private PrintWriter writer;
+
+    /**
+     * This constructor initializes a new HTTP POST request with content type
+     * is set to multipart/form-data
+     *
+     * @param requestURL
+     * @param charset
+     * @throws IOException
+     */
+    public MultipartUtility(String requestURL, String charset)
+            throws IOException {
+        this.charset = charset;
+
+        // creates a unique boundary based on time stamp
+        boundary = "===" + System.currentTimeMillis() + "===";
+
+        URL url = new URL(requestURL);
+        httpConn = (HttpURLConnection) url.openConnection();
+        httpConn.setUseCaches(false);
+        httpConn.setDoOutput(true); // indicates POST method
+        httpConn.setDoInput(true);
+        httpConn.setRequestProperty("Content-Type",
+                "multipart/form-data; boundary=" + boundary);
+        httpConn.setRequestProperty("User-Agent", "CodeJava Agent");
+        httpConn.setRequestProperty("Test", "Bonjour");
+        outputStream = httpConn.getOutputStream();
+        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
+                true);
+    }
+
+    /**
+     * Adds a form field to the request
+     *
+     * @param name  field name
+     * @param value field value
+     */
+    public void addFormField(String name, String value) {
+        writer.append("--" + boundary).append(LINE_FEED);
+        writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
+                .append(LINE_FEED);
+        writer.append("Content-Type: text/plain; charset=" + charset).append(
+                LINE_FEED);
+        writer.append(LINE_FEED);
+        writer.append(value).append(LINE_FEED);
+        writer.flush();
+    }
+
+    /**
+     * Adds a upload file section to the request
+     *
+     * @param fieldName  name attribute in <input type="file" name="..." />
+     * @param uploadFile a File to be uploaded
+     * @throws IOException
+     */
+    public void addFilePart(String fieldName, File uploadFile)
+            throws IOException {
+        String fileName = uploadFile.getName();
+        writer.append("--" + boundary).append(LINE_FEED);
+        writer.append(
+                "Content-Disposition: form-data; name=\"" + fieldName
+                        + "\"; filename=\"" + fileName + "\"")
+                .append(LINE_FEED);
+        writer.append(
+                "Content-Type: "
+                        + URLConnection.guessContentTypeFromName(fileName))
+                .append(LINE_FEED);
+        writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
+        writer.append(LINE_FEED);
+        writer.flush();
+
+        FileInputStream inputStream = new FileInputStream(uploadFile);
+        byte[] buffer = new byte[4096];
+        int bytesRead = -1;
+        while ((bytesRead = inputStream.read(buffer)) != -1) {
+            outputStream.write(buffer, 0, bytesRead);
+        }
+        outputStream.flush();
+        inputStream.close();
+
+        writer.append(LINE_FEED);
+        writer.flush();
+    }
+
+    /**
+     * Adds a header field to the request.
+     *
+     * @param name  - name of the header field
+     * @param value - value of the header field
+     */
+    public void addHeaderField(String name, String value) {
+        writer.append(name + ": " + value).append(LINE_FEED);
+        writer.flush();
+    }
+
+    /**
+     * Completes the request and receives response from the server.
+     *
+     * @return a list of Strings as response in case the server returned
+     * status OK, otherwise an exception is thrown.
+     * @throws IOException
+     */
+    public List<String> finish() throws IOException {
+        List<String> response = new ArrayList<String>();
+
+        writer.append(LINE_FEED).flush();
+        writer.append("--" + boundary + "--").append(LINE_FEED);
+        writer.close();
+
+        // checks server's status code first
+        int status = httpConn.getResponseCode();
+        if (status == HttpURLConnection.HTTP_OK) {
+            BufferedReader reader = new BufferedReader(new InputStreamReader(
+                    httpConn.getInputStream()));
+            String line = null;
+            while ((line = reader.readLine()) != null) {
+                response.add(line);
+            }
+            reader.close();
+            httpConn.disconnect();
+        } else {
+            throw new IOException("Server returned non-OK status: " + status);
+        }
+
+        return response;
+    }
+}
\ No newline at end of file
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java
new file mode 100644
index 0000000..0746e56
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java
@@ -0,0 +1,33 @@
+package cn.com.basic.face.util;
+
+import android.view.Surface;
+
+/**
+ * Created by xiuxi on 2017/3/21.
+ */
+
+public class RtspFaceNative {
+
+//    public static native void init();
+//    public static native void setSurface(int cameraIdx, Surface surface);
+//    public static native boolean createPlayer(int cameraIdx, String uri);
+//    public static native void shutdown(int cameraIdx);
+//    // typedef void (* Java_com_example_nativecodec_NativeCodec_FaceCallback_func)(int cameraIdx, int count);
+//    public static native boolean setFaceCallback(int cameraIdx, String func);
+//    public static native void lockFace(int cameraIdx);
+//    public static native void releaseFace(int cameraIdx);
+//    public static native boolean getFaceList(int cameraIdx, byte[] faceListPb);
+//    public static native boolean getFaceImages(int cameraIdx, byte[] faceImagesIdx, byte[] faceImages);
+
+    public static void init() {};
+    public static  void setSurface(int cameraIdx, Surface surface){};
+    public static  boolean createPlayer(int cameraIdx, String uri){return true;};
+    public static  void shutdown(int cameraIdx){};
+    // typedef void (* Java_com_example_nativecodec_NativeCodec_FaceCallback_func)(int cameraIdx, int count);
+    public static  boolean setFaceCallback(int cameraIdx, String func){return true;};
+    public static  void lockFace(int cameraIdx){};
+    public static  void releaseFace(int cameraIdx){};
+    public static  boolean getFaceList(int cameraIdx, byte[] faceListPb){return true;};//浜岃繘鍒�
+    public static  boolean getFaceImages(int cameraIdx, byte[] faceImagesIdx, byte[] faceImages){return true;};//鍥剧墖
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/StreamUtils.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/StreamUtils.java
new file mode 100644
index 0000000..ff9c775
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/StreamUtils.java
@@ -0,0 +1,45 @@
+package cn.com.basic.face.util;
+
+import android.content.Context;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class StreamUtils {
+
+    public static String get(Context context, int id) {
+        InputStream stream = context.getResources().openRawResource(id);
+        return read(stream);
+    }
+
+    public static String read(InputStream stream) {
+        return read(stream, "utf-8");
+    }
+
+    public static String read(InputStream is, String encode) {
+        if (is != null) {
+            try {
+                BufferedReader reader = new BufferedReader(new InputStreamReader(is, encode));
+                StringBuilder sb = new StringBuilder();
+                String line = null;
+                while ((line = reader.readLine()) != null) {
+                    sb.append(line + "\n");
+                }
+                is.close();
+                return sb.toString();
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return "";
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/TabNameUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/TabNameUtil.java
new file mode 100644
index 0000000..895b437
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/TabNameUtil.java
@@ -0,0 +1,26 @@
+package cn.com.basic.face.util;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public class TabNameUtil {
+    private static String tabName0 = "瀹炴椂鐩戞帶";
+    private static String tabName1 = "浜哄憳娉ㄥ唽";
+    private static String tabName2 = "鏉ヨ鐧昏";
+    private static String tabName3 = "鐢佃瘽鍛煎彨";
+    private static String tabName4= "璁垮绠$悊";
+    private static String tabName5 = "鑰冨嫟璁板綍";
+    private static String tabName6 = "璁惧绠$悊";
+    public static String[] tabNames = {tabName0, tabName1, tabName2, tabName3, tabName4, tabName5, tabName6};
+    private static int drawable1 = R.drawable.tab_main_0;
+    private static int drawable2 =R.drawable.tab_main_1;
+    private static int drawable3 = R.drawable.tab_main_2;
+    private static int drawable4 = R.drawable.tab_main_3;
+    private static int drawable5 = R.drawable.tab_main_4;
+    private static int drawable6 = R.drawable.tab_main_5;
+    private static int drawable7 = R.drawable.tab_main_6;
+    public static int[] tabIcons = {drawable1, drawable2, drawable3, drawable4, drawable5, drawable6, drawable7};
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UrlUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UrlUtil.java
new file mode 100644
index 0000000..9bc1fd3
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UrlUtil.java
@@ -0,0 +1,9 @@
+package cn.com.basic.face.util;
+
+/**
+ * Created by Sinoe on 2017/3/6.
+ */
+
+public class UrlUtil {
+    public static String BaseUrl = "http://192.168.1.102:8080/ssm";
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/WindowsUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/WindowsUtil.java
new file mode 100644
index 0000000..953b9c8
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/WindowsUtil.java
@@ -0,0 +1,26 @@
+package cn.com.basic.face.util;
+
+import android.content.Context;
+
+/**
+ * Created by zhangbo on 2017/2/15.
+ */
+
+public class WindowsUtil {
+
+    /**
+     * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� dp 鐨勫崟浣� 杞垚涓� px(鍍忕礌)
+     */
+    public static int dip2px(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+
+    /**
+     * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� px(鍍忕礌) 鐨勫崟浣� 杞垚涓� dp
+     */
+    public static int px2dip(Context context, float pxValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (pxValue / scale + 0.5f);
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/XmlParserHandler.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/XmlParserHandler.java
new file mode 100644
index 0000000..79950e7
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/XmlParserHandler.java
@@ -0,0 +1,58 @@
+package cn.com.basic.face.util;
+
+import cn.com.basic.face.model.CountryModel;
+import cn.com.basic.face.model.CountrysModel;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class XmlParserHandler extends DefaultHandler {
+    private List<CountrysModel> countrysModelList = new ArrayList<>();
+
+    public XmlParserHandler() {
+
+    }
+    public List<CountrysModel> getDataList() {
+        return countrysModelList;
+    }
+    @Override
+    public void startDocument() throws SAXException {
+    }
+    CountrysModel countrysModel = new CountrysModel();
+    CountryModel countryModel = new CountryModel();
+
+    @Override
+    public void startElement(String uri, String localName, String qName,
+                             Attributes attributes) throws SAXException {
+        if (qName.equals("word")) {
+            countrysModel = new CountrysModel();
+            countrysModel.setName(attributes.getValue(0));
+            countrysModel.setCountryModelList(new ArrayList<CountryModel>());
+        } else if (qName.equals("country")) {
+            countryModel = new CountryModel();
+            countryModel.setName(attributes.getValue(0));
+        }
+    }
+    @Override
+    public void endElement(String uri, String localName, String qName)
+            throws SAXException {
+        if (qName.equals("country")) {
+            countrysModel.getCountryModelList().add(countryModel);
+        } else if (qName.equals("word")) {
+            countrysModelList.add(countrysModel);
+        }
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length)
+            throws SAXException {
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/BirthdayPickerDialog.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/BirthdayPickerDialog.java
new file mode 100644
index 0000000..759e3ee
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/BirthdayPickerDialog.java
@@ -0,0 +1,123 @@
+package cn.com.basic.face.widget;
+
+import android.app.AlertDialog;
+import android.app.DatePickerDialog;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.DatePicker;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class BirthdayPickerDialog  extends AlertDialog implements
+        DatePicker.OnDateChangedListener{
+
+
+    private static final String YEAR = "year";
+    private static final String MONTH = "month";
+    private static final String DAY = "day";
+
+    private final DatePicker mDatePicker;
+    private final OnDateSetListener mDateSetListener;
+    private final Calendar mCalendar;
+
+    private boolean mTitleNeedsUpdate = true;
+
+    private View view;
+    public BirthdayPickerDialog(Context context, int theme, OnDateSetListener listener, Date date) {
+        super(context,theme);
+        mDateSetListener = listener;
+        mCalendar = Calendar.getInstance(Locale.CHINA);
+        mCalendar.setTime(date);
+        Context themeContext = getContext();
+        LayoutInflater inflater = LayoutInflater.from(themeContext);
+        view = inflater.inflate(R.layout.dialog_date_picker, null);
+        view.setBackgroundColor(Color.WHITE);
+        //setView(view);
+
+
+//        setButton(BUTTON_POSITIVE, themeContext.getString(R.string.ok), this);
+//        setButton(BUTTON_NEGATIVE, themeContext.getString(R.string.cancel), this);
+//        setButtonPanelLayoutHint(LAYOUT_HINT_SIDE);
+
+        mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);
+        mDatePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
+        //  mDatePicker.setValidationCallback(mValidationCallback);
+        //瀹炵幇鑷繁鐨勬爣棰樺拰ok鎸夐挳
+        //setTitle("閫夋嫨鏃ユ湡:");
+        setButton();
+    }
+
+    @Override
+    public void onDateChanged(DatePicker datePicker, int year, int month, int day) {
+        mDatePicker.init(year, month, day, this);
+    }
+
+
+    /**
+     * The callback used to indicate the user is done filling in the date.
+     */
+    public interface OnDateSetListener {
+
+        /**
+         * @param view The view associated with this listener.
+         * @param year The year that was set.
+         * @param monthOfYear The month that was set (0-11) for compatibility
+         *  with {@link java.util.Calendar}.
+         * @param dayOfMonth The day of the month that was set.
+         */
+        void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);
+    }
+
+    private void setButton() {
+        //鑾峰彇鑷繁瀹氫箟鐨勫搷搴旀寜閽苟璁剧疆鐩戝惉锛岀洿鎺ヨ皟鐢ㄦ瀯閫犳椂浼犺繘鏉ョ殑CallBack鎺ュ彛锛堜负浜嗙渷鍔诧紝娌℃湁鑷繁鍐欐帴鍙o紝鐩存帴鐢ㄤ箣鍓嶆湰绫诲畾涔夊ソ鐨勶級鍚屾椂鍏抽棴瀵硅瘽妗嗐��
+        view.findViewById(R.id.date_picker_ok).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (mDateSetListener != null) {
+                            // Clearing focus forces the dialog to commit any pending
+                            // changes, e.g. typed text in a NumberPicker.
+                            mDatePicker.clearFocus();
+                            mDateSetListener.onDateSet(mDatePicker, mDatePicker.getYear(),
+                                    mDatePicker.getMonth(), mDatePicker.getDayOfMonth());
+                            cancel();
+                        }
+                    }
+                });
+        view.findViewById(R.id.date_picker_cancle).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        cancel();
+                    }
+                });
+    }
+
+    public void myShow() {
+        //鑷繁瀹炵幇show鏂规硶锛屼富瑕佹槸涓轰簡鎶妔etContentView鏂规硶鏀惧埌show鏂规硶鍚庨潰锛屽惁鍒欎細鎶ラ敊銆�
+        show();
+        setContentView(view);
+    }
+    @NonNull
+    @Override
+    public Bundle onSaveInstanceState() {
+        return super.onSaveInstanceState();
+    }
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState) {
+        super.onRestoreInstanceState(savedInstanceState);
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/CountrySelectionPopup.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/CountrySelectionPopup.java
new file mode 100644
index 0000000..9b48d92
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/CountrySelectionPopup.java
@@ -0,0 +1,155 @@
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.support.v7.widget.AppCompatTextView;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.MyWheelAdapter;
+
+import cn.com.basic.face.listeners.OkButtonClickedListener;
+import cn.com.basic.face.util.CountryPresenter;
+
+import com.wx.wheelview.widget.WheelView;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Created by Sinoe on 2017/2/28.
+ */
+
+public class CountrySelectionPopup extends PopupWindow implements View.OnClickListener, WheelView.OnWheelItemSelectedListener {
+    private Context mContext;
+    private View view;
+    private TextView mTvConfirm, mTvCancel;
+    private WheelView mWheelViewTitle, mWheelViewName;
+    private HashMap<String, List<String>> countryData;
+    private List<String> countryWordList;
+    private List<String> countryList;
+    private CountryPresenter countryPresenter;
+
+    public CountrySelectionPopup(Context context, String[] countryWordData, List<String> countryWordList, HashMap<String, List<String>> countryData) {
+
+        this.mContext = context;
+        countryPresenter = new CountryPresenter(context);
+        view = LayoutInflater.from(context).inflate(R.layout.pop_country, null);
+        mWheelViewTitle = (WheelView) view.findViewById(R.id.pop_country_title);
+        mWheelViewTitle.setOnWheelItemSelectedListener(this);
+        mWheelViewName = (WheelView) view.findViewById(R.id.pop_country_name);
+        mWheelViewName.setOnWheelItemSelectedListener(this);
+        mTvCancel = (TextView) view.findViewById(R.id.pop_country_cancel);
+        mTvConfirm = (TextView) view.findViewById(R.id.pop_country_confirm);
+        mTvCancel.setOnClickListener(this);
+        mTvConfirm.setOnClickListener(this);
+
+        //String[] countryWordData = DictionaryMng.countryWordData;
+        this.countryWordList = countryWordList;//DictionaryMng.countryWordList;
+        this.countryData = countryData;//DictionaryMng.countryData;
+
+        countryList = countryData.get(countryWordList.get(mWheelViewTitle.getSelection()));
+
+        mWheelViewTitle.setWheelAdapter(new MyWheelAdapter(context));
+        mWheelViewTitle.setSkin(WheelView.Skin.Holo);
+        mWheelViewTitle.setWheelSize(5);
+        mWheelViewTitle.setBackgroundResource(R.color.colorBackground);
+        mWheelViewName.setWheelAdapter(new MyWheelAdapter(context));
+        mWheelViewName.setSkin(WheelView.Skin.Holo);
+        mWheelViewName.setWheelSize(5);
+        mWheelViewName.setBackgroundResource(R.color.colorBackground);
+        WheelView.WheelViewStyle style = new WheelView.WheelViewStyle();
+        style.selectedTextColor = Color.parseColor("#11c3e3");
+        style.textColor = Color.parseColor("#bcc6cf");
+        style.selectedTextSize = 22;
+        style.textSize = 16;
+        style.holoBorderColor = Color.parseColor("#11c3e3");
+        mWheelViewTitle.setStyle(style);
+        mWheelViewName.setStyle(style);
+        initData();
+        //澶栭儴鍙偣鍑�
+        setOutsideTouchable(true);
+
+        view.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View view, MotionEvent motionEvent) {
+                View popLayout = view.findViewById(R.id.pop_single_ll);
+                int top = popLayout.getTop();
+                int bottom = popLayout.getBottom();
+                int left = popLayout.getLeft();
+                int right = popLayout.getRight();
+                int y = (int) motionEvent.getY();
+                int x = (int) motionEvent.getX();
+                if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
+                    if (y < top || y > bottom) {
+                        dismiss();
+                    }
+                    if (x < left || x > right) {
+                        dismiss();
+                    }
+
+                }
+                return true;
+            }
+        });
+
+        /*
+             璁剧疆绐楀彛鐗瑰緛
+         */
+        //璁剧疆瑙嗗浘
+        this.setContentView(this.view);
+        //璁剧疆绐楀彛瀹介珮
+        this.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT);
+        this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT);
+        //璁剧疆寮瑰嚭绐楀彛鍙偣鍑�
+        this.setFocusable(true);
+        //瀹炰緥鍖朇olor
+        ColorDrawable colorDrawable = new ColorDrawable(0x7f000000);
+        this.setBackgroundDrawable(colorDrawable);
+        this.setAnimationStyle(R.style.PopupAnimation);
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (view instanceof AppCompatTextView) {
+            if (((AppCompatTextView) view).getText().equals("纭")) {
+                for (OkButtonClickedListener okButtonClickedListener : okButtonClickedListeners) {
+                    if (mWheelViewTitle.getCurrentPosition() >= 0) {
+                        countryList = countryData.get(countryWordList.get(mWheelViewTitle.getCurrentPosition()));
+                        okButtonClickedListener.onItemSelected(0, null, countryList.get(mWheelViewName.getCurrentPosition()));
+                    }
+                }
+                dismiss();
+            }
+            if (((AppCompatTextView) view).getText().equals("鍙栨秷")) {
+                dismiss();
+            }
+        }
+    }
+
+    @Override
+    public void onItemSelected(int position, Object o) {
+        countryList = countryData.get(countryWordList.get(mWheelViewTitle.getCurrentPosition()));
+    }
+
+    private void initData() {
+        mWheelViewTitle.setWheelData(countryWordList);
+        mWheelViewTitle.join(mWheelViewName);
+        mWheelViewTitle.joinDatas(countryData);
+        mWheelViewName.setWheelData(countryList);
+    }
+
+    private List<OkButtonClickedListener> okButtonClickedListeners = new ArrayList<OkButtonClickedListener>();
+
+    public void addOkButtonClickedListener(OkButtonClickedListener okButtonClickedListener) {
+        this.okButtonClickedListeners.add(okButtonClickedListener);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/InfoTextView.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/InfoTextView.java
new file mode 100644
index 0000000..d8b31ce
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/InfoTextView.java
@@ -0,0 +1,110 @@
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+/**
+ * Created by Sinoe on 2017/2/22.
+ */
+
+public class InfoTextView extends LinearLayout{
+
+
+    private Context mContext;
+    private TextView mLeftTextView,mRightTextView;
+    private String mLeftTextString,mRightTextString;
+    private int mBetweenMargin,mLeftTextSize,mRightTextSize,mLeftTextColor,mRightTextColor,mBackgroundColor;
+    private int mDefaultMargin = 0;
+    private int mDefaultTextSize = 0;
+    private int mDefaultTextColor = 0xff515b64;
+    private int mDefaultBackgroundColor = 0xffffffff;
+    private LayoutParams mLeftLayoutParams,mRightLayoutParams;
+    public InfoTextView(Context context) {
+        super(context);
+    }
+
+    public InfoTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        getAttr(attrs);
+        initLayout();
+    }
+
+
+    /**
+     * 鍒濆鍖栧竷灞�
+     */
+    private void initLayout(){
+        this.setBackgroundColor(mBackgroundColor);
+        this.setOrientation(HORIZONTAL);
+        initLeftText();
+        initRightText();
+    }
+
+    /**
+     * 鑾峰彇瀹氫箟灞炴�у��
+     * @param attrs
+     */
+    private void getAttr(AttributeSet attrs){
+        TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.VisitorView);
+        mLeftTextString = typedArray.getString(R.styleable.VisitorView_vLeftTextString);
+        mRightTextString = typedArray.getString(R.styleable.VisitorView_vRightTextString);
+        mBetweenMargin = typedArray.getDimensionPixelSize(R.styleable.VisitorView_vBetweenMargin,mDefaultMargin);
+        mLeftTextSize = typedArray.getDimensionPixelSize(R.styleable.VisitorView_vLeftTextSize,mDefaultTextSize);
+        mRightTextSize = typedArray.getDimensionPixelSize(R.styleable.VisitorView_vRightTextSize,mDefaultTextSize);
+        mLeftTextColor = typedArray.getColor(R.styleable.VisitorView_vLeftTextColor,mDefaultTextColor);
+        mRightTextColor = typedArray.getColor(R.styleable.VisitorView_vRightTextColor,mDefaultTextColor);
+        mBackgroundColor = typedArray.getColor(R.styleable.VisitorView_vBackgroundColor,mDefaultBackgroundColor);
+        typedArray.recycle();
+    }
+
+    /**
+     * 鍒濆鍖栧乏杈规枃瀛�
+     */
+    private void initLeftText(){
+        mLeftTextView = new TextView(mContext);
+        mLeftLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        mLeftTextView.setLayoutParams(mLeftLayoutParams);
+        mLeftTextView.setText(mLeftTextString);
+        setTextColor(mLeftTextView,mLeftTextColor);
+        setTextSize(mLeftTextView,mLeftTextSize);
+        addView(mLeftTextView);
+    }
+
+    /**
+     * 鍒濆鍖栧彸杈规枃瀛�
+     */
+    private void initRightText(){
+        mRightTextView = new TextView(mContext);
+        mRightLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        mRightTextView.setLayoutParams(mRightLayoutParams);
+        mRightTextView.setText(mRightTextString);
+        setTextColor(mRightTextView,mRightTextColor);
+        setTextSize(mRightTextView,mRightTextSize);
+        addView(mRightTextView);
+    }
+
+
+    /**
+     * 璁剧疆瀛椾綋棰滆壊
+     * @param textView  textview瀵硅薄
+     * @param color 鏂囧瓧棰滆壊
+     */
+    private void setTextColor(TextView textView,int color){
+        textView.setTextColor(color);
+    }
+
+    /**
+     * 璁剧疆瀛椾綋澶у皬
+     * @param textView  textview瀵硅薄
+     * @param size  鏂囧瓧澶у皬
+     */
+    private void setTextSize(TextView textView,int size){
+        textView.setTextSize(size);
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/MyGLSurfaceView.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/MyGLSurfaceView.java
new file mode 100644
index 0000000..ac1d913
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/MyGLSurfaceView.java
@@ -0,0 +1,356 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView;
+import android.opengl.Matrix;
+import android.os.SystemClock;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+public class MyGLSurfaceView extends GLSurfaceView {
+
+    MyRenderer mRenderer;
+
+    public MyGLSurfaceView(Context context) {
+        this(context, null);
+    }
+
+    public MyGLSurfaceView(Context context, AttributeSet attributeSet) {
+        super(context, attributeSet);
+        init();
+    }
+
+    private void init() {
+        setEGLContextClientVersion(2);
+        mRenderer = new MyRenderer();
+        setRenderer(mRenderer);
+        Log.i("@@@", "setrenderer");
+    }
+
+    @Override
+    public void onPause() {
+        mRenderer.onPause();
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mRenderer.onResume();
+    }
+
+    public SurfaceTexture getSurfaceTexture() {
+        return mRenderer.getSurfaceTexture();
+    }
+}
+
+class MyRenderer implements GLSurfaceView.Renderer, SurfaceTexture.OnFrameAvailableListener {
+
+    public MyRenderer() {
+        mVertices = ByteBuffer.allocateDirect(mVerticesData.length
+                * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer();
+        mVertices.put(mVerticesData).position(0);
+
+        Matrix.setIdentityM(mSTMatrix, 0);
+    }
+    public void onPause() {
+    }
+
+    public void onResume() {
+        mLastTime = SystemClock.elapsedRealtimeNanos();
+    }
+
+    @Override
+    public void onDrawFrame(GL10 glUnused) {
+        synchronized(this) {
+            if (updateSurface) {
+                mSurface.updateTexImage();
+
+                mSurface.getTransformMatrix(mSTMatrix);
+                updateSurface = false;
+            }
+        }
+
+
+//        Logger.e("onDrawFrame");
+        // Ignore the passed-in GL10 interface, and use the GLES20
+        // class's static methods instead.
+        GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
+        GLES20.glUseProgram(mProgram);
+        checkGlError("glUseProgram");
+
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
+        GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);
+
+        mVertices.position(VERTICES_DATA_POS_OFFSET);
+        GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
+                VERTICES_DATA_STRIDE_BYTES, mVertices);
+        checkGlError("glVertexAttribPointer maPosition");
+        GLES20.glEnableVertexAttribArray(maPositionHandle);
+        checkGlError("glEnableVertexAttribArray maPositionHandle");
+
+        mVertices.position(VERTICES_DATA_UV_OFFSET);
+        GLES20.glVertexAttribPointer(maTextureHandle, 3, GLES20.GL_FLOAT, false,
+                VERTICES_DATA_STRIDE_BYTES, mVertices);
+        checkGlError("glVertexAttribPointer maTextureHandle");
+        GLES20.glEnableVertexAttribArray(maTextureHandle);
+        checkGlError("glEnableVertexAttribArray maTextureHandle");
+
+//        long now = SystemClock.elapsedRealtimeNanos();
+//        mRunTime += (now - mLastTime);
+//        mLastTime = now;
+//        double d = ((double)mRunTime) / 1000000000;
+        Matrix.setIdentityM(mMMatrix, 0);
+//        Matrix.rotateM(mMMatrix, 0, 30, (float)Math.sin(d), (float)Math.cos(d), 0);  //鍔ㄦ�佺煩闃�
+//        Matrix.rotateM(mMMatrix, 0, 0, 0, 0, 0);
+        //Matrix.rotateM(mMMatrix, 0, 0, 0.5f, 0.5f,0);
+        Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
+        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
+
+        GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+        GLES20.glUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);
+
+        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+        checkGlError("glDrawArrays");
+    }
+
+    @Override
+    public void onSurfaceChanged(GL10 glUnused, int width, int height) {
+        // Ignore the passed-in GL10 interface, and use the GLES20
+        // class's static methods instead.
+        GLES20.glViewport(0, 0, width, height);
+        mRatio = (float) width / height;
+        Matrix.frustumM(mProjMatrix, 0, -mRatio, mRatio, -1, 1, 2, 7);
+    }
+
+    @Override
+    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
+        // Ignore the passed-in GL10 interface, and use the GLES20
+        // class's static methods instead.
+
+        /* Set up alpha blending and an Android background color */
+        GLES20.glEnable(GLES20.GL_BLEND);
+        GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
+        GLES20.glClearColor(0.643f, 0.776f, 0.223f, 1.0f);
+
+        /* Set up shaders and handles to their variables */
+        mProgram = createProgram(mVertexShader, mFragmentShader);
+        if (mProgram == 0) {
+            return;
+        }
+        maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
+        checkGlError("glGetAttribLocation aPosition");
+        if (maPositionHandle == -1) {
+            throw new RuntimeException("Could not get attrib location for aPosition");
+        }
+        maTextureHandle = GLES20.glGetAttribLocation(mProgram, "aTextureCoord");
+        checkGlError("glGetAttribLocation aTextureCoord");
+        if (maTextureHandle == -1) {
+            throw new RuntimeException("Could not get attrib location for aTextureCoord");
+        }
+
+        muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+        checkGlError("glGetUniformLocation uMVPMatrix");
+        if (muMVPMatrixHandle == -1) {
+            throw new RuntimeException("Could not get attrib location for uMVPMatrix");
+        }
+
+        muSTMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uSTMatrix");
+        checkGlError("glGetUniformLocation uSTMatrix");
+        if (muSTMatrixHandle == -1) {
+            throw new RuntimeException("Could not get attrib location for uSTMatrix");
+        }
+
+        /*
+         * Create our texture. This has to be done each time the
+         * surface is created.
+         */
+
+        int[] textures = new int[1];
+        GLES20.glGenTextures(1, textures, 0);
+
+        mTextureID = textures[0];
+        GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);
+        checkGlError("glBindTexture mTextureID");
+
+        // Can't do mipmapping with camera source
+        GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER,
+                GLES20.GL_NEAREST);
+        GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER,
+                GLES20.GL_LINEAR);
+        // Clamp to edge is the only option
+        GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S,
+                GLES20.GL_CLAMP_TO_EDGE);
+        GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T,
+                GLES20.GL_CLAMP_TO_EDGE);
+        checkGlError("glTexParameteri mTextureID");
+
+        /*
+         * Create the SurfaceTexture that will feed this textureID, and pass it to the camera
+         */
+
+        mSurface = new SurfaceTexture(mTextureID);
+        mSurface.setOnFrameAvailableListener(this);
+
+        Matrix.setLookAtM(mVMatrix, 0,
+                0, 0, 2f,
+                0f, 0f, 0f,
+                0f, 1.0f, 0.0f);
+
+        synchronized(this) {
+            updateSurface = false;
+        }
+    }
+
+    @Override
+    synchronized public void onFrameAvailable(SurfaceTexture surface) {
+        /* For simplicity, SurfaceTexture calls here when it has new
+         * data available.  Call may come in from some random thread,
+         * so let's be safe and use synchronize. No OpenGL calls can be done here.
+         */
+        updateSurface = true;
+        //Log.v(TAG, "onFrameAvailable " + surface.getTimestamp());
+    }
+
+    private int loadShader(int shaderType, String source) {
+        int shader = GLES20.glCreateShader(shaderType);
+        if (shader != 0) {
+            GLES20.glShaderSource(shader, source);
+            GLES20.glCompileShader(shader);
+            int[] compiled = new int[1];
+            GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
+            if (compiled[0] == 0) {
+                Log.e(TAG, "Could not compile shader " + shaderType + ":");
+                Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
+                GLES20.glDeleteShader(shader);
+                shader = 0;
+            }
+        }
+        return shader;
+    }
+
+    private int createProgram(String vertexSource, String fragmentSource) {
+        int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
+        if (vertexShader == 0) {
+            return 0;
+        }
+        int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);
+        if (pixelShader == 0) {
+            return 0;
+        }
+
+        int program = GLES20.glCreateProgram();
+        if (program != 0) {
+            GLES20.glAttachShader(program, vertexShader);
+            checkGlError("glAttachShader");
+            GLES20.glAttachShader(program, pixelShader);
+            checkGlError("glAttachShader");
+            GLES20.glLinkProgram(program);
+            int[] linkStatus = new int[1];
+            GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
+            if (linkStatus[0] != GLES20.GL_TRUE) {
+                Log.e(TAG, "Could not link program: ");
+                Log.e(TAG, GLES20.glGetProgramInfoLog(program));
+                GLES20.glDeleteProgram(program);
+                program = 0;
+            }
+        }
+        return program;
+    }
+
+    private void checkGlError(String op) {
+        int error;
+        while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
+            Log.e(TAG, op + ": glError " + error);
+            throw new RuntimeException(op + ": glError " + error);
+        }
+    }
+
+    private static final int FLOAT_SIZE_BYTES = 4;
+    private static final int VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
+    private static final int VERTICES_DATA_POS_OFFSET = 0;
+    private static final int VERTICES_DATA_UV_OFFSET = 3;
+    private final float[] mVerticesData = {
+        // X, Y, Z, U, V
+        -1.25f, -1.0f, 0, 0.f, 0.f,
+         1.25f, -1.0f, 0, 1.f, 0.f,
+        -1.25f,  1.0f, 0, 0.f, 1.f,
+         1.25f,  1.0f, 0, 1.f, 1.f,
+    };
+
+    private FloatBuffer mVertices;
+
+    private final String mVertexShader =
+        "uniform mat4 uMVPMatrix;\n" +
+        "uniform mat4 uSTMatrix;\n" +
+        "attribute vec4 aPosition;\n" +
+        "attribute vec4 aTextureCoord;\n" +
+        "varying vec2 vTextureCoord;\n" +
+        "void main() {\n" +
+        "  gl_Position = uMVPMatrix * aPosition;\n" +
+        "  vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" +
+        "}\n";
+
+    private final String mFragmentShader =
+        "#extension GL_OES_EGL_image_external : require\n" +
+        "precision mediump float;\n" +
+        "varying vec2 vTextureCoord;\n" +
+        "uniform samplerExternalOES sTexture;\n" +
+        "void main() {\n" +
+        "  gl_FragColor = texture2D(sTexture, vTextureCoord);\n" +
+        "}\n";
+
+    private float[] mMVPMatrix = new float[16];
+    private float[] mProjMatrix = new float[16];
+    private float[] mMMatrix = new float[16];// 鍏蜂綋鐗╀綋鐨�3D鍙樻崲鐭╅樀锛屽寘鎷棆杞�佸钩绉汇�佺缉鏀�
+
+    private float[] mVMatrix = new float[16];
+    private float[] mSTMatrix = new float[16];
+
+    private int mProgram;
+    private int mTextureID;
+    private int muMVPMatrixHandle;
+    private int muSTMatrixHandle;
+    private int maPositionHandle;
+    private int maTextureHandle;
+
+    private float mRatio = 1.0f;
+    private SurfaceTexture mSurface;
+    private boolean updateSurface = false;
+    private long mLastTime = -1;
+    private long mRunTime = 0;
+
+    private static final String TAG = "MyRenderer";
+
+    // Magic key
+    private static final int GL_TEXTURE_EXTERNAL_OES = 0x8D65;
+
+    public SurfaceTexture getSurfaceTexture() {
+        return mSurface;
+    }
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/SingleSelectionPopup.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/SingleSelectionPopup.java
new file mode 100644
index 0000000..6b5aee9
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/SingleSelectionPopup.java
@@ -0,0 +1,141 @@
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.MyWheelAdapter;
+import cn.com.basic.face.listeners.OkButtonClickedListener;
+import com.wx.wheelview.widget.WheelView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.basic.face.discern.entity.Dictionary;
+
+/**
+ * Created by Sinoe on 2017/2/27.
+ */
+
+public class SingleSelectionPopup extends PopupWindow implements View.OnClickListener,WheelView.OnWheelItemSelectedListener{
+    private View view;
+    private TextView mTvConfirm,mTvCancel,mTvTitle;
+    private List mList;
+    private WheelView mWheelView;
+    private Context mContext;
+    public SingleSelectionPopup(Context context, List mList,String mTitle) {
+        this.mContext = context;
+        view = LayoutInflater.from(context).inflate(R.layout.pop_single_selection,null);
+        this.mList = mList;
+        mTvTitle = (TextView) view.findViewById(R.id.pop_single_title);
+        if (mTitle !=null && mTitle.length() > 0){
+            mTvTitle.setText(mTitle);
+        }else {
+            mTvTitle.setText("鏍囬");
+        }
+        mWheelView = (WheelView) view.findViewById(R.id. pop_single_wheel);
+        mWheelView.setOnWheelItemSelectedListener(this);
+        mTvCancel = (TextView) view.findViewById(R.id.pop_single_cancel);
+        mTvConfirm = (TextView) view.findViewById(R.id.pop_single_confirm);
+        mTvCancel.setOnClickListener(this);
+        mTvConfirm.setOnClickListener(this);
+        mWheelView.setWheelAdapter(new MyWheelAdapter(context));
+        mWheelView.setSkin(WheelView.Skin.Holo);
+        if (mList != null && mList.size() > 0) {
+            mWheelView.setWheelData(mList);
+        }
+        mWheelView.setWheelSize(5);
+        mWheelView.setBackgroundResource(R.color.colorBackground);
+        WheelView.WheelViewStyle style = new WheelView.WheelViewStyle();
+        style.selectedTextColor = Color.parseColor("#11c3e3");
+        style.textColor = Color.parseColor("#bcc6cf");
+        style.selectedTextSize = 22;
+        style.textSize = 16;
+        style.holoBorderColor = Color.parseColor("#11c3e3");
+        mWheelView.setStyle(style);
+
+        //澶栭儴鍙偣鍑�
+        setOutsideTouchable(true);
+
+        view.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View view, MotionEvent motionEvent) {
+            View popLayout = view.findViewById(R.id.pop_single_ll);
+            int top = popLayout.getTop();
+            int bottom = popLayout.getBottom();
+            int left = popLayout.getLeft();
+            int right = popLayout.getRight();
+            int y = (int) motionEvent.getY();
+            int x = (int) motionEvent.getX();
+            if (motionEvent.getAction() == MotionEvent.ACTION_UP){
+                if (y<top || y> bottom){
+                    dismiss();
+                }
+                if (x < left || x > right){
+                    dismiss();
+                }
+
+            }
+            return true;
+            }
+        });
+
+        /*
+             璁剧疆绐楀彛鐗瑰緛
+         */
+        //璁剧疆瑙嗗浘
+        this.setContentView(this.view);
+        //璁剧疆绐楀彛瀹介珮
+        this.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT);
+        this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT);
+        //璁剧疆寮瑰嚭绐楀彛鍙偣鍑�
+        this.setFocusable(true);
+        //瀹炰緥鍖朇olor
+        ColorDrawable colorDrawable = new ColorDrawable(0x7f000000);
+        this.setBackgroundDrawable(colorDrawable);
+        this.setAnimationStyle(R.style.PopupAnimation);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()){
+            case R.id.pop_single_cancel:
+                dismiss();
+                break;
+            case R.id.pop_single_confirm:
+                for (OkButtonClickedListener okButtonClickedListener : okButtonClickedListeners) {
+                    if (mWheelView.getCurrentPosition() >= 0) {
+                        Object o = mList.get(mWheelView.getCurrentPosition());
+                        String item = "";
+                        if (o instanceof Dictionary) {
+                            item = ((Dictionary) o).getName();
+                        } else {
+                            item = o+"";
+                        }
+                        okButtonClickedListener.onItemSelected(mWheelView.getCurrentPosition(), o, item);
+                    }
+                }
+                dismiss();
+                break;
+        }
+    }
+
+    @Override
+    public void onItemSelected(int position, Object o) {
+        //Toast.makeText(mContext,mList.get(position),Toast.LENGTH_SHORT).show();
+    }
+
+    private List<OkButtonClickedListener> okButtonClickedListeners = new ArrayList<OkButtonClickedListener>();
+
+    public void addOkButtonClickedListener(OkButtonClickedListener okButtonClickedListener) {
+        this.okButtonClickedListeners.add(okButtonClickedListener);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitPurposePopup.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitPurposePopup.java
new file mode 100644
index 0000000..f9a1fa6
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitPurposePopup.java
@@ -0,0 +1,144 @@
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+import cn.com.basic.face.adapter.MyWheelAdapter;
+import cn.com.basic.face.listeners.OkButtonClickedListener;
+import com.wx.wheelview.widget.WheelView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.basic.face.discern.entity.Dictionary;
+
+/**
+ * Created by Sinoe on 2017/2/27.
+ */
+
+public class VisitPurposePopup extends PopupWindow implements View.OnClickListener,WheelView.OnWheelItemSelectedListener{
+    private View view;
+    private TextView mTvConfirm,mTvCancel,mTvTitle;
+    private List mList;
+    private WheelView mWheelView;
+    private Context mContext;
+    public VisitPurposePopup(Context context, List mList, String mTitle) {
+        this.mContext = context;
+        view = LayoutInflater.from(context).inflate(R.layout.visit_purpose_popup,null);
+        this.mList = mList;
+        mTvTitle = (TextView) view.findViewById(R.id.pop_single_title);
+        if (mTitle !=null && mTitle.length() > 0){
+            mTvTitle.setText(mTitle);
+        }else {
+            mTvTitle.setText("鏍囬");
+        }
+        mWheelView = (WheelView) view.findViewById(R.id. pop_single_wheel);
+        mWheelView.setOnWheelItemSelectedListener(this);
+        mTvCancel = (TextView) view.findViewById(R.id.pop_single_cancel);
+        mTvConfirm = (TextView) view.findViewById(R.id.pop_single_confirm);
+        mTvCancel.setOnClickListener(this);
+        mTvConfirm.setOnClickListener(this);
+        mWheelView.setWheelAdapter(new MyWheelAdapter(context));
+        mWheelView.setSkin(WheelView.Skin.Holo);
+        if (mList != null && mList.size() > 0) {
+            mWheelView.setWheelData(mList);
+        }
+        mWheelView.setWheelSize(5);
+        mWheelView.setBackgroundResource(R.color.colorBackground);
+        WheelView.WheelViewStyle style = new WheelView.WheelViewStyle();
+        style.selectedTextColor = Color.parseColor("#11c3e3");
+        style.textColor = Color.parseColor("#bcc6cf");
+        style.selectedTextSize = 22;
+        style.textSize = 16;
+        style.holoBorderColor = Color.parseColor("#11c3e3");
+        mWheelView.setStyle(style);
+
+        //澶栭儴鍙偣鍑�
+        setOutsideTouchable(true);
+
+        view.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View view, MotionEvent motionEvent) {
+            View popLayout = view.findViewById(R.id.pop_single_ll);
+            int top = popLayout.getTop();
+            int bottom = popLayout.getBottom();
+            int left = popLayout.getLeft();
+            int right = popLayout.getRight();
+            int y = (int) motionEvent.getY();
+            int x = (int) motionEvent.getX();
+            if (motionEvent.getAction() == MotionEvent.ACTION_UP){
+                if (y<top || y> bottom){
+                    dismiss();
+                }
+                if (x < left || x > right){
+                    dismiss();
+                }
+
+            }
+            return true;
+            }
+        });
+
+        /*
+             璁剧疆绐楀彛鐗瑰緛
+         */
+        //璁剧疆瑙嗗浘
+        this.setContentView(this.view);
+        //璁剧疆绐楀彛瀹介珮
+        this.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT);
+        this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT);
+        //璁剧疆寮瑰嚭绐楀彛鍙偣鍑�
+        this.setFocusable(true);
+        //瀹炰緥鍖朇olor
+        ColorDrawable colorDrawable = new ColorDrawable(0x7f000000);
+        this.setBackgroundDrawable(colorDrawable);
+        this.setAnimationStyle(R.style.PopupAnimation);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()){
+            case R.id.pop_single_cancel:
+                dismiss();
+                break;
+            case R.id.pop_single_add:
+                dismiss();
+                break;
+            case R.id.pop_single_confirm:
+                for (OkButtonClickedListener okButtonClickedListener : okButtonClickedListeners) {
+                    if (mWheelView.getCurrentPosition() >= 0) {
+                        Object o = mList.get(mWheelView.getCurrentPosition());
+                        String item = "";
+                        if (o instanceof Dictionary) {
+                            item = ((Dictionary) o).getName();
+                        } else {
+                            item = o+"";
+                        }
+                        okButtonClickedListener.onItemSelected(mWheelView.getCurrentPosition(), o, item);
+                    }
+                }
+                dismiss();
+                break;
+        }
+    }
+
+    @Override
+    public void onItemSelected(int position, Object o) {
+        //Toast.makeText(mContext,mList.get(position),Toast.LENGTH_SHORT).show();
+    }
+
+    private List<OkButtonClickedListener> okButtonClickedListeners = new ArrayList<OkButtonClickedListener>();
+
+    public void addOkButtonClickedListener(OkButtonClickedListener okButtonClickedListener) {
+        this.okButtonClickedListeners.add(okButtonClickedListener);
+    }
+
+}
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitorView.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitorView.java
new file mode 100644
index 0000000..5eee3b0
--- /dev/null
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/widget/VisitorView.java
@@ -0,0 +1,58 @@
+package cn.com.basic.face.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.bsk.zhangbo.demoforbsk.R;
+
+import static cn.com.basic.face.util.Constant.VISITOR_TO;
+
+/**
+ * Created by Sinoe on 2017/2/22.
+ */
+
+public class VisitorView extends LinearLayout{
+    private Context mContext;
+    private TextView mTvTitle,mTvPhone,mTvCompany,mTvCardId,mTvDepartment,mTvWork,mBtnLandline,mBtnMobile;
+    private LinearLayout mLayoutTo,mLayoutFrom;
+    public VisitorView(Context context) {
+        super(context);
+    }
+
+    public VisitorView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        this.mContext = context;
+        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        inflater.inflate(R.layout.view_visitor,this);
+        mLayoutTo = (LinearLayout) findViewById(R.id.visitor_to_ll);
+        mLayoutFrom = (LinearLayout) findViewById(R.id.visitor_from_ll);
+        mTvTitle = (TextView) findViewById(R.id.visitor_title);
+    }
+
+    /**
+     * 璁剧疆绫诲瀷
+     * @param type
+     */
+    public void setType(int type){
+        if (type == VISITOR_TO){
+            mLayoutTo.setVisibility(VISIBLE);
+            mLayoutFrom.setVisibility(GONE);
+        }else {
+            mLayoutTo.setVisibility(GONE);
+            mLayoutFrom.setVisibility(VISIBLE);
+        }
+    }
+
+    /**
+     * 璁剧疆鏍囬
+     * @param title
+     */
+    public void setTitle(String title){
+        mTvTitle.setText(title);
+    }
+
+
+}

--
Gitblit v1.8.0