weimingfei
6 小时以前 9ccd59974993aa9914daf045aa6f2bbb5152047c
钥匙柜
已添加6个文件
已删除1个文件
已修改25个文件
1393 ■■■■■ 文件已修改
keyCabinet-android/app/src/main/AndroidManifest.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/base/MyBaseActivity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/FaceUserBean.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/LoginBean.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/FaceStatusChangeEvent.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/JiujinBeginEvent.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/JiujinResultEvent.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/Apis.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/AddFaceActivity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java 335 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceVM.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetVM.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageLoginActivity.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageLoginVM.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainVM.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/CrashHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/drawable/shape_jiujin_ok.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/layout/face_activity.xml 707 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/layout/main_activity.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/layout/manage_login_activity.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/layout/popup_menu_home.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/default_nodata.jpg 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/default_nodata.png 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_pass.png 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_viewfinder.png 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/img_loading.png 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/res/values/styles.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/test/java/com/doumee/ticketmachine/ExampleUnitTest.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/lib_coremodel/src/main/res/layout/toast_view.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/AndroidManifest.xml
@@ -44,7 +44,8 @@
            android:exported="false" />
        <activity
            android:name="com.doumee.keyCabinet.ui.face.FaceActivity"
            android:exported="false" />
            android:exported="false"
            android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>
        <activity
            android:name="com.doumee.keyCabinet.ui.main.MainActivity"
            android:exported="true"
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/base/MyBaseActivity.java
@@ -103,7 +103,7 @@
            if(isFinishing()){
                return;
            }
            timeChange(String.format(getString(R.string.time_djs),millisUntilFinished/1000));
            timeChange((millisUntilFinished/1000)+"s");
        }
    };
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/FaceUserBean.java
@@ -5,7 +5,7 @@
//人脸
public class FaceUserBean {
    private String faceImg;
    private String memberId;
    private Integer memberId;
    private String memberName;
    //0:管理员,1:用户
@@ -21,11 +21,11 @@
        this.faceImg = faceImg;
    }
    public String getMemberId() {
    public Integer getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
    public void setMemberId(Integer memberId) {
        this.memberId = memberId;
    }
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/LoginBean.java
@@ -3,7 +3,7 @@
//当前登录信息
public class LoginBean {
    private Integer autoMemberId;
    private Integer memberId = 6572;
    private Integer memberId;
    //用户验证方式 0刷脸 1刷卡
    private int authType;
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/FaceStatusChangeEvent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.doumee.keyCabinet.event;
public class FaceStatusChangeEvent {
    private int status;
    public FaceStatusChangeEvent(int status) {
        this.status = status;
    }
    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/JiujinBeginEvent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
package com.doumee.keyCabinet.event;
public class JiujinBeginEvent {
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/JiujinResultEvent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.keyCabinet.event;
import java.math.BigDecimal;
public class JiujinResultEvent {
    private boolean isOk;
    private BigDecimal concentration;
    public JiujinResultEvent(boolean isOk, BigDecimal concentration) {
        this.isOk = isOk;
        this.concentration = concentration;
    }
    public boolean isOk() {
        return isOk;
    }
    public void setOk(boolean ok) {
        isOk = ok;
    }
    public BigDecimal getConcentration() {
        return concentration;
    }
    public void setConcentration(BigDecimal concentration) {
        this.concentration = concentration;
    }
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/Apis.java
@@ -22,7 +22,8 @@
public interface Apis {
    //测试服
    String HTTP = "http://192.168.1.45:10010/";
    //String HTTP = "http://192.168.1.45:10010/";
    String HTTP = "http://192.168.0.212/system_gateway/";
    String HEAT_HTTP = "do?c=220301";
    /**
     * æŸ¥è¯¢ç‰ˆæœ¬ä¿¡æ¯
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/AddFaceActivity.java
@@ -205,12 +205,12 @@
                                if (ret == 128) {
                                    Timber.d("====>图片特征抽取成功: %s", bean.getMemberName());
                                    //插入数据库
                                    User user = FaceApi.getInstance().getByUserId(bean.getGroupId(), bean.getMemberId());
                                    User user = FaceApi.getInstance().getByUserId(bean.getGroupId(), bean.getMemberId().toString());
                                    boolean isSave = false;
                                    if (user == null) {
                                        //新增
                                        isSave = FaceApi.getInstance().registerUserIntoDBmanager(bean.getGroupId(),
                                                bean.getMemberId(), bean.getMemberName(), bean.getFaceImg(), JSON.toJSONString(bean), secondFeature);
                                                bean.getMemberId().toString(), bean.getMemberName(), bean.getFaceImg(), JSON.toJSONString(bean), secondFeature);
                                    } else {
                                        //更新
                                        user.setUserName(bean.getMemberName());
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
@@ -14,13 +14,19 @@
import android.text.TextUtils;
import android.text.style.TextAppearanceSpan;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon;
import com.doumee.keyCabinet.MApplication;
import com.doumee.keyCabinet.R;
import com.doumee.keyCabinet.base.MyBaseActivity;
import com.doumee.keyCabinet.databinding.FaceActivityBinding;
import com.doumee.keyCabinet.event.FaceStatusChangeEvent;
import com.doumee.keyCabinet.event.JiujinBeginEvent;
import com.doumee.keyCabinet.event.JiujinResultEvent;
import com.doumee.keyCabinet.event.TimeClockEvent;
import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity;
import com.doumee.keyCabinet.utils.BraceletLogUtils;
@@ -28,6 +34,7 @@
import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig;
import com.doumee.lib_coremodel.bean.event.ActionEventData;
import com.doumee.lib_coremodel.util.SpUtil;
import com.doumee.lib_coremodel.util.StringUtil;
import com.example.datalibrary.callback.CameraDataCallback;
import com.example.datalibrary.callback.FaceDetectCallBack;
import com.example.datalibrary.gatecamera.CameraPreviewManager;
@@ -38,8 +45,13 @@
import com.example.datalibrary.model.LivenessModel;
import com.example.datalibrary.model.User;
import com.example.datalibrary.utils.FaceOnDrawTexturViewUtil;
import com.example.datalibrary.utils.ToastUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.math.BigDecimal;
import dagger.hilt.android.AndroidEntryPoint;
@@ -73,11 +85,24 @@
        getDB().setModel(getVM());
        mContext = this;
        flag = MApplication.getLoginBean().getFlag();
        statusFsm(flag==0?0:2);
        //todo wmf è§£å¼€
        /*FaceSDKManager.getInstance().initDataBases(this);
        initFaceCheck();*/
        FaceSDKManager.getInstance().initDataBases(this);
        initFaceCheck();
        initView();
        if(flag==0){
            if(MApplication.getConfigBean().getDoubleAuth()==1){
                statusFsm(0);
            }else {
                statusFsm(2);
            }
        }else {
            statusFsm(7);
        }
        getDB().tvDjs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                statusFsm(status);
            }
        });
    }
    @Override
@@ -101,117 +126,103 @@
    private void statusFsm(int toStatus){
        status = toStatus;
        switch (status){
        isToChose = false;
        switch (toStatus){
            case 0:
                //取-管理员人脸验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("管理员身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
                getDB().tvTip.setText("请保持正脸在取景框中,并根据指示完成识别");
                getDB().clRemind.setVisibility(View.VISIBLE);
                getDB().btSk.setVisibility(View.VISIBLE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.VISIBLE);
                setFaceModel(0);
                break;
            case 1:
                //取-管理员刷卡验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("管理员身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
                getDB().tvTip.setText("请将IC卡贴近刷卡区,停留1-2秒");
                getDB().clRemind.setVisibility(View.GONE);
                getDB().btSk.setVisibility(View.GONE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.VISIBLE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.VISIBLE);
                setFaceModel(2);
                break;
            case 5:
                //取-司机验证方式选择页
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("司机身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_face);
                getDB().tvTip.setText("请保持正脸在取景框中,并根据指示完成识别");
                getDB().clRemind.setVisibility(View.VISIBLE);
                getDB().btSk.setVisibility(View.GONE);
                getDB().clSjRl.setVisibility(View.VISIBLE);
                getDB().clSjSk.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clSjXuan.setVisibility(View.VISIBLE);
                getDB().clSjXuan.invalidate();
                getDB().clSjXuan.requestLayout();
                break;
            case 2:
                //取-司机人脸验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("司机身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
                getDB().tvTip.setText("请保持正脸在取景框中,并根据指示完成识别");
                getDB().clRemind.setVisibility(View.VISIBLE);
                getDB().btSk.setVisibility(View.VISIBLE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.GONE);
                getDB().clSjXuan.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.VISIBLE);
                setFaceModel(1);
                break;
            case 3:
                //取-司机刷卡验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("司机身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
                getDB().tvTip.setText("请将IC卡贴近刷卡区,停留1-2秒");
                getDB().clRemind.setVisibility(View.GONE);
                getDB().btSk.setVisibility(View.GONE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.VISIBLE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.GONE);
                getDB().clSjXuan.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.VISIBLE);
                setFaceModel(2);
                break;
            case 4:
                //取-司机酒精检测
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("酒精检测");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_jiujingjiance);
                getDB().tvTip.setText("请拿起酒精检测仪吹气");
                getDB().clRemind.setVisibility(View.GONE);
                getDB().btSk.setVisibility(View.GONE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.GONE);
                getDB().clSjXuan.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clJiu.setVisibility(View.VISIBLE);
                getDB().clJiu.invalidate();
                getDB().clJiu.requestLayout();
                if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getCabinetConfigDataVO()!=null&&
                        MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration()!=null){
                    //开始检测
                    EventBus.getDefault().post(new JiujinBeginEvent());
                }else {
                    ToastUtils.toast(this,"未获取到酒精浓度报警值");
                    statusFsm(6);
                }
                break;
            case 6:
                //取-司机酒精检测失败
                Toast.makeText(mContext, "司机酒精检测失败", Toast.LENGTH_SHORT).show();
                getDB().clJiu.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.VISIBLE);
                break;
            case 7:
                //还-司机人脸验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("司机身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
                getDB().tvTip.setText("请保持正脸在取景框中,并根据指示完成识别");
                getDB().clRemind.setVisibility(View.VISIBLE);
                getDB().btSk.setVisibility(View.VISIBLE);
                getDB().clSjSk.setVisibility(View.GONE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.VISIBLE);
                setFaceModel(1);
                break;
            case 8:
                //还-司机刷卡验证
                getDB().clLogin.setVisibility(View.VISIBLE);
                getDB().tvTitle.setText("司机身份验证");
                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
                getDB().tvTip.setText("请将IC卡贴近刷卡区,停留1-2秒");
                getDB().clRemind.setVisibility(View.GONE);
                getDB().btSk.setVisibility(View.GONE);
                getDB().clSjSk.setVisibility(View.VISIBLE);
                getDB().clSjRl.setVisibility(View.GONE);
                getDB().clTip1.setVisibility(View.GONE);
                getDB().clFace.setVisibility(View.GONE);
                getDB().clCard.setVisibility(View.VISIBLE);
                setFaceModel(2);
                break;
            default:
                break;
        }
    }
    private void setFaceModel(int faceModel){
        if(faceModel==0){
            //管理员
            FaceSDKManager.getInstance().setGroupId("0");
            isToChose = false;
        }else if(faceModel==1){
            //司机
            FaceSDKManager.getInstance().setGroupId("1");
            isToChose = false;
        }else {
            isToChose = true;
        }
    }
