package com.cheikh.lazywaimai.ui.activity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.LinearLayout; import java.util.List; 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.AddressController; import com.cheikh.lazywaimai.model.bean.Address; import com.cheikh.lazywaimai.model.bean.ResponseError; import com.cheikh.lazywaimai.util.ContentView; import com.cheikh.lazywaimai.ui.Display; import com.cheikh.lazywaimai.ui.adapter.AddressListAdapter; import com.cheikh.lazywaimai.util.ViewEventListener; import com.cheikh.lazywaimai.util.ToastUtil; import com.cheikh.lazywaimai.widget.MultiStateView; import com.cheikh.lazywaimai.widget.refresh.OnRefreshListener; import com.cheikh.lazywaimai.widget.refresh.RefreshLayout; import static com.cheikh.lazywaimai.util.Constants.ClickType.CLICK_TYPE_ADDRESS_CLICKED; import static com.cheikh.lazywaimai.util.Constants.ClickType.CLICK_TYPE_DELETE_BTN_CLICKED; import static com.cheikh.lazywaimai.util.Constants.ClickType.CLICK_TYPE_EDIT_BTN_CLICKED; /** * author: cheikh.wang on 17/1/5 * email: wanghonghi@126.com */ @ContentView(R.layout.activity_addresses) public class AddressesActivity extends BaseActivity<AddressController.AddressUiCallbacks> implements AddressController.AddressListUi, ViewEventListener<Address> { @Bind(R.id.multi_state_view) MultiStateView mMultiStateView; @Bind(R.id.refresh_layout) RefreshLayout mRefreshLayout; @Bind(R.id.recycler_view) RecyclerView mRecyclerView; @Bind(R.id.btn_create_address) LinearLayout mCreateAddressView; private boolean mIsChooseAddress; private AddressListAdapter mAdapter; @Override protected BaseController getController() { return AppContext.getContext().getMainController().getAddressController(); } @Override protected void handleIntent(Intent intent, Display display) { mIsChooseAddress = intent.getBooleanExtra(Display.PARAM_OBJ, false); } @Override protected void initializeViews(Bundle savedInstanceState) { mRefreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { getCallbacks().refresh(); } }); mAdapter = new AddressListAdapter(); mAdapter.setViewEventListener(this); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mMultiStateView.setState(MultiStateView.STATE_LOADING); } @Override public void onStartRequest(int page) { if (mMultiStateView.getState() != MultiStateView.STATE_CONTENT) { mMultiStateView.setState(MultiStateView.STATE_LOADING); } else { mRefreshLayout.setRefreshing(true); } } @Override public void onFinishRequest(final List<Address> items, int page, boolean haveNextPage) { if (mRefreshLayout.isRefreshing()) { mRefreshLayout.setRefreshing(false); } if (items != null && !items.isEmpty()) { mAdapter.setItems(items); mMultiStateView.setState(MultiStateView.STATE_CONTENT); } else { mMultiStateView.setState(MultiStateView.STATE_EMPTY) .setTitle(R.string.label_empty_address_list) .setButton(new View.OnClickListener() { @Override public void onClick(View v) { mMultiStateView.setState(MultiStateView.STATE_LOADING); getCallbacks().refresh(); } }); } } @Override public void onResponseError(ResponseError error) { cancelLoading(); if (mRefreshLayout.isRefreshing()) { mRefreshLayout.setRefreshing(false); } if (mMultiStateView.getState() != MultiStateView.STATE_CONTENT) { mMultiStateView.setState(MultiStateView.STATE_ERROR) .setTitle(error.getMessage()) .setButton(new View.OnClickListener() { @Override public void onClick(View v) { mMultiStateView.setState(MultiStateView.STATE_LOADING); getCallbacks().refresh(); } }); } else { ToastUtil.showToast(error.getMessage()); } } @Override public void deleteFinish(Address address) { cancelLoading(); mAdapter.delItem(address); ToastUtil.showToast(R.string.toast_success_address_delete); } @Override public void setDefaultFinish() { cancelLoading(); Display display = getDisplay(); if (display != null) { display.finishActivity(); } } @OnClick({R.id.btn_create_address}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_create_address: getCallbacks().showCreateAddress(); break; } } @Override public void onViewEvent(int actionId, Address address, int position, View view) { switch (actionId) { case CLICK_TYPE_ADDRESS_CLICKED: // 设置默认地址 if (mIsChooseAddress) { showLoading(R.string.label_being_something); getCallbacks().setDefaultAddress(address); } break; case CLICK_TYPE_EDIT_BTN_CLICKED: // 修改 getCallbacks().showChangeAddress(address); break; case CLICK_TYPE_DELETE_BTN_CLICKED: // 删除 deleteAddress(address); break; } } private void deleteAddress(final Address address) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.dialog_delete_title); builder.setMessage(R.string.dialog_delete_message); builder.setNegativeButton(R.string.dialog_cancel, null); builder.setPositiveButton(R.string.dialog_confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showLoading(R.string.label_being_something); getCallbacks().delete(address); } }); builder.create().show(); } }