package net.coding.program.setting;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import com.loopj.android.http.RequestParams;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.SimpleSHA1;
import net.coding.program.common.WeakRefHander;
import net.coding.program.common.base.MyJsonResponse;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.util.ViewStyleUtil;
import net.coding.program.common.widget.LoginEditText;
import net.coding.program.login.auth.AuthInfo;
import net.coding.program.login.auth.TotpClock;
import net.coding.program.model.AccountInfo;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import org.json.JSONObject;
@EActivity(R.layout.activity_modify_email)
public class ModifyEmailActivity extends BackActivity {
@ViewById
TextView okButton;
@ViewById
LoginEditText emailEdit, captchaEdit, passwordEdit, twoFAEdit;
Handler handler2FA;
@AfterViews
void initModifyEmailActivity() {
String emailString = MyApp.sUserObject.email;
if (emailString.isEmpty()) {
setTitle("绑定邮箱");
}
handler2FA = new WeakRefHander(msg -> {
if (twoFAEdit.getVisibility() == View.VISIBLE) {
String secret = AccountInfo.loadAuth(this, MyApp.sUserObject.global_key);
if (secret.isEmpty()) {
return true;
}
String code2FA = new AuthInfo(secret, new TotpClock(this)).getCode();
twoFAEdit.setText(code2FA);
}
return true;
}, 100);
final String url = Global.HOST_API + "/user/2fa/method";
MyAsyncHttpClient.get(this, url, new MyJsonResponse(this) {
@Override
public void onMySuccess(JSONObject response) {
String type = response.optString("data");
if (type.equals("password")) {
passwordEdit.setVisibility(View.VISIBLE);
twoFAEdit.setVisibility(View.GONE);
ViewStyleUtil.editTextBindButton(okButton, emailEdit, captchaEdit, passwordEdit);
} else {
passwordEdit.setVisibility(View.GONE);
twoFAEdit.setVisibility(View.VISIBLE);
ViewStyleUtil.editTextBindButton(okButton, emailEdit, captchaEdit, twoFAEdit);
handler2FA.sendEmptyMessage(0);
}
}
});
}
@Override
protected void onDestroy() {
if (handler2FA != null) {
handler2FA.removeMessages(0);
}
super.onDestroy();
}
@Click
void okButton() {
final String url = Global.HOST_API + "/account/email/change/send";
RequestParams param = new RequestParams();
String email = emailEdit.getTextString();
String captch = captchaEdit.getTextString();
String twoFA;
if (passwordEdit.getVisibility() == View.VISIBLE) {
twoFA = SimpleSHA1.sha1(passwordEdit.getTextString());
} else {
twoFA = twoFAEdit.getTextString();
}
param.put("email", email);
param.put("j_captcha", captch);
param.put("two_factor_code", twoFA);
MyAsyncHttpClient.post(this, url, param, new MyJsonResponse(this) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
showProgressBar(false);
showMiddleToast("发送验证邮件成功");
finish();
}
@Override
public void onMyFailure(JSONObject response) {
super.onMyFailure(response);
showProgressBar(false);
captchaEdit.requestCaptcha();
captchaEdit.setText("");
}
});
showProgressBar(true);
}
}