@@ -222,7 +233,7 @@
        switch (type){
            case 1:
                //切换到刷卡
                if("0".equals(flag)){
                if(flag==0){
                    if(status==0){
                        statusFsm(1);
                    }else if(status==2){
@@ -242,23 +253,18 @@
                break;
            case 4:
                //切换到人脸
                if("0".equals(flag)){
                if(flag==0){
                    if(status==1){
                        statusFsm(5);
                        statusFsm(0);
                    }else if(status==3){
                        statusFsm(6);
                        statusFsm(2);
                    }
                }else {
                    startActivity(KeyCabinetActivity.class);
                    finish();
                    statusFsm(7);
                }
                //todo wmf
                //statusFsm("0".equals(flag)?);
                break;
            case 5:
                startActivity(KeyCabinetActivity.class);
                finish();
                statusFsm(4);
                break;
            default:
                break;
@@ -287,13 +293,32 @@
        CameraPreviewManager.getInstance().startPreview(glMantleSurfacView,
                SingleBaseConfig.getBaseConfig().getRgbVideoDirection() , PREFER_WIDTH, PERFER_HEIGH);
        getDB().tvJg2.setText(getErrPhoneText(), TextView.BufferType.SPANNABLE);
        //ic卡读取
        getDB().etEwm.requestFocus();
        getDB().etEwm.setShowSoftInputOnFocus(false);
        hideSoftKeyboard(getDB().etEwm);
        getDB().etEwm.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                hideSoftKeyboard(getDB().etEwm);
            }
        });
    }
    private void hideSoftKeyboard(View view) {
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        //todo wmf è§£å¼€
        //startTestOpenDebugRegisterFunction();
        startTestOpenDebugRegisterFunction();
    }
    private void startTestOpenDebugRegisterFunction() {
@@ -329,9 +354,7 @@
                handler.sendEmptyMessageDelayed(1,4000);
                glMantleSurfacView.setFrame();
                bdFaceImageConfig.setData(data);
                //必须会员
                String groupId = "0";
                FaceSDKManager.getInstance().onDetectCheck(groupId,bdFaceImageConfig, null, null,
                FaceSDKManager.getInstance().onDetectCheck(bdFaceImageConfig, null, null,
                        bdFaceCheckConfig, faceDetectCallBack);
            }
        }
@@ -352,19 +375,25 @@
        @Override
        public void onTip(int code, String msg) {
            getDB().clFail.setVisibility(View.VISIBLE);
            if(isToChose){
                return;
            }
            /*getDB().clFail.setVisibility(View.VISIBLE);
            getDB().tv4.setText(msg);
            handler.sendEmptyMessageDelayed(0,1000);
            handler.sendEmptyMessageDelayed(0,1000);*/
            System.out.println("==isOk==>onTip:"+msg);
        }
        @Override
        public void onFaceDetectDarwCallback(LivenessModel livenessModel) {
            //System.out.println("==rgbInstance==>onFaceDetectDarwCallback");
            if(isToChose){
                return;
            }
            if (isCompareCheck) {
                getDB().clFail.setVisibility(View.VISIBLE);
                /*getDB().clFail.setVisibility(View.VISIBLE);
                getDB().tv4.setText(getString(R.string.face_tip2));
                handler.sendEmptyMessageDelayed(0,1000);
                handler.sendEmptyMessageDelayed(0,1000);*/
            }
            // ç»˜åˆ¶äººè„¸æ¡†
            showFrame(livenessModel);
@@ -397,6 +426,26 @@
                    break;
                case 1:
                    //isCheckFace = false;
                    break;
                case 3:
                    Toast.makeText(mContext, "酒精检查返回", Toast.LENGTH_SHORT).show();
                    if(new BigDecimal(MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration())
                            .compareTo(resultEvent.getConcentration())>=0){
                        //酒精通过
                        getDB().clJiujinOk.setVisibility(View.VISIBLE);
                        handler.sendEmptyMessageDelayed(4,1000);
                    }else {
                        //酒精不通过
                        getVM().alcoholTestAlarm("");
                        Toast.makeText(mContext, "酒精检测不通过", Toast.LENGTH_SHORT).show();
                        statusFsm(6);
                    }
                    break;
                case 4:
                    startActivity(KeyCabinetActivity.class);
                    finish();
                    break;
                default:
                    break;
            }
        }
