package com.guang.app.activity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import com.apkfuns.logutils.LogUtils; import com.guang.app.AppConfig; import com.guang.app.R; import com.guang.app.api.ErrorCode; import com.guang.app.api.InfoApiFactory; import com.guang.app.api.JwApiFactory; import com.guang.app.model.FewSztz; import com.guang.app.model.Schedule; import com.guang.app.model.UserAccount; import com.guang.app.util.FileUtils; import com.umeng.analytics.MobclickAgent; import org.litepal.crud.DataSupport; import java.util.List; import butterknife.Bind; import butterknife.OnCheckedChanged; import butterknife.OnClick; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import static com.guang.app.AppConfig.sno; /** * Created by xiaoguang on 2017/2/13. */ public class LoginActivity extends QueryActivity { @Bind(R.id.ed_username) EditText edSno; @Bind(R.id.ed_password) EditText edpwd; @Bind(R.id.ed_jw_password) EditText edJwPwd; @Bind(R.id.cb_login_license) CheckBox cbLicense; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); edJwPwd.setVisibility(View.GONE); oldClickLoginTimes = System.currentTimeMillis(); // stopLoadingProgess(); //空指针异常,加了空判断后这个代码又无效,所以暂时不能一开始隐藏登陆界面的加载框 } int mJwOk = 0; //教务系统密码是否对 private final int mJwValueInit = 0; private final int mJwValueError = -1; private final int mJwValueOk = 1; private long oldClickLoginTimes; @OnClick(R.id.btn_login) void login() { final String sno = edSno.getText().toString().trim(); final String pwd = edpwd.getText().toString().trim(); final String jwPwd = edJwPwd.getText().toString().trim(); if (TextUtils.isEmpty(sno) || TextUtils.isEmpty(pwd) || (edJwPwd.getVisibility() == View.VISIBLE && TextUtils.isEmpty(jwPwd))) { Toast.makeText(this, "还没输入完呢", Toast.LENGTH_SHORT).show(); return; } if (!cbLicense.isChecked()) { Toast.makeText(this, "请先勾选下方协议", Toast.LENGTH_SHORT).show(); return; } long curTimes = System.currentTimeMillis(); if( (curTimes - oldClickLoginTimes)/1000 <= 2){ Toast.makeText(this, "稍等,不要频繁登陆", Toast.LENGTH_SHORT).show(); return; } oldClickLoginTimes = curTimes; //拦截的请求会带AppConfig的账号密码,但没登陆的时候又不会去设置这个值 //故有下面两行代码,然后Activity检测登陆也需要判断本地文件,不能只根据这个属性 AppConfig.sno = sno; AppConfig.idsPwd = AppConfig.jwPwd = pwd; //默认两系统一样 if (edJwPwd.getVisibility() == View.VISIBLE) { AppConfig.jwPwd = jwPwd; } mJwOk = mJwValueInit; //检测教务系统密码对错 startLoadingProgess(); JwApiFactory jwApiFactory = JwApiFactory.getInstance(); jwApiFactory.getSchedule("", JwApiFactory.MERGE_SCHEDULE, new Observer<List<Schedule>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(List<Schedule> value) { if (value.size() == 0) {//账号对,但没课表(如没课) return; } mJwOk = mJwValueOk; //教务通 DataSupport.deleteAll(Schedule.class); DataSupport.saveAll(value); } @Override public void onError(Throwable e) { if ( (ErrorCode.pwdError + "").equals(e.getLocalizedMessage())) { LogUtils.e("教务密码错误-根据code判断出"); Toast.makeText(LoginActivity.this, "教务系统密码错误,请手动输入", Toast.LENGTH_SHORT).show(); mJwOk = mJwValueError; edJwPwd.setVisibility(View.VISIBLE); return; } LogUtils.e(e.getMessage()); Toast.makeText(LoginActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onComplete() { } }); InfoApiFactory infoFactory = InfoApiFactory.getInstance(); infoFactory.getFewSztz(new Observer<List<FewSztz>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(List<FewSztz> value) { if (mJwOk == mJwValueError) { //教务密码错,因为两个请求网络顺序问题不一定错的时候能判断出,但出现这情况肯定教务密码错 LogUtils.e("教务密码错,信息门户对"); return; } FileUtils.setStoredAccount(LoginActivity.this, new UserAccount(sno, AppConfig.idsPwd, AppConfig.jwPwd)); AppConfig.defaultPage = AppConfig.DefaultPage.HOME; //默认首页为课表 MobclickAgent.onProfileSignIn(sno);//友盟统计用户信息 startActivity(new Intent(LoginActivity.this, MainActivity.class)); LoginActivity.this.finish(); } @Override public void onError(Throwable e) { LogUtils.e(e.getMessage()); Toast.makeText(LoginActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show(); stopLoadingProgess(); } @Override public void onComplete() { stopLoadingProgess(); } }); } @OnCheckedChanged(R.id.cb_login_license) void checkLicense(boolean checked){ if(checked){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("该APP为广财学生作品,非官方产品,但除测试外,作者不会盗取你的个人信息。But 若账号被盗,该产品不因此负任何责任。"); builder.setTitle("使用需知"); builder.setNeutralButton("不同意",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialogInterface, int which) { cbLicense.setChecked(false); } }); builder.setPositiveButton("我放心",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialogInterface, int which) { } }); builder.create().show(); } } @OnClick(R.id.login_tv_pwd_same) void showJwPwdTextview() { if(edJwPwd.getVisibility() == View.VISIBLE){ edJwPwd.setVisibility(View.GONE); }else{ edJwPwd.setVisibility(View.VISIBLE); } } //校友登陆,不要求签许可,默认假定后台的账号密码都是对的,不做密码判断处理了 @OnClick(R.id.login_tv_schoolmate) void schoolmateLogin() { long curTimes = System.currentTimeMillis(); if( (curTimes - oldClickLoginTimes)/1000 <= 2){ Toast.makeText(this, "稍等,不要频繁登陆", Toast.LENGTH_SHORT).show(); return; } oldClickLoginTimes = curTimes; AppConfig.sno = AppConfig.schoolmateSno; AppConfig.idsPwd = AppConfig.jwPwd = AppConfig.schoolmatePwd; FileUtils.setStoredAccount(LoginActivity.this, new UserAccount(AppConfig.sno, AppConfig.idsPwd, AppConfig.jwPwd)); AppConfig.defaultPage = AppConfig.DefaultPage.HOME; //默认首页为课表 MobclickAgent.onProfileSignIn(sno);//友盟统计用户信息 startActivity(new Intent(LoginActivity.this, MainActivity.class)); LoginActivity.this.finish(); } }