package my.project.easyrecharge.activity; import my.project.easyrecharge.F; import my.project.easyrecharge.F.Method; import my.project.easyrecharge.R; import my.project.easyrecharge.contants.Key; import my.project.easyrecharge.contants.RequestCode; import my.project.easyrecharge.model.Apart; import my.project.easyrecharge.model.School; import my.project.easyrecharge.model.VersionServer; import my.project.easyrecharge.view.ClearEditText; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; /** * Basic Information Choose Page, including School/Apart/Room * * @author roy * @email onecoders@gmail.com * * @TODO 先获取school的id/name/icon信息,支付时,获取所选的alipay信息 */ public abstract class ActBasicInfo extends ActEdittextFocus implements TextWatcher { protected RelativeLayout roomContainer, schoolContainer, apartContainer; protected TextView schoolTextView, apartTextView; protected ClearEditText roomEdit; protected School school; protected Apart apart; protected String roomNum; protected void initBasicInfoViews(View basicInfoView) { findView(basicInfoView); setListener(); refreshViewsAndModels(); } protected void findView(View basicInfoView) { // school schoolContainer = (RelativeLayout) basicInfoView .findViewById(R.id.school_container); schoolTextView = (TextView) basicInfoView .findViewById(R.id.school_textview); // apart apartContainer = (RelativeLayout) basicInfoView .findViewById(R.id.apart_container); apartTextView = (TextView) basicInfoView .findViewById(R.id.apart_textview); // room roomContainer = (RelativeLayout) basicInfoView .findViewById(R.id.room_container); roomEdit = (ClearEditText) basicInfoView .findViewById(R.id.room_edittext); findExtraView(); } protected abstract void findExtraView(); protected void setListener() { schoolContainer.setOnClickListener(this); apartContainer.setOnClickListener(this); setEdittextFocus(roomContainer, roomEdit); schoolTextView.addTextChangedListener(this); apartTextView.addTextChangedListener(this); roomEdit.addTextChangedListener(this); setExtraListener(); } protected abstract void setExtraListener(); protected void refreshViewsAndModels() { boolean isBind = F.isBind(); school = isBind ? F.mBindInfo.getSchool() : null; apart = isBind ? F.mBindInfo.getApart() : null; String roomNumBind = isBind ? F.mBindInfo.getRoomNum() : ""; setText(schoolTextView, isBind ? school.getSchoolName() : ""); setText(apartTextView, isBind ? apart.getApartName() : ""); setText(roomEdit, roomNumBind); showUnitPrice(); schoolContainer.setEnabled(!isBind); apartContainer.setEnabled(!isBind); roomEdit.setEnabled(!isBind); } @Override public void onClick(View v) { super.onClick(v); switch (v.getId()) { case R.id.school_container: switchActivityForResult(ActChooseSchool.class, RequestCode.CHOOSE_SCHOOL, null); break; case R.id.apart_container: if (school == null) { showToast(R.string.hint_choose_school_first); return; } Bundle extra = new Bundle(); extra.putString(Key.SCHOOL_ID, school.getSchoolID()); switchActivityForResult(ActChooseApart.class, RequestCode.CHOOSE_BUILDING, extra); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case RequestCode.CHOOSE_SCHOOL: String schoolJson = data.getStringExtra(Key.SCHOOL_JSON); School selectSchool = fromJson(schoolJson, School.class); boolean resetApart = school != null && !selectSchool.getSchoolID().equals( school.getSchoolID()); if (resetApart) { apart = null; setText(apartTextView, ""); } school = selectSchool; setText(schoolTextView, school.getSchoolName()); showUnitPrice(); break; case RequestCode.CHOOSE_BUILDING: String apartJson = data.getStringExtra(Key.APART_JSON); apart = fromJson(apartJson, Apart.class); setText(apartTextView, apart.getApartName()); break; default: break; } } } protected void showUnitPrice() { // override only in recharge activity } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { refreshButtonStatus(); } protected void refreshButtonStatus() { boolean isBasicInfoEmpty = isBasicInfoEmpty(); refreshButtonStatus(isBasicInfoEmpty); } private boolean isBasicInfoEmpty() { roomNum = roomEdit.getText().toString(); return school == null || apart == null || isEmpty(roomNum); } protected abstract void refreshButtonStatus(boolean basicInfoNotEmpty); protected void checkAvailable() { doCheckVersionStatus(); } private void doCheckVersionStatus() { loadDataVolley(true, Method.QUERY_CAN_USE, "?versioncode=" + F.VERSION_CODE); } private void doCheckRoomExist() { String pSchoolID = school.getSchoolID(); String pApartID = apart.getApartID(); String pRoomNum = roomNum; loadDataXMLRPC(Method.QUERY_SCORE, pSchoolID, pApartID, pRoomNum); } @Override protected void disposeResult(String apiName, String content) { super.disposeResult(apiName, content); if (apiName.equals(Method.QUERY_CAN_USE)) { try { VersionServer version = fromJson(content, VersionServer.class); if (version.isCanUse()) { // if version can use,then check room exist doCheckRoomExist(); } else { showToast(version.getDescription()); } } catch (Exception e) { e.printStackTrace(); showToast(R.string.error_data); } } else if (apiName.equals(Method.QUERY_SCORE)) { doAfterCheckOK(content); } } protected abstract void doAfterCheckOK(String content); }