package net.coding.program.mall;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ImageLoadTool;
import net.coding.program.common.SimpleSHA1;
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.model.AccountInfo;
import net.coding.program.model.MallItemObject;
import net.coding.program.model.UserObject;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.ViewById;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.ArrayList;
/**
* Created by libo on 2015/11/22.
*/
@EActivity(R.layout.activity_mall_order_submit)
public class MallOrderSubmitActivity extends BackActivity {
private static final int RESULT_LOCAL = 1;
@ViewById
EditText mall_order_edit_username;
@ViewById
EditText mall_order_edit_address;
@ViewById
EditText mall_order_edit_phone;
@ViewById
EditText mall_order_edit_note;
@ViewById
ImageView mall_order_img;
@ViewById
TextView mall_order_title;
@ViewById
TextView mall_order_point;
@ViewById
TextView mall_order_desc;
@ViewById
TextView mall_order_edit_city;
@ViewById
View mall_order_title_options, mall_order_divide_options;
@ViewById
TextView mall_order_edit_options;
@Click
void mall_order_button_submit() {
parseParams();
}
@Extra
static MallItemObject mallItemObject = new MallItemObject();
MallItemObject.Option option;
String submitPassword = "";
Local local = new Local("", 0, "", 0, "", 0);
private View.OnFocusChangeListener foucusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Global.popSoftkeyboard(MallOrderSubmitActivity.this, v, hasFocus);
}
};
@AfterViews
void initView() {
UserObject user = AccountInfo.loadAccount(this);
String userName = user.name;
mall_order_edit_username.setHint(userName);
mall_order_title.setText(mallItemObject.getName());
mall_order_point.setText(mallItemObject.getPoints_cost() + " 码币");
mall_order_desc.setText(mallItemObject.getDescription().replaceAll(" ?<br> ?", ""));
getImageLoad().loadImage(mall_order_img, mallItemObject.getImage(), ImageLoadTool.mallOptions);
mall_order_edit_username.setOnFocusChangeListener(foucusChangeListener);
mall_order_edit_address.setOnFocusChangeListener(foucusChangeListener);
mall_order_edit_phone.setOnFocusChangeListener(foucusChangeListener);
mall_order_edit_note.setOnFocusChangeListener(foucusChangeListener);
if (mallItemObject.getOptions().isEmpty()) {
mall_order_title_options.setVisibility(View.GONE);
mall_order_edit_options.setVisibility(View.GONE);
mall_order_divide_options.setVisibility(View.GONE);
} else {
option = mallItemObject.getOptions().get(0);
uiBindData();
}
}
@Click
void mall_order_edit_options() {
ArrayList<MallItemObject.Option> options = mallItemObject.getOptions();
String[] optionNames = new String[options.size()];
for (int i = 0; i < options.size(); ++i) {
optionNames[i] = options.get(i).getName();
}
new AlertDialog.Builder(this)
.setItems(optionNames, (dialog, which) -> {
option = options.get(which);
uiBindData();
})
.show();
}
private void uiBindData() {
mall_order_edit_options.setText(option.getName());
}
void showDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
final View entryView = inflater.inflate(R.layout.dialog_mall_order_submit, null);
final EditText editText = (EditText) entryView.findViewById(R.id.edit_text);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(entryView)
.setTitle("确认订单")
.setPositiveButton("确认", (dialog, which) -> {
parsePassword(editText.getText().toString().trim());
})
.setNegativeButton("取消", null)
.show();
}
@OnActivityResult(RESULT_LOCAL)
void onResultLocal(int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
local = (Local) data.getSerializableExtra("result");
mall_order_edit_city.setText(local.getLocalString());
}
}
private void parseParams() {
if (mall_order_edit_username.getText().toString().trim().length() == 0) {
showMiddleToast("姓名不能为空");
return;
}
if (mall_order_edit_address.getText().toString().trim().length() == 0) {
showMiddleToast("街道地址不能为空");
return;
}
if (mall_order_edit_city.getText().length() == 0) {
showMiddleToast("省,市,县不能为空");
return;
}
int phoneLength = mall_order_edit_phone.getText().toString().trim().length();
if (phoneLength < 8 || phoneLength > 16) {
showMiddleToast("电话号码格式不正确");
return;
}
showDialog();
}
private void parsePassword(String submitPassword) {
if (submitPassword.length() < 6 || submitPassword.length() > 64 || TextUtils
.isEmpty(submitPassword)) {
showMiddleToast("密码格式有误,请重新输入");
return;
}
this.submitPassword = submitPassword;
postSubmit();
}
private void postSubmit() {
String password = SimpleSHA1.sha1(submitPassword);
String userName = mall_order_edit_username.getText().toString().trim();
String address = mall_order_edit_address.getText().toString().trim();
String phone = mall_order_edit_phone.getText().toString().trim();
String note = mall_order_edit_note.getText().toString().trim();
RequestParams params = new RequestParams();
params.put("password", password);
params.put("receiverName", userName);
params.put("receiverPhone", phone);
params.put("remark", note);
params.put("receiverAddress", address);
params.put("giftId", mallItemObject.getId());
if (option != null) {
params.put("option_id", option.getId());
}
int priovicen = local.getProvicen().getId();
if (priovicen != 0) {
params.put("province", priovicen);
int city = local.getCity().getId();
if (city != 0) {
params.put("city", city);
int district = local.getDistrict().getId();
if (district != 0) {
params.put("district", district);
}
}
}
showProgressBar(true, "正在提交订单...");
String url = Global.HOST_API + "/gifts/exchange";
MyAsyncHttpClient.post(this, url, params, new MyJsonResponse(MallOrderSubmitActivity.this) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
showButtomToast("恭喜您,订单提交成功!");
MallOrderDetailActivity_.intent(MallOrderSubmitActivity.this).start();
finish();
}
@Override
public void onFinish() {
super.onFinish();
showProgressBar(false);
}
});
}
@Click
void mall_order_edit_city() {
AsyncHttpClient client = MyAsyncHttpClient.createClient(MallOrderSubmitActivity.this);
String host = Global.HOST_API + "/region?parent=0&level=1";
client.get(host, new MyJsonResponse(MallOrderSubmitActivity.this) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
ArrayList<City> citys = PickLocalActivity.citysFromJson(response);
Intent intent = new Intent(MallOrderSubmitActivity.this, PickLocalActivity_.class);
intent.putExtra(PickLocalActivity.EXTRA_LOCAL_POS, 1);
intent.putExtra(PickLocalActivity.EXTRA_LIST_DATA, citys);
intent.putExtra(PickLocalActivity.EXTRA_LOCAL, local);
startActivityForResult(intent, RESULT_LOCAL);
showProgressBar(false, "");
}
@Override
public void onMyFailure(JSONObject response) {
super.onMyFailure(response);
showProgressBar(false, "");
}
});
showProgressBar(true, "");
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
Global.popSoftkeyboard(MallOrderSubmitActivity.this, v, false);
}
return super.dispatchTouchEvent(ev);
}
// 必不可少,否则所有的组件都不会有TouchEvent了
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
private boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = {0, 0};
//获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}
static public class City implements Serializable {
int id;
String name;
public City(JSONObject json) {
id = json.optInt("id");
name = json.optString("name");
}
public City(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void clear() {
id = 0;
name = "";
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof City)) return false;
City city = (City) o;
if (id != city.id) return false;
return name.equals(city.name);
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + name.hashCode();
return result;
}
}
static public class Local implements Serializable {
City provicen;
City city;
City district;
public String getLocalString() {
return String.format("%s %s %s", provicen.getName(), city.getName(), district.getName());
}
public Local(String provicen, int proviceId, String city, int cityId, String district, int districtId) {
this.provicen = new City(proviceId, provicen);
this.city = new City(cityId, city);
this.district = new City(districtId, district);
}
public City getProvicen() {
return provicen;
}
public City getCity() {
return city;
}
public City getDistrict() {
return district;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Local)) return false;
Local local = (Local) o;
if (!provicen.equals(local.provicen)) return false;
if (!city.equals(local.city)) return false;
return district.equals(local.district);
}
@Override
public int hashCode() {
int result = provicen.hashCode();
result = 31 * result + city.hashCode();
result = 31 * result + district.hashCode();
return result;
}
}
}