package com.dinhcv.lifelogpedometer.activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.DatePicker; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.dinhcv.lifelogpedometer.LifeLogApplication; import com.dinhcv.lifelogpedometer.R; import com.dinhcv.lifelogpedometer.customview.SimpleSelectBoxDialogBuilder; import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; import com.dinhcv.lifelogpedometer.interfaces.OnSelectResultListener; import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo; import com.dinhcv.lifelogpedometer.model.structure.SelectItemInfo; import com.dinhcv.lifelogpedometer.portal.ApiServices; import com.dinhcv.lifelogpedometer.portal.LLAPIManager; import com.dinhcv.lifelogpedometer.utils.Debug; import com.dinhcv.lifelogpedometer.utils.Utils; import org.json.JSONArray; import org.json.JSONObject; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Calendar; import java.util.Date; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import de.hdodenhof.circleimageview.CircleImageView; public class RegisterActivity extends ActivityBase { @BindView(R.id.edt_user) EditText edtUsername; @BindView(R.id.edt_name) EditText edtName; @BindView(R.id.edt_nickName) EditText edtNickName; @BindView(R.id.edt_email) EditText edtEmail; @BindView(R.id.edt_password) EditText edtPassword; @BindView(R.id.edt_confirmPass) EditText edtConfirmPass; @BindView(R.id.tv_sex) TextView tvSex; @BindView(R.id.tv_birthday) TextView tvBirthday; @BindView(R.id.edt_height) EditText edtHeight; @BindView(R.id.edt_weight) EditText edtWeight; @BindView(R.id.edt_bodyFat) EditText edtBodyFat; @BindView(R.id.tv_address) TextView tvAddress; @BindView(R.id.edt_comment) EditText edtComment; @BindView(R.id.ll_low) LinearLayout llLow; @BindView(R.id.tv_low) TextView tvLow; @BindView(R.id.ll_mid) LinearLayout llMid; @BindView(R.id.tv_mid) TextView tvMid; @BindView(R.id.ll_hight) LinearLayout llHight; @BindView(R.id.tv_hight) TextView tvHight; @BindView(R.id.profile_image) CircleImageView profileImage; private List sexList; private List provinceList; private LifeLogApplication mLifeLogApplication; private SelectItemInfo sexInfo; private SelectItemInfo provinceInfo; private Calendar mCalendar; private int mDay; private int mMonth; private int mYear; private Date mBirthDay; private int level = 0; private static final int RESULT_LOAD_IMG = 99; private RegisterInfo mRegisterInfo; private String profileImagePath; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); ButterKnife.bind(this); mLifeLogApplication = (LifeLogApplication) getApplication(); initData(); initView(); } private void initData() { sexList = mLifeLogApplication.getSexList(); provinceList = mLifeLogApplication.getProvinceList(); mCalendar = Calendar.getInstance(); mDay = mCalendar.get(Calendar.DAY_OF_MONTH); mMonth = mCalendar.get(Calendar.MONTH); mYear = mCalendar.get(Calendar.YEAR); } private void initView() { } private boolean checkData() { String userName = edtUsername.getText().toString(); String name = edtName.getText().toString(); String nickName = edtNickName.getText().toString(); String email = edtEmail.getText().toString(); String pass = edtPassword.getText().toString(); String confirmPass = edtConfirmPass.getText().toString(); //sexInfo //birthday String height = edtHeight.getText().toString(); String weight = edtWeight.getText().toString(); String bodyFat = edtBodyFat.getText().toString(); // address String comment = edtComment.getText().toString(); if (userName.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.username_null)); return false; } if (name.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.name_null)); return false; } if (nickName.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.nickname_null)); return false; } if (email.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_null)); return false; } else { if (!Utils.checkMailFormat(email)) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_invalid)); return false; } } if (pass.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_null)); return false; }else { if (pass.length() < 6) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_less_6)); return false; } } if (confirmPass.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_null)); return false; } if (!pass.equals(confirmPass)) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_wrong)); return false; } if (sexInfo == null) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.sex_not_select)); return false; } if (mBirthDay == null) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.birthday_not_select)); return false; } if (height.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.height_null)); return false; } if (weight.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.weight_null)); return false; } if (bodyFat.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.body_fat_percent_null)); return false; } if (provinceInfo == null) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.province_not_select)); return false; } if (level == 0) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.level_not_select)); return false; } if (comment.isEmpty()) { showAlerDialog(RegisterActivity.this, getResources().getString(R.string.comment_null)); return false; } mRegisterInfo = new RegisterInfo(); mRegisterInfo.setUsername(userName); mRegisterInfo.setFullName(name); mRegisterInfo.setNickname(nickName); mRegisterInfo.setPassword(pass); mRegisterInfo.setBirthday(mBirthDay); mRegisterInfo.setHeight(Integer.valueOf(height)); mRegisterInfo.setWeight(Integer.valueOf(weight)); mRegisterInfo.setFatRate(Integer.valueOf(bodyFat)); mRegisterInfo.setGender(sexInfo.getId()); mRegisterInfo.setAddress(provinceInfo.getName()); mRegisterInfo.setEmail(email); mRegisterInfo.setProfileImage(profileImagePath); return true; } private void handleRegister() { progressDialog = new ProgressDialog(RegisterActivity.this); progressDialog.setMessage(getResources().getString(R.string.uploading)); progressDialog.setCancelable(false); progressDialog.show(); ApiServices.register(mRegisterInfo, new LLAPIManagerListener() { @Override public void onError(Error error) { progressDialog.dismiss(); Debug.error(" Can not upload data"); if (error != null) { String err = getResources().getString(R.string.register_err); notifyErr(err); } } @Override public void onSuccess(String json) { progressDialog.dismiss(); if (json != null) { Debug.warn(" Upload data success success"); Debug.warn("DATA JSON result: " + json.toString()); registerDone(); } else { Debug.warn(" Upload data fail: response null"); String err = getResources().getString(R.string.err_exception); notifyErr(err); } } @Override public void onSuccess(JSONObject object) { Debug.warn("Version JSON object result: Success"); progressDialog.dismiss(); String email = object.optString("email"); String username = object.optString("username"); String pass = object.optString("password"); Debug.normal("Email: "+email +"\n"+ "Username: "+username); // save data Setting.setUserDataSharepre(RegisterActivity.this, Setting.EMAIL_SHAREPRE, email); Setting.setUserDataSharepre(RegisterActivity.this, Setting.USER_SHAREPRE, username); Setting.setUserDataSharepre(RegisterActivity.this, Setting.PASS_SHAREPRE, pass); registerDone(); } }); } private void hanleGetImagePath(Bitmap bitmap){ progressDialog = new ProgressDialog(RegisterActivity.this); progressDialog.setMessage(getResources().getString(R.string.uploading)); progressDialog.setCancelable(false); progressDialog.show(); ApiServices.uploadImage(bitmap, new LLAPIManagerListener() { @Override public void onError(Error error) { progressDialog.dismiss(); Debug.error(" Can not upload data"); if (error != null) { String err = getResources().getString(R.string.register_err); notifyErr(err); } } @Override public void onSuccess(String urlImage) { if (urlImage != null) { progressDialog.dismiss(); Debug.warn(" Upload data success success"); Debug.warn("DATA JSON result: " + urlImage); uploadImageDone(urlImage); } else { progressDialog.dismiss(); Debug.warn(" Upload data fail: response null"); String err = getResources().getString(R.string.err_exception); notifyErr(err); } } @Override public void onSuccess(JSONObject array) { progressDialog.dismiss(); Debug.warn(" Upload data success array"); } }); } private void registerDone(){ Toast.makeText(RegisterActivity.this, R.string.register_success, Toast.LENGTH_SHORT).show(); finish(); } private void uploadImageDone(String path){ profileImagePath = path; } private void notifyErr(String err) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this); alertDialog.setMessage(err); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.show(); } private void doSelectSex() { String title = getResources().getString(R.string.sex); new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, sexList, new OnSelectResultListener() { @Override public void onSelectedItem(SelectItemInfo selectItemInfo) { if (selectItemInfo != null) { Debug.normal("Item selected: " + selectItemInfo.getName()); sexInfo = selectItemInfo; tvSex.setText(sexInfo.getName()); } else { Debug.normal("Have not item selected"); } } }).show(); } private void doSelectProvince() { String title = getResources().getString(R.string.prefecture); new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, provinceList, new OnSelectResultListener() { @Override public void onSelectedItem(SelectItemInfo selectItemInfo) { if (selectItemInfo != null) { Debug.normal("Item selected: " + selectItemInfo.getName()); provinceInfo = selectItemInfo; tvAddress.setText(provinceInfo.getName()); } else { Debug.normal("Have not item selected"); } } }).show(); } private void hanleSelectDate() { DatePickerDialog datePicker = new DatePickerDialog(RegisterActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { mDay = dayOfMonth; mMonth = month; mYear = year; mCalendar = Calendar.getInstance(); mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); mCalendar.set(Calendar.MONTH, month); mCalendar.set(Calendar.YEAR, year); mBirthDay = mCalendar.getTime(); String dateStr = Utils.convertDateToStringDialogSelect(mBirthDay); tvBirthday.setText(dateStr); } }, mYear, mMonth, mDay); datePicker.getDatePicker().setMaxDate(new Date().getTime()); datePicker.show(); } private void updateUILevel() { if (level == 1) { setLowButtonSelected(true); setMidButtonSelected(false); setHightButtonSelected(false); } else if (level == 2) { setLowButtonSelected(false); setMidButtonSelected(true); setHightButtonSelected(false); } else if (level == 3) { setLowButtonSelected(false); setMidButtonSelected(false); setHightButtonSelected(true); } else { setLowButtonSelected(false); setMidButtonSelected(false); setHightButtonSelected(false); } } private void setLowButtonSelected(boolean b) { if (b) { llLow.setBackgroundResource(R.drawable.left_selected_lev_bg); tvLow.setTextColor(getResources().getColor(R.color.white)); } else { llLow.setBackgroundResource(R.drawable.left_unselected_lev_bg); tvLow.setTextColor(getResources().getColor(R.color.black)); } } private void setMidButtonSelected(boolean b) { if (b) { llMid.setBackgroundResource(R.drawable.mid_selected_lev_bg); tvMid.setTextColor(getResources().getColor(R.color.white)); } else { llMid.setBackgroundResource(R.drawable.mid_unselected_lev_bg); tvMid.setTextColor(getResources().getColor(R.color.black)); } } private void setHightButtonSelected(boolean b) { if (b) { llHight.setBackgroundResource(R.drawable.right_selected_lev_bg); tvHight.setTextColor(getResources().getColor(R.color.white)); } else { llHight.setBackgroundResource(R.drawable.right_unselected_lev_bg); tvHight.setTextColor(getResources().getColor(R.color.black)); } } private void getImageBrower() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, RESULT_LOAD_IMG); } @OnClick({R.id.btn_register, R.id.rl_sex, R.id.rl_birthday, R.id.rl_address, R.id.ll_low, R.id.ll_mid, R.id.ll_hight, R.id.profile_image}) public void onClick(View v) { switch (v.getId()) { case R.id.btn_register: if (checkData()) { handleRegister(); } break; case R.id.rl_sex: doSelectSex(); break; case R.id.rl_birthday: hanleSelectDate(); break; case R.id.rl_address: doSelectProvince(); break; case R.id.ll_low: level = 1; updateUILevel(); break; case R.id.ll_mid: level = 2; updateUILevel(); break; case R.id.ll_hight: level = 3; updateUILevel(); break; case R.id.profile_image: getImageBrower(); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (requestCode == RESULT_LOAD_IMG) { try { final Uri imageUri = data.getData(); final InputStream imageStream = getContentResolver().openInputStream(imageUri); final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); hanleGetImagePath(selectedImage); profileImage.setImageBitmap(selectedImage); } catch (FileNotFoundException e) { e.printStackTrace(); Toast.makeText(RegisterActivity.this, "Something went wrong", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(RegisterActivity.this, "You haven't picked Image", Toast.LENGTH_LONG).show(); } } } }