@@ -431,11 +480,10 @@
        handler.removeCallbacksAndMessages(null);
        handler = null;
        dataCallback = null;
        //CameraPreviewManager.getInstance().destroy();
        CameraPreviewManager.getInstance().destroy();
        faceDetectCallBack = null;
        glMantleSurfacView = null;
        //todo wmf è§£å¼€
        //FaceSDKManager.getInstance().destroy();
        FaceSDKManager.getInstance().destroy();
    }
    private int resultCount = 0;
@@ -451,11 +499,14 @@
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(isToChose) {
                    return;
                }
                if (livenessModel == null) {
                    if (isCompareCheck) {
                        getDB().clFail.setVisibility(View.VISIBLE);
                        /*getDB().clFail.setVisibility(View.VISIBLE);
                        getDB().tv4.setText(getString(R.string.face_tip2));
                        handler.sendEmptyMessageDelayed(0,1000);
                        handler.sendEmptyMessageDelayed(0,1000);*/
                    }
                    System.out.println("======>人脸识别失败");
                    return;
@@ -463,37 +514,21 @@
                if (livenessModel.isQualityCheck()){
                    //是否通过质量检测
                    if (isCompareCheck) {
                        getDB().clFail.setVisibility(View.VISIBLE);
                        /*getDB().clFail.setVisibility(View.VISIBLE);
                        getDB().tv4.setText(getString(R.string.face_tip2));
                        handler.sendEmptyMessageDelayed(0,1000);
                        handler.sendEmptyMessageDelayed(0,1000);*/
                    }
                } else {
                    User user = livenessModel.getUser();
                    if (user == null) {
                        mUser = null;
                        if (isCompareCheck) {
                            getDB().clFail.setVisibility(View.VISIBLE);
                            /*getDB().clFail.setVisibility(View.VISIBLE);
                            getDB().tv4.setText(getString(R.string.face_tip2));
                            handler.sendEmptyMessageDelayed(0,1000);
                            handler.sendEmptyMessageDelayed(0,1000);*/
                        }
                    } else {
                        //优先会员
                        if("0".equals(user.getGroupId())){
                        }else {
                            if (isCompareCheck) {
                                getDB().clFail.setVisibility(View.VISIBLE);
                                getDB().tv4.setText(getString(R.string.face_tip2));
                                handler.sendEmptyMessageDelayed(0,1000);
                            }
                            resultCount++;
                            if (resultCount >= 3) {
                                resultCount = 0;
                            }else {
                                return;
                            }
                        }
                        mUser = user;
                        if (isCompareCheck) {
                            getDB().clFail.setVisibility(View.GONE);
@@ -506,19 +541,38 @@
                            nameText.setTextColor(Color.parseColor("#0dc6ff"));
                            nameText.setText(FileUtils.spotString(user.getUserName()) + " æ¬¢è¿Žæ‚¨");*/
                        }
                        if(!isToChose) {
                            isToChose = true;
                            //识别成功,跳转
                            Bundle bundle = new Bundle();
                            bundle.putString("busId", user.getUserId());
                            bundle.putString("type", "0");
                            //Toast.makeText(mContext, user.getUserName(), Toast.LENGTH_SHORT).show();
                            //startActivity(ChoseTicketActivity.class, bundle);
                        isToChose = true;
                        //识别成功,跳转
                        if(status==0){
                            //取-管理员
                            MApplication.getLoginBean().setAutoMemberId(Integer.parseInt(user.getUserId()));
                            //handler.sendEmptyMessageDelayed(7,0);
                            EventBus.getDefault().post(new FaceStatusChangeEvent(5));
                        }else if(status==2){
                            //取-司机
                            CameraPreviewManager.getInstance().stopPreview();
                            MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId()));
                            MApplication.getLoginBean().setAuthType(0);
                            //handler.sendEmptyMessageDelayed(8,0);
                            EventBus.getDefault().post(new FaceStatusChangeEvent(4));
                        }else if(status==7){
                            //还-司机
                            MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId()));
                            MApplication.getLoginBean().setAuthType(0);
                            startActivity(KeyCabinetActivity.class);
                            finish();
                        }
                    }
                }
            }
        });
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void FaceStatusChangeEvent(FaceStatusChangeEvent e){
        if(!isFinishing()){
            statusFsm(e.getStatus());
        }
    }
    boolean isToChose = false;
