package com.community.pocket.ui.register; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.community.pocket.R; import com.community.pocket.ui.BaseActivity; import com.community.pocket.ui.login.LoginActivity; import com.community.pocket.util.PropertiesUtil; import org.xutils.view.annotation.ContentView; import org.xutils.view.annotation.Event; import org.xutils.view.annotation.ViewInject; /** * 注册界面 */ @ContentView(R.layout.activity_register) public class RegisterActivity extends BaseActivity { private RegisterViewModel registerViewModel; //用户名 @ViewInject(R.id.username) private EditText username; //密码 @ViewInject(R.id.password) private EditText password; //确认密码 @ViewInject(R.id.confirmPassword) private EditText confirmPassword; //手机号 @ViewInject(R.id.phone) private EditText mobiePhone; //邮箱 @ViewInject(R.id.email) private EditText email; //注册按钮 @ViewInject(R.id.register) private Button registerButton; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerViewModel = new ViewModelProvider(this, new RegisterViewModelFactory()).get(RegisterViewModel.class); //监听注册表单校验状态 registerViewModel.getRegisterFormState().observe(this, new Observer() { @Override public void onChanged(RegisterFormState registerFormState) { if (registerFormState == null) { return; } registerButton.setEnabled(registerFormState.isDataValid()); if (registerFormState.getUsernameError() != null) { username.setError(getString(registerFormState.getUsernameError(), PropertiesUtil.getIntValue("username.length"))); } if (registerFormState.getPasswordError() != null) { password.setError(getString(registerFormState.getPasswordError(), PropertiesUtil.getIntValue("password.length"))); } if (registerFormState.getConfirmPasswordError() != null) { if (registerFormState.getConfirmPasswordError() == R.string.invalid_password) { confirmPassword.setError(getString(registerFormState.getConfirmPasswordError(), PropertiesUtil.getIntValue("password.length"))); } else { confirmPassword.setError(getString(registerFormState.getConfirmPasswordError())); } } if (registerFormState.getPhoneError() != null) { mobiePhone.setError(getString(registerFormState.getPhoneError())); } if (registerFormState.getEmailError() != null) { email.setError(getString(registerFormState.getEmailError())); } } }); TextWatcher afterTextChangedListener = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // ignore } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // ignore } @Override public void afterTextChanged(Editable s) { registerViewModel.registerDataChanged(username.getText().toString(), password.getText().toString(), confirmPassword.getText().toString(), mobiePhone.getText().toString(), email.getText().toString()); } }; username.addTextChangedListener(afterTextChangedListener); password.addTextChangedListener(afterTextChangedListener); confirmPassword.addTextChangedListener(afterTextChangedListener); mobiePhone.addTextChangedListener(afterTextChangedListener); email.addTextChangedListener(afterTextChangedListener); //监听注册请求结果 registerViewModel.getRegisterResult().observe(this, new Observer() { @Override public void onChanged(RegisterResult registerResult) { if (registerResult == null) { return; } if (registerResult.getError() != null) { Toast.makeText(getApplicationContext(), R.string.register_fail, Toast.LENGTH_SHORT).show(); } if (registerResult.getSuccess() != null) { Toast.makeText(getApplicationContext(), R.string.register_ok, Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(), LoginActivity.class)); //Complete and destroy login activity once successful finish(); } setResult(Activity.RESULT_OK); } }); } @Event(value = R.id.register) private void register(View v) { registerViewModel.register(username.getText().toString(), password.getText().toString(), confirmPassword.getText().toString(), mobiePhone.getText().toString(), email.getText().toString()); } @Event(value = R.id.back) private void back(View v) { startActivity(new Intent(this, LoginActivity.class)); finish(); } }