LoginActivity.java 8.94 KB
package com.huaheng.wms;

import android.app.Activity;
import android.app.DownloadManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.app.AlertDialog;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.huaheng.wms.bean.ApkInfo;
import com.huaheng.wms.bean.UserBean;
import com.huaheng.wms.download.DownloadUtils;
import com.huaheng.wms.facedete.FingerprintManagerUtil;
import com.huaheng.wms.https.HttpInterface;
import com.huaheng.wms.https.Subscribers.ProgressSubscriber;
import com.huaheng.wms.https.Subscribers.SubscriberOnNextListener;
import com.huaheng.wms.util.Constant;
import com.huaheng.wms.util.SpeechUtil;
import com.huaheng.wms.util.WMSUtils;
import com.huaheng.wms.work.login.ChooseCompanyActivity;
import com.huaheng.wms.work.login.WareHouseActivity;

import java.io.File;
import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Subscriber;


public class LoginActivity extends Activity{

    @BindView(R.id.userEdit)
    EditText userEdit;
    @BindView(R.id.passwordEdit)
    EditText passwordEdit;
    @BindView(R.id.loginBtn)
    Button loginBtn;
    @BindView(R.id.eyeImage)
    ImageView eyeImage;
    private Context mContext;
    private boolean passwordType = false;
    private AlertDialog alertDialog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
        mContext = this;
        initView();
        WMSUtils.acquireWakeLock(mContext);
        WMSUtils.requestAppPermission(LoginActivity.this);
        getUpdateApkInfo();
    }

    @Override
    protected void onResume() {
        super.onResume();
        startVerification();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    private void initView() {
        String userName = WMSUtils.getData(Constant.LOGIN_NAME);
        if (userName != null) {
            userEdit.setText(userName);
            WMSUtils.requestFocus(passwordEdit);
        }
        passwordEdit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                login();
                return false;
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_MENU) {
            WMSUtils.startActivity(mContext, NetworkSettingActivity.class);
        }
        return super.onKeyDown(keyCode, event);
    }

    @OnClick({R.id.eyeImage, R.id.loginBtn, R.id.logo})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.eyeImage:
                if (passwordType) {
                    passwordEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
                    passwordType = false;
                    eyeImage.setImageResource(R.mipmap.eye);
                } else {
                    passwordEdit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                    passwordType = true;
                    eyeImage.setImageResource(R.mipmap.eyeoff);
                }
                break;
            case R.id.loginBtn:
                login();
                break;
            case R.id.logo:
                WMSUtils.startActivity(mContext, NetworkSettingActivity.class);
                break;
        }
    }

    private void startVerification() {
        FingerprintManagerUtil.startFingerprinterVerification(this,
                new FingerprintManagerUtil.FingerprintListenerAdapter() {

                    @Override
                    public void onAuthenticationStart() {
                        AlertDialog.Builder builder = new AlertDialog.Builder(mContext)
                                .setTitle("通过指纹验证")
                                .setMessage("请轻触感应器验证指纹")
                                .setCancelable(false)
                                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        FingerprintManagerUtil.cancel();
                                    }
                                });
                        alertDialog = builder.create();
                        alertDialog.show();
                    }

                    @Override
                    public void onNonsupport() {
//                        Toast.makeText(mContext, "不支持指纹验证", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onEnrollFailed() {
                        Toast.makeText(mContext, "没有录入指纹", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                        alertDialog.dismiss();
                        passwordEdit.setText(WMSUtils.getData(Constant.LOGIN_PASSWORD));
                        login();
                        Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAuthenticationFailed() {
                        Toast.makeText(mContext, "验证失败", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAuthenticationError(int errMsgId, CharSequence errString) {
                        Toast.makeText(mContext, "提示: " + errString, Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                        Toast.makeText(mContext, "提示: " + helpString, Toast.LENGTH_SHORT).show();
                    }
                });
    }

    private void login() {
        String userName =  userEdit.getText().toString();
        String password = passwordEdit.getText().toString();
        if (TextUtils.isEmpty(userName)) {
            WMSUtils.showShort(mContext.getString(R.string.enter_username));
            WMSUtils.requestFocus(userEdit);
            return;
        }

        if (TextUtils.isEmpty(password)) {
            WMSUtils.showShort(mContext.getString(R.string.enter_password));
            WMSUtils.requestFocus(passwordEdit);
            return;
        }
        HttpInterface.getInsstance().reset();
        HttpInterface.getInsstance().login(new ProgressSubscriber<ArrayList<UserBean>>(mContext, loginListener), userName, password);
    }

    SubscriberOnNextListener loginListener = new SubscriberOnNextListener<ArrayList<UserBean>>() {
        @Override
        public void onNext(ArrayList<UserBean> userBean) {
            SpeechUtil.getInstance(mContext).speech(mContext.getString(R.string.login_success));
            String passwword  = passwordEdit.getText().toString();
            WMSUtils.saveData(Constant.LOGIN_PASSWORD, passwword);
            insertUserInfo(userEdit.getText().toString());
            passwordEdit.setText("");
            Intent intent = new Intent();
            intent.setClass(mContext, ChooseCompanyActivity.class);
            Bundle bundle = new Bundle();
            bundle.putParcelableArrayList("userBean", userBean);// 序列化
            intent.putExtras(bundle);// 发送数据
            startActivity(intent);
        }

        @Override
        public void onError(String str) {
            passwordEdit.setText("");
        }
    };

    private void insertUserInfo(String userName) {
        WMSUtils.saveData(Constant.LOGIN_NAME, userName);
    }

    private void getUpdateApkInfo() {
        HttpInterface.getInsstance().getUpdateApkInfo(new Subscriber<ApkInfo>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(ApkInfo apkInfo) {
                String url = apkInfo.getUrl();
                String md5 = apkInfo.getMd5();
                int version  = apkInfo.getVersionCode();
                DownloadUtils.as(mContext).download(url, md5, version);
            }
        }, WMSUtils.getPackageName(), String.valueOf(WMSUtils.getVersionCode()));
    }
}