@@ -533,7 +587,28 @@
        super.onPause();
        isPause = false;
        isTimePause = true;
        //todo wmf è§£å¼€
        //CameraPreviewManager.getInstance().stopPreview();
        CameraPreviewManager.getInstance().stopPreview();
    }
    private JiujinResultEvent resultEvent;
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void JiujinResultEvent(JiujinResultEvent e){
        if(!isFinishing()){
            //Toast.makeText(mContext, "酒精检测返回:"+e.isOk(), Toast.LENGTH_SHORT).show();
            if(!e.isOk()){
                statusFsm(6);
            }else {
                if(resultEvent==null){
                    resultEvent = e;
                }else if(resultEvent.getConcentration().compareTo(e.getConcentration())<0){
                    //值更大
                    resultEvent = e;
                }
                if(handler.hasMessages(3)){
                    handler.removeMessages(3);
                }
                handler.sendEmptyMessageDelayed(3,1000);
            }
        }
    }
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceVM.java
@@ -56,7 +56,7 @@
                                    MApplication.getLoginBean().setAutoMemberId(response.getData());
                                    //doAction();
                                }else {
                                    MApplication.getLoginBean().setAutoMemberId(response.getData());
                                    MApplication.getLoginBean().setMemberId(response.getData());
                                    MApplication.getLoginBean().setAuthType(1);
                                    //doAction();
                                }
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetVM.java
@@ -110,7 +110,7 @@
                    public void onNext(@NonNull BaseResponse response) {
                        if(200==response.getCode()){
                            //开门
                            toast("开门接口成功");
                            EventBus.getDefault().post(new HttpEvent("开门接口成功"));
                            doAction(2);
                        }else {
                            toast(response.getMessage());
@@ -147,7 +147,6 @@
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        EventBus.getDefault().post(new HttpEvent("关闭柜格接口调用成功"));
                        toast("关闭柜格:"+response.getMessage());
                    }
                    @Override
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java
@@ -160,8 +160,8 @@
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        if(200==response.getCode()){
                            EventBus.getDefault().post(new HttpEvent("批量开门 - ç®¡ç†å‘˜æŽ¥å£æˆåŠŸ"));
                            if(isAll) {
                                toast("批量开门成功");
                                doAction(8);
                            }else {
                                doAction(10);
@@ -195,8 +195,8 @@
                .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) {
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        EventBus.getDefault().post(new HttpEvent("标记柜格正常接口成功"));
                        if(200==response.getCode()){
                            toast("标记柜格正常成功");
                            getCabinetDetail();
                        }else {
                            toast(response.getMessage());
@@ -227,7 +227,7 @@
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        if(200==response.getCode()){
                            toast("标记柜格故障成功");
                            EventBus.getDefault().post(new HttpEvent("标记柜格故障接口成功"));
                            getCabinetDetail();
                        }else {
                            toast(response.getMessage());
@@ -258,7 +258,7 @@
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        if(200==response.getCode()){
                            toast("标记维修保养成功");
                            EventBus.getDefault().post(new HttpEvent("标记维修保养接口成功"));
                            getCabinetDetail();
                        }else {
                            toast(response.getMessage());
@@ -296,6 +296,7 @@
                    @Override
                    public void onNext(@NonNull BaseResponse response) {
                        if(response.getCode()==200){
                            EventBus.getDefault().post(new HttpEvent("关闭柜格接口成功"));
                            getCabinetDetail();
                            doAction(11);
                        }
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageLoginActivity.java
@@ -33,7 +33,8 @@
    @Override
    public void initView(@Nullable Bundle savedInstanceState) {
        isAddCountTimer = false;
        downTime = 30;
        isAddCountTimer = true;
        normalConfig();
        getDB().setModel(getVM());
    }
@@ -66,9 +67,7 @@
                getVM().loginCabinet(getDB().etName.getText().toString(),getDB().etPw.getText().toString());
                break;
            case 3:
                //显示加载
                getDB().clProgress.setVisibility(View.VISIBLE);
                getDB().clTip.setVisibility(View.GONE);
                finish();
                break;
            case 4:
                getDB().clProgress.setVisibility(View.GONE);
@@ -79,6 +78,11 @@
            case 5:
                startActivity(ManageCabinetActivity.class);
                finish();
                break;
            case 6:
                //显示加载
                getDB().clProgress.setVisibility(View.VISIBLE);
                getDB().clTip.setVisibility(View.GONE);
                break;
            default:
                break;
@@ -112,4 +116,9 @@
            }
        }
    }
    @Override
    protected void timeChange(String djs) {
        getDB().tvDjs.setText(djs);
    }
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageLoginVM.java
@@ -32,7 +32,7 @@
        LoginCabinetParam param = new LoginCabinetParam();
        param.setUsername(userName);
        param.setPassword(pw);
        doAction(3);
        doAction(6);
        getRetrofitService(Apis.class).loginCabinet(ParamsUtil.encodeRequestBody(param))
                .compose(RxUtils.schedulersTransformer())
                .subscribe(new SimpleObserver<BaseResponse<String>>(rxJavaGcManager) {
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
@@ -8,6 +8,7 @@
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Camera;
import android.opengl.Visibility;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -30,6 +31,7 @@
import com.alibaba.fastjson.JSON;
import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon;
import com.baidu.idl.main.facesdk.utils.StreamUtil;
import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
@@ -52,6 +54,8 @@
import com.doumee.keyCabinet.event.GetKeyStatusEvent;
import com.doumee.keyCabinet.event.HeartEvent;
import com.doumee.keyCabinet.event.HttpEvent;
import com.doumee.keyCabinet.event.JiujinBeginEvent;
import com.doumee.keyCabinet.event.JiujinResultEvent;
import com.doumee.keyCabinet.event.KeyResultEvent;
import com.doumee.keyCabinet.event.ManageOpenGridResultEvent;
import com.doumee.keyCabinet.event.OpenAllGridEvent;
@@ -107,6 +111,7 @@
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -115,6 +120,8 @@
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import dagger.hilt.android.AndroidEntryPoint;
import timber.log.Timber;
@@ -151,7 +158,7 @@
            if(!isFinishing()){
                switch (msg.what) {
                    case 0:
                    //initM();
                    initM();
                    TimeUtils.updateTimeUi(getVM().dayObs, getVM().timeObs);
                    handler.sendEmptyMessageDelayed(0, 1000);
                    EventBus.getDefault().post(new TimeClockEvent());
@@ -180,7 +187,7 @@
        SpUtil.initWH(this);
        normalConfig();
        getDB().setModel(getVM());
        //initRGBCheck();
        initRGBCheck();
        handler.sendEmptyMessageDelayed(0, 1000);
        //启动心跳
        Intent intent = new Intent(MainActivity.this, HeartbeatService.class);
@@ -190,7 +197,6 @@
        startService(intent2);
        getPermission();
        Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId());
        initPort();
    }
    private void initM(){
@@ -205,7 +211,7 @@
        if((availableMemory<400&&showTime!=null&&(System.currentTimeMillis()-showTime>5000))||
                ("02:00:00".equals(StringUtil.getHM()))){
            //可用内存小于400M,或者每天凌晨2点,重启app
            restartApp();
            //restartApp();
        }
    }
@@ -291,7 +297,20 @@
            @Override
            public void onClick(View v) {
                //todo ä¸´æ—¶ä»£ç 
                setJiuConfig();
                //setJiuConfig();
                SpUtil.saveString("rbgCameraId","0");
            }
        });
        getDB().imgLeft.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //todo ä¸´æ—¶ä»£ç 
                if (getDB().nsv.getVisibility()== View.VISIBLE) {
                    getDB().nsv.setVisibility(View.GONE);
                }else {
                    getDB().nsv.setVisibility(View.VISIBLE);
                }
            }
        });
        upErrInfo();
@@ -305,6 +324,7 @@
                        setBanner(devConfigBean.getBannerList());
                    }
                    setJiuConfig();
                    initPort();
                }
            }
        });
@@ -376,7 +396,7 @@
                }
                MApplication.setLoginBean(null);
                MApplication.getLoginBean().setFlag(type == 2 ? 0 : 1);
                startActivity(KeyCabinetActivity.class);
                startActivity(FaceActivity.class);
                }
                break;
            case 4:
