finished activity: register

This commit is contained in:
free will
2021-07-12 10:53:40 +08:00
parent 4722e8e72b
commit 959b60ac32
3 changed files with 266 additions and 5 deletions
@@ -7,5 +7,233 @@ package com.pkusz.min_vpn_client.activity.register;
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
*/
public class RegisterActivity {
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.pkusz.min_vpn_client.R;
import com.pkusz.min_vpn_client.activity.base.MINVpnBaseActivity;
import com.pkusz.min_vpn_client.activity.login.LoginActivity;
import com.pkusz.min_vpn_client.activity.setting.SettingActivity;
import com.pkusz.min_vpn_client.utils.AccountValidatorRegexUtil;
import com.pkusz.min_vpn_client.utils.Base64Util;
import com.pkusz.min_vpn_client.utils.KeyManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import br.com.simplepass.loadingbutton.customViews.CircularProgressButton;
import cn.qjm253.min_vpn.extensions.ActivityExtensionsKt;
import cn.qjm253.quick_android_base.GlideApp;
import cn.qjm253.quick_android_base.extensions.ContextExtensionKt;
import cn.qjm253.quick_android_base.extensions.ViewExtensionKt;
import cn.qjm253.quick_android_base.util.DisplayUtils;
import cn.qjm253.quick_android_custom_view.other.ClearAbleEditText;
import cn.qjm253.quick_android_easy_bar.EasyBar;
import cn.qjm253.quick_android_easy_bar.EasyBarExtensionsKt;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class RegisterActivity extends MINVpnBaseActivity<RegisterActivityPresenter>
implements RegisterActivityContract.View{
// 界面变量区
private EasyBar easyBar;
private ImageView imgLogo;
private CircularProgressButton btnRegister;
private ClearAbleEditText etPhoneNumber;
private ClearAbleEditText etUsername;
private ClearAbleEditText etPassword;
private ClearAbleEditText etEmail;
private ClearAbleEditText etInviteCode;
private ClearAbleEditText etRePassword;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
// 初始化各个组件
easyBar=findViewById(R.id.easyBar);
imgLogo=findViewById(R.id.imgLogo);
btnRegister=findViewById(R.id.btnRegister);
etPhoneNumber=findViewById(R.id.etPhoneNumber);
etUsername=findViewById(R.id.etUsername);
etPassword=findViewById(R.id.etPassword);
etEmail=findViewById(R.id.etEmail);
etInviteCode=findViewById(R.id.etInviteCode);
etRePassword=findViewById(R.id.etRePassword);
initView();
}
private void initView(){
// 初始化bar
EasyBarExtensionsKt.init(easyBar, EasyBar.Mode.ICON, "",
(Function1<View, Unit>) view -> {
onBackPressed();
return null;
},
(Function1<View, Unit>) view -> {
return null;
},
R.drawable.scan, R.drawable.setting, "", "", R.string.register,
true, R.color.white);
GlideApp.with(this)
.load(R.drawable.logo)
.circleCrop()
.into(imgLogo);
btnRegister.setBackgroundResource(R.drawable.button_shape_default);
btnRegister.setOnClickListener(v->{
ContextExtensionKt.hideSoftKeyboard(this,btnRegister);
btnRegister.startMorphAnimation();
String phone= Objects.requireNonNull(etPhoneNumber.getText()).toString().trim();
if(phone.length()==0){
showWarning("手机号不能为空");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isMobile(phone)){
showWarning("请输入有效的手机号");
btnRegister.revertAnimation();
return;
}
String email = Objects.requireNonNull(etEmail.getText()).toString().trim();
if(email.length()==0){
showWarning("电子邮箱不能为空");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isEmail(email)){
showWarning("请输入有效的电子邮箱");
btnRegister.revertAnimation();
return;
}
String username= Objects.requireNonNull(etUsername.getText()).toString().trim();
String password= Objects.requireNonNull(etPassword.getText()).toString().trim();
String rePassword= Objects.requireNonNull(etPassword.getText()).toString().trim();
String inviteCode= Objects.requireNonNull(etInviteCode.getText()).toString().trim();
if(username.length()==0 || password.length()==0 || rePassword.length()==0 || inviteCode.length()==0){
showWarning("请将信息填写完整");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isUsername(username)){
showWarning("请输入有效的用户名,用户名长度需要大于0小于20");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isPassword(password)){
showWarning("请输入有效的密码,密码为8-16位,必须包含大小写字母和特殊符号");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isPassword(rePassword)){
showWarning("请输入有效的密码,密码为8-16位,必须包含大小写字母和特殊符号");
btnRegister.revertAnimation();
return;
}
if(!AccountValidatorRegexUtil.INSTANCE.isInviteCode(inviteCode)){
showWarning("请输入有效的邀请码,邀请码长度需要大于0小于20");
btnRegister.revertAnimation();
return;
}
if(!password.equals(rePassword)){
showWarning("两次输入的密码不一致");
btnRegister.revertAnimation();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
username= Base64Util.Base64PlusEncode(username);
}else{
showWarning("username base64 error");
return;
}
System.out.println("username: "+username);
// todo: 这里存疑
byte[] certification= KeyManager.INSTANCE.initKeyChain("/"+username)
.getCertification("/"+username).getSignature();
// todo: 发送注册信息
});
// 监听键盘是否弹起
ActivityExtensionsKt.listenKeyboardVisible(this,(isOpen)->{
if(isOpen){
ViewExtensionKt.animer(imgLogo,
ViewExtensionKt.scaleXAnimation(imgLogo,1f, 0.5f),
ViewExtensionKt.scaleYAnimation(imgLogo,1f, 0.5f),
ViewExtensionKt.transYAnimation(imgLogo,
0f, -DisplayUtils.dp2px(this, 40)),
ViewExtensionKt.transYAnimation(etUsername,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(etPassword,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(etRePassword,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(etPhoneNumber,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(etInviteCode,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(etEmail,
0f, -DisplayUtils.dp2px(this, 90)),
ViewExtensionKt.transYAnimation(btnRegister,
0f, -DisplayUtils.dp2px(this, 90))
);
}else{
ViewExtensionKt.animer(imgLogo,
ViewExtensionKt.scaleXAnimation(imgLogo, 0.5f,1f),
ViewExtensionKt.scaleYAnimation(imgLogo, 0.5f,1f),
ViewExtensionKt.transYAnimation(imgLogo,
-DisplayUtils.dp2px(this, 40),0f),
ViewExtensionKt.transYAnimation(etUsername,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(etPassword,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(etRePassword,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(etPhoneNumber,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(etInviteCode,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(etEmail,
-DisplayUtils.dp2px(this, 90),0f),
ViewExtensionKt.transYAnimation(btnRegister,
-DisplayUtils.dp2px(this, 90),0f)
);
}
return null;
});
}
@NotNull
@Override
public RegisterActivityPresenter onCreatePresenter() {
return new RegisterActivityPresenter(this);
}
@Override
public void registerSuccess() {
Toast.makeText(getApplicationContext(),"注册成功",Toast.LENGTH_SHORT).show();
ContextExtensionKt.jumpTo(this, LoginActivity.class);
btnRegister.revertAnimation();
}
@Override
public void registerFailed(String errMsg) {
toast("注册失败: "+errMsg);
btnRegister.revertAnimation();
}
}
@@ -19,16 +19,16 @@ public class RegisterActivityModel implements RegisterActivityContract.Model{
@Override
public void register(RegisterRequest registerRequest) {
mPresenter.registerSuccess();
}
@Override
public void registerWithSafetyInfo(RegisterRequest registerRequest, Context context) {
mPresenter.registerSuccess();
}
@Override
public void uploadRegisterFacePicture(String username, RegisterRequest registerRequest, Context context) {
// 废弃接口。
}
}
@@ -7,5 +7,38 @@ package com.pkusz.min_vpn_client.activity.register;
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
*/
public class RegisterActivityPresenter {
import android.content.Context;
import com.pkusz.min_vpn_client.model.request.RegisterRequest;
public class RegisterActivityPresenter extends RegisterActivityContract.Presenter{
public RegisterActivityPresenter(RegisterActivity registerActivity){
mView=registerActivity;
mModel=new RegisterActivityModel(this);
}
@Override
void registerSuccess() {
mView.registerSuccess();
}
@Override
void registerFailed(String errMsg) {
mView.registerFailed(errMsg);
}
@Override
void register(RegisterRequest registerRequest) {
mModel.register(registerRequest);
}
@Override
void registerWithSafetyInfo(RegisterRequest registerRequest, Context context) {
mModel.registerWithSafetyInfo(registerRequest,context);
}
@Override
void uploadRegisterFacePicture(String username, RegisterRequest registerRequest, Context context) {
mModel.uploadRegisterFacePicture(username, registerRequest, context);
}
}