package com.cheikh.lazywaimai.ui.activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.OnClick;
import com.cheikh.lazywaimai.R;
import com.cheikh.lazywaimai.base.BaseActivity;
import com.cheikh.lazywaimai.base.BaseController;
import com.cheikh.lazywaimai.context.AppContext;
import com.cheikh.lazywaimai.controller.OrderController;
import com.cheikh.lazywaimai.model.ShoppingCart;
import com.cheikh.lazywaimai.model.bean.CartInfo;
import com.cheikh.lazywaimai.model.bean.Order;
import com.cheikh.lazywaimai.model.bean.PayMethod;
import com.cheikh.lazywaimai.model.bean.ResponseError;
import com.cheikh.lazywaimai.model.bean.SettleResult;
import com.cheikh.lazywaimai.ui.Display;
import com.cheikh.lazywaimai.util.ContentView;
import com.cheikh.lazywaimai.ui.adapter.SendTimeListAdapter;
import com.cheikh.lazywaimai.util.ToastUtil;
import com.cheikh.lazywaimai.widget.AddressView;
import com.cheikh.lazywaimai.widget.MultiStateView;
import com.cheikh.lazywaimai.widget.OrderReportView;
/**
* author: cheikh.wang on 17/1/5
* email: wanghonghi@126.com
*/
@ContentView(R.layout.activity_settle)
public class SettleActivity extends BaseActivity<OrderController.OrderUiCallbacks>
implements OrderController.OrderSettleUi {
public static final int REQUEST_CODE_REMARK = 1000;
@Bind(R.id.multi_state_view)
MultiStateView mMultiStateView;
@Bind(R.id.view_address_info)
AddressView mAddressInfoView;
@Bind(R.id.txt_online_payment)
TextView mOnlinePaymentTxt;
@Bind(R.id.txt_offline_payment)
TextView mOfflinePaymentTxt;
@Bind(R.id.layout_send_time)
View mSendTimeLayout;
@Bind(R.id.txt_booked_time)
TextView mBookedTimeTxt;
@Bind(R.id.orderReportView)
OrderReportView mOrderReportView;
@Bind(R.id.btn_submit_order)
Button mSubmitOrderBtn;
@Bind(R.id.layout_remark)
View mRemarkLayout;
@Bind(R.id.txt_remark)
TextView mRemarkTxt;
private SendTimeListAdapter mSendTimeAdapter;
private int mCheckedSendTimeIndex;
private Drawable mOfflineDrawable;
private Drawable mOnlineDrawable;
private CartInfo mCartInfo;
private SettleResult mSettleResult;
private String mRemark;
private SettleResult.BookingTime mBookingTime;
@Override
protected BaseController getController() {
return AppContext.getContext().getMainController().getOrderController();
}
@Override
public String getRequestParameter() {
return null;
}
@Override
protected void initializeViews(Bundle savedInstanceState) {
mSendTimeAdapter = new SendTimeListAdapter();
mOfflineDrawable = getResources().getDrawable(R.drawable.ic_check_off);
mOnlineDrawable = getResources().getDrawable(R.drawable.ic_check_on);
mOfflineDrawable.setBounds(0, 0, mOfflineDrawable.getMinimumWidth(),
mOfflineDrawable.getMinimumHeight());
mOnlineDrawable.setBounds(0, 0, mOnlineDrawable.getMinimumWidth(),
mOnlineDrawable.getMinimumHeight());
mMultiStateView.setState(MultiStateView.STATE_LOADING);
}
/**
* 显示结算结果
* @param settleResult
*/
@Override
public void onSettleFinish(SettleResult settleResult) {
cancelLoading();
mMultiStateView.setState(MultiStateView.STATE_CONTENT);
mSettleResult = settleResult;
// 收货地址
mAddressInfoView.setData(mSettleResult.getLastAddress());
// 付款方式
mOnlinePaymentTxt.setCompoundDrawables(null, null,
mSettleResult.isOnlinePayment() ? mOnlineDrawable : mOfflineDrawable, null);
mOfflinePaymentTxt.setCompoundDrawables(null, null,
mSettleResult.isOnlinePayment() ? mOfflineDrawable : mOnlineDrawable, null);
// 禁用当前选择的付款方式的点击
mOnlinePaymentTxt.setEnabled(!mSettleResult.isOnlinePayment());
mOfflinePaymentTxt.setEnabled(mSettleResult.isOnlinePayment());
// 可选的送达时间
mSendTimeAdapter.setItems(mSettleResult.getBookingTimes());
mBookedTimeTxt.setText(mBookingTime != null ? mBookingTime.getViewTime() : "");
// 购物车信息
mCartInfo = mSettleResult.getCartInfo();
mOrderReportView.setupContent(mCartInfo);
// 控制提交订单的按钮的可用性
mSubmitOrderBtn.setEnabled(mSettleResult.isCanSubmit());
}
@Override
public void onResponseError(ResponseError error) {
cancelLoading();
if (mSettleResult == null) {
mMultiStateView.setState(MultiStateView.STATE_ERROR)
.setTitle(error.getMessage())
.setButton(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMultiStateView.setState(MultiStateView.STATE_LOADING);
getCallbacks().settle();
}
});
} else {
ToastUtil.showToast(error.getMessage());
}
}
@Override
public void onOrderCreateFinish(final Order order) {
ShoppingCart.getInstance().clearAll();
cancelLoading();
ToastUtil.showToast(R.string.toast_success_order_create);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (order.getPayMethod() == PayMethod.ONLINE) {
getCallbacks().showPayment(order);
} else {
getCallbacks().showOrderDetail(order);
}
}
}, 2000);
}
@OnClick({
R.id.view_address_info,
R.id.txt_online_payment,
R.id.txt_offline_payment,
R.id.btn_submit_order,
R.id.layout_send_time,
R.id.layout_remark
})
public void onClick(View view) {
switch (view.getId()) {
case R.id.view_address_info:
getCallbacks().chooseAddress();
break;
case R.id.txt_online_payment:
showLoading(R.string.label_being_something);
getCallbacks().togglePayMethod(true);
break;
case R.id.txt_offline_payment:
showLoading(R.string.label_being_something);
getCallbacks().togglePayMethod(false);
break;
case R.id.btn_submit_order:
showLoading(R.string.label_being_something);
getCallbacks().orderCreate(mCartInfo.getId(),
mSendTimeAdapter.getItem(mCheckedSendTimeIndex).getUnixTime(), mRemark);
break;
case R.id.layout_send_time:
popupChooseBookedTime(mCheckedSendTimeIndex);
break;
case R.id.layout_remark:
getCallbacks().showRemark(mRemark, REQUEST_CODE_REMARK);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_REMARK && resultCode == RESULT_OK) {
mRemark = data.getStringExtra(Display.PARAM_OBJ);
mRemarkTxt.setText(mRemark);
}
}
/**
* 弹出选择预订时间的窗口
*/
private void popupChooseBookedTime(int checked) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("选择送达时间");
builder.setSingleChoiceItems(mSendTimeAdapter, checked, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mCheckedSendTimeIndex = which;
mBookingTime = mSendTimeAdapter.getItem(which);
mBookedTimeTxt.setText(mBookingTime.getViewTime());
dialog.dismiss();
}
});
builder.show();
}
}