@@ -437,7 +457,7 @@
        isShowing = true;
        showTime = System.currentTimeMillis();
        if(!isFaceOk) {
            //initLicense();
            initLicense();
        }
        if(isHavePermission) {
            checkUpdate();
@@ -808,7 +828,7 @@
                                if (ret == 128) {
                                    Timber.d("==UpdatingFace==>图片特征抽取成功: %s", JSON.toJSONString(bean));
                                    User user = new User();
                                    user.setUserId(bean.getMemberId());
                                    user.setUserId(bean.getMemberId().toString());
                                    user.setGroupId(bean.getGroupId());
                                    user.setUserName(bean.getMemberName());
                                    user.setImageName(bean.getFaceImg());
@@ -896,7 +916,6 @@
        popupWindow.showAtLocation(getDB().clRoot, Gravity.CENTER, 0, 0);
        RelativeLayout relativeRegister = contentView.findViewById(R.id.relative_register);
        RelativeLayout mPopRelativeManager = contentView.findViewById(R.id.relative_manager);
        RelativeLayout mPopRelativeCamra = contentView.findViewById(R.id.relative_camra);
        RelativeLayout mRlErr = contentView.findViewById(R.id.rl_err);
        relativeRegister.setOnClickListener(new View.OnClickListener() {
            @Override
@@ -908,12 +927,6 @@
            @Override
            public void onClick(View v) {
                startActivity(UserManagerActivity.class);
            }
        });
        mPopRelativeCamra.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //startActivity();
            }
        });
        mRlErr.setOnClickListener(new View.OnClickListener() {
@@ -938,15 +951,13 @@
    }
    private void initRGBCheck(){
        if(true){
            return;
        }
        String index = SpUtil.getString("rbgCameraId");
        if(index==null){
        if(!"1".equals(index)){
            index = "0";
        }
        setRgbCameraId(Integer.parseInt(index));
        /*if (isSetCameraId()){
            setRgbCameraId(SingleBaseConfig.getBaseConfig().getRBGCameraId());
            return;
        }
        int mCameraNum = Camera.getNumberOfCameras();
@@ -997,6 +1008,7 @@
    }
    private void setRgbCameraId(int index){
        getVM().addInfo("设置相机:"+index);
        //Toast.makeText(mContext, "设置相机"+index, Toast.LENGTH_SHORT).show();
        SpUtil.saveString("rbgCameraId",index+"");
        BraceletLogUtils.saveLog("设置相机("+index+")");
@@ -1144,6 +1156,14 @@
        }
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void JiujinBeginEvent(JiujinBeginEvent e){
        if(!isFinishing()){
            //开启酒精检测
            sendPortHandlerMsg(3,"go_wnd:0",0);
        }
    }
    @Subscribe
    public void CloseGridOneResultEvent(CloseGridOneResultEvent e){
@@ -1194,6 +1214,9 @@
        @Override
        public void onResultBytes(byte[] bytes) {
            if(isFinishing()){
                return;
            }
            if(bytes.length==0){
                return;
            }
@@ -1284,7 +1307,6 @@
                        runOnUiThread(() -> {
                            getVM().addInfo("批量开门更新库数据:版号:" +bh+","+ addList.size()+","+updateList.size());
                        });
                        getVM().insertGrids(addList);
                        getVM().updateGrids(updateList);
                        if(!portHandler.hasMessages(1)){
                            EventBus.getDefault().post(new ManageOpenGridResultEvent());
@@ -1356,18 +1378,11 @@
                                gridDo.setIsOpen("1".equals(dm.substring(i-1,i))?0:1);
                                gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                                updateList.add(gridDo);
                            }else {
                                CabinetGridDo gridDo = new CabinetGridDo();
                                gridDo.setGridKey(key);
                                gridDo.setIsOpen("1".equals(dm.substring(i-1,i))?0:1);
                                gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                                addList.add(gridDo);
                            }
                        }
                        runOnUiThread(() -> {
                            getVM().addInfo("更新库数据:版号:" +bh+","+ addList.size()+","+updateList.size());
                        });
                        getVM().insertGrids(addList);
                        getVM().updateGrids(updateList);
                    }catch (Exception exception){
                        runOnUiThread(() -> {
@@ -1395,6 +1410,9 @@
        @Override
        public void onResultBytes(byte[] bytes) {
            if(isFinishing()){
                return;
            }
            if(bytes.length==0){
                return;
            }
@@ -1467,21 +1485,9 @@
                    }
                    gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                    updateList.add(gridDo);
                }else {
                    //新增
                    CabinetGridDo gridDo = new CabinetGridDo();
                    gridDo.setGridKey(key);
                    if("01".equals(isHaveKey)) {
                        gridDo.setCurKeyCode(keyCode);
                    }else {
                        gridDo.setCurKeyCode("");
                    }
                    gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                    addList.add(gridDo);
                }
            }
        }
        getVM().insertGrids(addList);
        getVM().updateGrids(updateList);
        EventBus.getDefault().post(new KeyResultEvent());
    }
@@ -1499,12 +1505,33 @@
        @Override
        public void onResultBytes(byte[] bytes) {
            if(isFinishing()){
                return;
            }
            if(bytes.length==0){
                return;
            }
            runOnUiThread(() -> {
                getVM().addInfo("获取到酒精检测数据:" + new String(bytes));
            });
            try {
                runOnUiThread(() -> {
                    getVM().addInfo("获取到酒精检测数据:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes));
                });
                String data = new String(bytes);
                runOnUiThread(() -> {
                    getVM().addInfo("获取到酒精检测是否检测失败:" + (data.contains("blow fail")));
                });
                if(data.contains("blow fail")){
                    //检测失败
                    EventBus.getDefault().post(new JiujinResultEvent(false,null));
                }else if(data.startsWith("Result:")){
                    Pattern pattern = Pattern.compile("([0-9]+\\.[0-9]+)");
                    Matcher matcher = pattern.matcher(data);
                    if (matcher.find()) {
                        EventBus.getDefault().post(new JiujinResultEvent(true,new BigDecimal(matcher.group(1))));
                    }
                }
            }catch (Exception e){
                getVM().addInfo("获取到酒精检测报错:" + e.getMessage());
            }
        }
    };
    private SerialPortModel chosePort;
@@ -1628,6 +1655,8 @@
        sendPortHandlerMsg(3,"alarm:"+config.getConcentration(),time+600);
        //浓度阈值单位 (1=mg/100ml;2=mg/L;3=%BAC)
        sendPortHandlerMsg(3,"unit:"+config.getThreshold(),time+900);
        sendPortHandlerMsg(3,"read"+config.getThreshold(),time+1200);
    }
    private void sendPortHandlerMsg(int what,String obj,long time){
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainVM.java
@@ -78,7 +78,6 @@
                .subscribe(new SimpleObserver<BaseResponse<DevConfigBean>>(rxJavaGcManager) {
                    @Override
                    public void onNext(@NonNull BaseResponse<DevConfigBean> response) {
                        EventBus.getDefault().post(new HttpEvent("获取钥匙柜基本信息-返回:"+ GsonTools.changeGsonToJson(response)));
                        if(200==response.getCode()){
                            if(response.getData()!=null){
                                MApplication.saveConfigBean(response.getData());
@@ -185,9 +184,6 @@
    }
    public void getFaceDatas() {
        if (true) {
            return;
        }
        //showLoading(true);
        getRetrofitService(Apis.class).allFaceList( LMobileInfo.getDeviceUniqueId())
                .compose(RxUtils.schedulersTransformer())
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/CrashHandler.java
@@ -97,10 +97,10 @@
            // èŽ·å–AlarmManager实例
            AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
            // åœ¨500毫秒后触发重启操作
            alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 10, pendingIntent);*/
            alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 10, pendingIntent);
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
            System.exit(1);*/
            //这里可以通过网络上传异常信息到服务器,便于开发人员分析日志从而解决bug
        } catch (IOException e) {
            e.printStackTrace();
keyCabinet-android/app/src/main/res/drawable/shape_jiujin_ok.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#b3000000" />
    <corners android:radius="10dp" />
</shape>
keyCabinet-android/app/src/main/res/layout/face_activity.xml
@@ -14,7 +14,8 @@
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.course.FaceActivity"
        android:background="@color/white">
        android:background="@color/white"
        >
        <View
            android:id="@+id/viewBack"
@@ -63,114 +64,116 @@
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginRight="30dp"/>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_login"
            android:layout_width="match_parent"
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="管理员身份验证"
            android:textColor="#111111"
            android:textSize="33sp"
            android:textStyle="bold"
            app:layout_constraintTop_toBottomOf="@+id/viewBack"
            android:layout_marginTop="36dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            />
        <com.example.datalibrary.gl.view.GlMantleSurfacView
            android:id="@+id/camera_textureview"
            android:layout_width="340dp"
            android:layout_height="340dp"
            app:layout_constraintTop_toBottomOf="@+id/tv_title"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginTop="42dp"
            />
        <!--送检图片-->
        <ImageView
            android:id="@+id/face_detect_image_view"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="@+id/camera_textureview"
            app:layout_constraintStart_toStartOf="@+id/camera_textureview"
            app:layout_constraintEnd_toEndOf="@+id/camera_textureview"
            app:layout_constraintBottom_toBottomOf="@+id/camera_textureview"
            android:visibility="gone"
            android:background="@color/black"
            />
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_face"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="@+id/camera_textureview"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:visibility="visible">
            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="管理员身份验证"
                android:textColor="#111111"
                android:textSize="33sp"
                android:textStyle="bold"
            <View
                android:id="@+id/v_m_sl"
                android:layout_width="340dp"
                android:layout_height="340dp"
                android:background="@mipmap/ic_viewfinder"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                />
            <com.example.datalibrary.gl.view.GlMantleSurfacView
                android:id="@+id/camera_textureview"
                android:layout_width="340dp"
                android:layout_height="340dp"
                app:layout_constraintTop_toBottomOf="@+id/tv_title"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginTop="42dp"
                />
            <!--送检图片-->
            <ImageView
                android:id="@+id/face_detect_image_view"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintTop_toTopOf="@+id/v_sl"
                app:layout_constraintStart_toStartOf="@+id/v_sl"
                app:layout_constraintEnd_toEndOf="@+id/v_sl"
                app:layout_constraintBottom_toBottomOf="@+id/v_sl"
                android:visibility="gone"
                android:background="@color/black"
                />
            <View
                android:id="@+id/v_sl"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:background="@mipmap/ic_viewfinder"
                app:layout_constraintTop_toTopOf="@+id/camera_textureview"
                app:layout_constraintStart_toStartOf="@+id/camera_textureview"
                app:layout_constraintEnd_toEndOf="@+id/camera_textureview"
                app:layout_constraintBottom_toBottomOf="@+id/camera_textureview"
                />
            <TextView
                android:id="@+id/tv_tip"
                android:layout_width="wrap_content"
                android:id="@+id/tv_m_tip"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="请保持正脸在取景框中,并根据指示完成识别"
                android:textColor="#ff666666"
                android:textSize="24sp"
                app:layout_constraintTop_toBottomOf="@+id/camera_textureview"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/v_m_sl"
                android:layout_marginTop="42dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/cl_remind"
                android:id="@+id/cl_m_remind"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@+id/tv_tip"
                app:layout_constraintTop_toBottomOf="@+id/tv_m_tip"
                android:layout_marginTop="60dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent">
                <ImageView
                    android:id="@+id/imgzd"
                    android:id="@+id/imgzd_mf"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_zhengdui"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toLeftOf="@+id/imgzy"
                    app:layout_constraintRight_toLeftOf="@+id/imgzy_mf"
                    android:layout_marginRight="57dp"/>
                <TextView
                    android:id="@+id/tv_pm"
                    android:id="@+id/tv_pm_mf"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="平视屏幕"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toBottomOf="@+id/imgzd"
                    app:layout_constraintStart_toStartOf="@+id/imgzd"
                    app:layout_constraintEnd_toEndOf="@+id/imgzd"
                    app:layout_constraintTop_toBottomOf="@+id/imgzd_mf"
                    app:layout_constraintStart_toStartOf="@+id/imgzd_mf"
                    app:layout_constraintEnd_toEndOf="@+id/imgzd_mf"
                    android:layout_marginTop="15dp"/>
                <ImageView
                    android:id="@+id/imgzy"
                    android:id="@+id/imgzy_mf"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_guangxian"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toRightOf="@+id/imgzd"
                    app:layout_constraintRight_toLeftOf="@+id/imghd"
                    app:layout_constraintLeft_toRightOf="@+id/imgzd_mf"
                    app:layout_constraintRight_toLeftOf="@+id/imghd_mf"
                    android:layout_marginRight="57dp"/>
                <TextView
@@ -179,17 +182,17 @@
                    android:text="不要眨眼"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toTopOf="@+id/tv_pm"
                    app:layout_constraintStart_toStartOf="@+id/imgzy"
                    app:layout_constraintEnd_toEndOf="@+id/imgzy"/>
                    app:layout_constraintTop_toTopOf="@+id/tv_pm_mf"
                    app:layout_constraintStart_toStartOf="@+id/imgzy_mf"
                    app:layout_constraintEnd_toEndOf="@+id/imgzy_mf"/>
                <ImageView
                    android:id="@+id/imghd"
                    android:id="@+id/imghd_mf"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_zhengdui"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toRightOf="@+id/imgzy"
                    app:layout_constraintLeft_toRightOf="@+id/imgzy_mf"
                    app:layout_constraintRight_toRightOf="parent"/>
                <TextView
@@ -198,208 +201,387 @@
                    android:text="不要晃动"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toTopOf="@+id/tv_pm"
                    app:layout_constraintStart_toStartOf="@+id/imghd"
                    app:layout_constraintEnd_toEndOf="@+id/imghd"/>
                    app:layout_constraintTop_toTopOf="@+id/tv_pm_mf"
                    app:layout_constraintStart_toStartOf="@+id/imghd_mf"
                    app:layout_constraintEnd_toEndOf="@+id/imghd_mf"/>
            </androidx.constraintlayout.widget.ConstraintLayout>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/cl_fail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/shape_face_fail_bg"
                app:layout_constraintBottom_toBottomOf="@+id/v_sl"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:layout_marginBottom="48dp"
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:paddingTop="7dp"
                android:paddingBottom="7dp"
                android:visibility="gone">
                android:layout_width="match_parent"
                android:layout_height="75dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                app:layout_constraintBottom_toBottomOf="parent"
                android:layout_marginBottom="30dp"
                android:background="@drawable/shape_r30_face_bg"
                app:commandType="@{1}"
                app:onClickCommand="@{model.myTypeCommand}"
                >
                <ImageView
                    android:id="@+id/img1"
                    android:layout_width="21dp"
                    android:layout_height="21dp"
                    android:src="@mipmap/ic_fail"
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"/>
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    >
                <TextView
                    android:id="@+id/tv3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/face_sbsb"
                    android:textColor="#ffffffff"
                    android:textSize="24sp"
                    <ImageView
                        android:layout_width="28dp"
                        android:layout_height="28dp"
                        android:src="@mipmap/ic_shuaka"
                        android:layout_gravity="center_vertical"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="刷卡验证"
                        android:textColor="#ff279baa"
                        android:textSize="24sp"
                        android:textStyle="bold"
                        android:layout_marginLeft="7dp"/>
                </LinearLayout>
            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_fail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/shape_face_fail_bg"
            app:layout_constraintBottom_toBottomOf="@+id/camera_textureview"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginBottom="48dp"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="7dp"
            android:paddingBottom="7dp"
            android:visibility="gone">
            <ImageView
                android:id="@+id/img1"
                android:layout_width="21dp"
                android:layout_height="21dp"
                android:src="@mipmap/ic_fail"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"/>
            <TextView
                android:id="@+id/tv3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/face_sbsb"
                android:textColor="#ffffffff"
                android:textSize="24sp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toEndOf="@+id/img1"
                android:layout_marginLeft="7dp"/>
            <TextView
                android:id="@+id/tv4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/face_tip2"
                android:textColor="#ffffffff"
                android:textSize="18sp"
                app:layout_constraintTop_toBottomOf="@+id/tv3"
                app:layout_constraintStart_toStartOf="@+id/tv3"
                />
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_sj_xuan"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="@+id/camera_textureview"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:visibility="gone"
            android:background="@color/white">
            <View
                android:id="@+id/v_sj_sl"
                android:layout_width="340dp"
                android:layout_height="340dp"
                android:background="@mipmap/ic_face"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                />
            <TextView
                android:id="@+id/tv_sj_tip"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="请保持正脸在取景框中,并根据指示完成识别"
                android:textColor="#ff666666"
                android:textSize="24sp"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/v_sj_sl"
                android:layout_marginTop="42dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/cl_sj_remind"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@+id/tv_sj_tip"
                android:layout_marginTop="60dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent">
                <ImageView
                    android:id="@+id/imgzd_sj"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_zhengdui"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintStart_toEndOf="@+id/img1"
                    android:layout_marginLeft="7dp"/>
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toLeftOf="@+id/imgzy_sj"
                    android:layout_marginRight="57dp"/>
                <TextView
                    android:id="@+id/tv4"
                    android:id="@+id/tv_pm_sj"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/face_tip2"
                    android:textColor="#ffffffff"
                    android:textSize="18sp"
                    app:layout_constraintTop_toBottomOf="@+id/tv3"
                    app:layout_constraintStart_toStartOf="@+id/tv3"
                    />
                    android:text="平视屏幕"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toBottomOf="@+id/imgzd_sj"
                    app:layout_constraintStart_toStartOf="@+id/imgzd_sj"
                    app:layout_constraintEnd_toEndOf="@+id/imgzd_sj"
                    android:layout_marginTop="15dp"/>
                <ImageView
                    android:id="@+id/imgzy_sj"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_guangxian"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toRightOf="@+id/imgzd_sj"
                    app:layout_constraintRight_toLeftOf="@+id/imghd_sj"
                    android:layout_marginRight="57dp"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="不要眨眼"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toTopOf="@+id/tv_pm_sj"
                    app:layout_constraintStart_toStartOf="@+id/imgzy_sj"
                    app:layout_constraintEnd_toEndOf="@+id/imgzy_sj"/>
                <ImageView
                    android:id="@+id/imghd_sj"
                    android:layout_width="66dp"
                    android:layout_height="66dp"
                    android:src="@mipmap/ic_zhengdui"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toRightOf="@+id/imgzy_sj"
                    app:layout_constraintRight_toRightOf="parent"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="不要晃动"
                    android:textColor="#ff999999"
                    android:textSize="21sp"
                    app:layout_constraintTop_toTopOf="@+id/tv_pm_sj"
                    app:layout_constraintStart_toStartOf="@+id/imghd_sj"
                    app:layout_constraintEnd_toEndOf="@+id/imghd_sj"/>
            </androidx.constraintlayout.widget.ConstraintLayout>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/cl_sj_rl"
                android:layout_width="match_parent"
                android:layout_height="75dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                app:layout_constraintBottom_toBottomOf="parent"
                android:layout_marginBottom="30dp"
                android:visibility="visible">
                <LinearLayout
                    android:id="@+id/ll_01"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    android:background="@drawable/shape_r30_face_bg"
                    android:paddingLeft="30dp"
                    android:paddingRight="30dp"
                    app:commandType="@{2}"
                    app:onClickCommand="@{model.myTypeCommand}">
                    <ImageView
                        android:layout_width="28dp"
                        android:layout_height="28dp"
                        android:src="@mipmap/ic_shuaka"
                        android:layout_gravity="center_vertical"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="刷卡验证"
                        android:textColor="#ff279baa"
                        android:textSize="24sp"
                        android:layout_marginLeft="7dp"
                        android:textStyle="bold"
                        android:layout_gravity="center_vertical"/>
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/ll_02"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toRightOf="@+id/ll_01"
                    app:layout_constraintRight_toRightOf="parent"
                    android:background="@drawable/shape_r25_blue_bg"
                    android:layout_marginLeft="20dp"
                    app:commandType="@{3}"
                    app:onClickCommand="@{model.myTypeCommand}"
                    android:gravity="center">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="开始验证"
                        android:textColor="@color/white"
                        android:textSize="24sp"
                        android:textStyle="bold"
                        />
                </LinearLayout>
            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_card"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="@+id/camera_textureview"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:background="@color/white"
            android:visibility="gone">
            <View
                android:id="@+id/v_c_sl"
                android:layout_width="340dp"
                android:layout_height="340dp"
                android:background="@mipmap/ic_shuaka2"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                />
            <TextView
                android:id="@+id/tv_c_tip"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="请将IC卡贴近刷卡区,停留1-2秒"
                android:textColor="#ff666666"
                android:textSize="24sp"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/v_c_sl"
                android:layout_marginTop="42dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="75dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                app:layout_constraintBottom_toBottomOf="parent"
                android:layout_marginBottom="30dp"
                android:background="@drawable/shape_r30_face_bg"
                app:commandType="@{4}"
                app:onClickCommand="@{model.myTypeCommand}"
                >
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    >
                    <ImageView
                        android:layout_width="28dp"
                        android:layout_height="28dp"
                        android:src="@mipmap/ic_renlian"
                        android:layout_gravity="center_vertical"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="人脸验证"
                        android:textColor="#ff279baa"
                        android:textSize="24sp"
                        android:textStyle="bold"
                        android:layout_marginLeft="7dp"/>
                </LinearLayout>
            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/bt_sk"
            android:id="@+id/cl_jiu"
            android:layout_width="match_parent"
            android:layout_height="75dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="@+id/camera_textureview"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginBottom="30dp"
            android:background="@drawable/shape_r30_face_bg"
            app:commandType="@{1}"
            app:onClickCommand="@{model.myTypeCommand}"
            android:visibility="visible">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                >
                <ImageView
                    android:layout_width="28dp"
                    android:layout_height="28dp"
                    android:src="@mipmap/ic_shuaka"
                    android:layout_gravity="center_vertical"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="刷卡验证"
                    android:textColor="#ff279baa"
                    android:textSize="24sp"
                    android:textStyle="bold"
                    android:layout_marginLeft="7dp"/>
            </LinearLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_sj_rl"
            android:layout_width="match_parent"
            android:layout_height="75dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginBottom="30dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:background="@color/white"
            android:visibility="gone">
            <LinearLayout
                android:id="@+id/ll_01"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
            <View
                android:id="@+id/v_jiu_sl"
                android:layout_width="340dp"
                android:layout_height="340dp"
                android:background="@mipmap/ic_jiujingjiance"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                android:background="@drawable/shape_r30_face_bg"
                android:paddingLeft="30dp"
                android:paddingRight="30dp"
                app:commandType="@{2}"
                app:onClickCommand="@{model.myTypeCommand}">
                app:layout_constraintEnd_toEndOf="parent"
                />
                <ImageView
                    android:layout_width="28dp"
                    android:layout_height="28dp"
                    android:src="@mipmap/ic_shuaka"
                    android:layout_gravity="center_vertical"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="刷卡验证"
                    android:textColor="#ff279baa"
                    android:textSize="24sp"
                    android:layout_marginLeft="7dp"
                    android:textStyle="bold"
                    android:layout_gravity="center_vertical"/>
            </LinearLayout>
            <LinearLayout
                android:id="@+id/ll_02"
            <TextView
                android:id="@+id/tv_jiu_tip"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/ll_01"
                app:layout_constraintRight_toRightOf="parent"
                android:background="@drawable/shape_r25_blue_bg"
                android:layout_marginLeft="20dp"
                app:commandType="@{3}"
                app:onClickCommand="@{model.myTypeCommand}"
                android:gravity="center">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="开始验证"
                    android:textColor="@color/white"
                    android:textSize="24sp"
                    android:textStyle="bold"
                    />
            </LinearLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_sj_sk"
            android:layout_width="match_parent"
            android:layout_height="75dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginBottom="30dp"
            android:background="@drawable/shape_r30_face_bg"
            app:commandType="@{4}"
            app:onClickCommand="@{model.myTypeCommand}"
            android:visibility="gone">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                android:text="请拿起酒精检测仪吹气"
                android:textColor="#ff666666"
                android:textSize="24sp"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/v_jiu_sl"
                android:layout_marginTop="42dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                >
                app:layout_constraintEnd_toEndOf="parent"/>
                <ImageView
                    android:layout_width="28dp"
                    android:layout_height="28dp"
                    android:src="@mipmap/ic_renlian"
                    android:layout_gravity="center_vertical"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="人脸验证"
                    android:textColor="#ff279baa"
                    android:textSize="24sp"
                    android:textStyle="bold"
                    android:layout_marginLeft="7dp"/>
            </LinearLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
@@ -466,5 +648,54 @@
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_jiujinOk"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/shape_jiujin_ok"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:paddingTop="50dp"
            android:paddingBottom="50dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:visibility="gone">
            <ImageView
                android:id="@+id/img_jiu"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:src="@mipmap/ic_pass"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="检测通过"
                android:textColor="#ffffffff"
                android:textSize="33sp"
                app:layout_constraintTop_toBottomOf="@+id/img_jiu"
                android:layout_marginTop="10dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <EditText
            android:id="@+id/et_ewm"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:background="@null"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
keyCabinet-android/app/src/main/res/layout/main_activity.xml
@@ -14,13 +14,13 @@
        android:layout_height="match_parent"
        tools:context=".ui.main.MainActivity"
        >
        <ImageView
            android:id="@+id/img"
            android:layout_width="50dp"
            android:layout_height="50dp"
        <TextureView
            android:id="@+id/checkNirTexture"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="0"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            />
            app:layout_constraintStart_toStartOf="parent"/>
        <TextView
            android:id="@+id/tv_m"
@@ -363,10 +363,12 @@
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.core.widget.NestedScrollView
            android:id="@+id/nsv"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_constraintTop_toTopOf="parent"
            android:background="@color/white">
            android:background="@color/white"
            android:visibility="gone">
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
@@ -399,5 +401,21 @@
        </androidx.core.widget.NestedScrollView>
        <ImageView
            android:id="@+id/img"
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            />
        <ImageView
            android:id="@+id/img_left"
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
keyCabinet-android/app/src/main/res/layout/manage_login_activity.xml
@@ -27,6 +27,18 @@
            android:layout_marginTop="90dp"
            android:layout_marginLeft="45dp"/>
        <TextView
            android:id="@+id/tv_djs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="30s"
            android:textColor="#ff279baa"
            android:textSize="24sp"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="33dp"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginRight="30dp"/>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
keyCabinet-android/app/src/main/res/layout/popup_menu_home.xml
@@ -62,44 +62,11 @@
    </RelativeLayout>
    <View
        android:id="@+id/view_2"
        android:layout_width="152dp"
        android:layout_height="1dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/relative_manager"
        android:background="#777777"/>
    <RelativeLayout
        android:id="@+id/relative_camra"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:layout_below="@id/view_2"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:background="@drawable/button_selector_homemenu_item1">
        <ImageView
            android:id="@+id/image_ca"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/icon_pop_camra" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="管理员登录"
            android:layout_toRightOf="@id/image_ca"
            android:layout_marginLeft="9dp"
            android:textColor="@color/white"
            android:textSize="16sp" />
    </RelativeLayout>
    <View
        android:id="@+id/view_3"
        android:layout_width="152dp"
        android:layout_height="1dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/relative_camra"
        android:layout_below="@id/relative_manager"
        android:background="#777777"/>
    <RelativeLayout
        android:id="@+id/rl_err"
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/default_nodata.jpg
Binary files differ
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/default_nodata.png
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_pass.png
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_viewfinder.png

keyCabinet-android/app/src/main/res/mipmap-xxhdpi/img_loading.png

keyCabinet-android/app/src/main/res/values/styles.xml
@@ -68,7 +68,7 @@
        <item name="placeholderImage">@mipmap/img_loading</item>
        <item name="placeholderImageScaleType">centerInside</item>
        <item name="failureImage">@mipmap/img_loading</item>
        <item name="failureImageScaleType">centerInside</item>
        <item name="failureImageScaleType">fitXY</item>
    </style>
    <style name="sim_head">
keyCabinet-android/app/src/test/java/com/doumee/ticketmachine/ExampleUnitTest.java
@@ -4,24 +4,19 @@
import org.junit.Test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.doumee.keyCabinet.utils.i485.SportUtils.hexToBinary;
public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() {
        String s = "80010000FFEF33B2";
        String dm = s.substring(4,12);
        System.out.println("===1>"+dm);
        dm = dm.replaceAll("0","");
        System.out.println("===2>"+dm);
        dm = SportUtils.hexToBinary(dm);
        System.out.println("===3>"+dm);
        StringBuilder sb = new StringBuilder(dm);
        dm = sb.reverse().toString();
        System.out.println("===4>"+dm);
        for(int i=1;i<=dm.length();i++){
            String key = SportUtils.intToHex(i);
            System.out.println("===>"+key+","+("1".equals(dm.substring(i-1,i))?"关":"开"));
        String s = "Result:12.00mg/100ml";
        Pattern pattern = Pattern.compile("([0-9]+\\.[0-9]+)");
        Matcher matcher = pattern.matcher(s);
        if (matcher.find()) {
            System.out.println(matcher.group(1)); // è¾“出: 12.00
        }
    }
keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
@@ -308,6 +308,17 @@
    }
    private static BDFaceImageInstance rgbInstance =null;
    private LivenessModel livenessModel;
    /**
     * 0:管理员,1:用户
     * @param groupId
     */
    public void setGroupId(String groupId){
        if(livenessModel!=null){
            livenessModel.setGroupId(groupId);
        }
    }
    /**
     * æ£€æµ‹-活体-特征-人脸检索流程
     *
@@ -318,7 +329,6 @@
     * @param faceDetectCallBack
     */
    public void onDetectCheck(
            String groupId,
        final BDFaceImageConfig bdFaceImageConfig,
        final BDFaceImageConfig bdNirFaceImageConfig,
        final BDFaceImageConfig bdDepthFaceImageConfig,
@@ -329,8 +339,7 @@
        }
        long startTime = System.currentTimeMillis();
        // åˆ›å»ºæ£€æµ‹ç»“果存储数据
        LivenessModel livenessModel = new LivenessModel();
        livenessModel.setGroupId(groupId);
        livenessModel = new LivenessModel();
        // åˆ›å»ºæ£€æµ‹å¯¹è±¡ï¼Œå¦‚果原始数据YUV,转为算法检测的图片BGR
        // TODO: ç”¨æˆ·è°ƒæ•´æ—‹è½¬è§’度和是否镜像,手机和开发版需要动态适配
        //System.out.println("==rgbInstance==>初始化");
@@ -1213,7 +1222,7 @@
                            if (feat != null && feat.getScore() > threholdScore) {
                                User userOld = FaceApi.getInstance().getUserListById(feat.getId());
                                //System.out.println("==isOk==>匹配到类型:"+userOld.getUserName());
                                if("0".equals(userOld.getGroupId())){
                                if("1".equals(userOld.getGroupId())){
                                    user = userOld;
                                    topFeature = feat;
                                    break;
keyCabinet-android/lib_coremodel/src/main/res/layout/toast_view.xml
@@ -13,7 +13,7 @@
        android:id="@+id/message"
        android:text="我是toast我是toast"
        android:textColor="@color/white"
        android:textSize="16sp"
        android:textSize="24sp"
        android:padding="@dimen/activity_horizontal_margin"
        android:background="@drawable/toast_view_bg"
        android:gravity="center"/>