package com.xiaomi.xms.sales.ui; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.text.TextUtils; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.RelativeLayout; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.ShopIntentService; import com.xiaomi.xms.sales.activity.AddressActivity; import com.xiaomi.xms.sales.adapter.AddressInfoAdapter; import com.xiaomi.xms.sales.loader.AddressInfoLoader; import com.xiaomi.xms.sales.loader.AddressInfoLoader.Result; import com.xiaomi.xms.sales.model.AddressInfo; import com.xiaomi.xms.sales.request.Request; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.util.LogUtil; import com.xiaomi.xms.sales.util.ToastUtil; import com.xiaomi.xms.sales.widget.BaseAlertDialog; import com.xiaomi.xms.sales.widget.BaseListView; import com.xiaomi.xms.sales.widget.EmptyLoadingView; public class AddressListFragment extends BaseFragment implements LoaderCallbacks<AddressInfoLoader.Result> { private final static String TAG = "AddressListFragment"; private BaseListView mListView; private View mFooterView; private EmptyLoadingView mLoadingView; private AddressInfoAdapter mAdapter; private RelativeLayout mAddButtonBottom; private String mAction; private String mAddressId; private ProgressDialog mProgressDialog; private final static int AddressList_LOADER = 0; private final static int MENU_EDIT = 1; private final static int MENU_DEL = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { mAddressId = args.getString(Constants.Intent.EXTRA_ADDRESS_ID); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.address_list_fragment, container, false); mListView = (BaseListView) view.findViewById(android.R.id.list); mFooterView = inflater.inflate(R.layout.address_list_footer, null, false); mListView.addFooterView(mFooterView); mAddButtonBottom = (RelativeLayout) view.findViewById(R.id.add_address_bottom); mAddButtonBottom.setOnClickListener(mAddButtonListener); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading); mLoadingView.setEmptyText(R.string.tips_empty_address); if (TextUtils.equals(mAction, Constants.Intent.ACTION_EDIT_ADDRESS)) { mListView.setOnCreateContextMenuListener(this); mAdapter = new AddressInfoAdapter(getActivity()); } else { mAdapter = new AddressInfoAdapter(getActivity(), mAddressId); } mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(mItemClickListener); if (mLoader != null) { AddressActivity father = (AddressActivity) getActivity(); if (father.isAddressListReload()) { mLoader.reload(); father.setAddressListReload(false); } } return view; } private OnItemClickListener mItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View item, int position, long id) { if (TextUtils.equals(mAction, Constants.Intent.ACTION_USE_ADDRESS)) { String addressId = ((AddressInfo) item.getTag()).getAddressId(); mAdapter.setCheckedAddressId(addressId); Intent data = new Intent(); data.putExtra(Constants.Intent.EXTRA_ADDRESS_ID, addressId); getActivity().setResult(Activity.RESULT_OK, data); getActivity().finish(); } else if (TextUtils.equals(mAction, Constants.Intent.ACTION_EDIT_ADDRESS)) { startEditAddress(item); } } }; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(AddressList_LOADER, null, this); } private OnClickListener mAddButtonListener = new OnClickListener() { @Override public void onClick(View btn) { startEditAddress(btn); } }; public void setAction(String action) { mAction = action; } @Override public Loader onCreateLoader(int id, Bundle bundle) { if (id == AddressList_LOADER) { mLoader = new AddressInfoLoader(getActivity()); mLoader.setProgressNotifiable(mLoadingView); return mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> loader, Result data) { mAdapter.updateData(data.mAddressInfos); } @Override public void onLoaderReset(Loader<Result> arg0) { } @Override public boolean onContextItemSelected(MenuItem item) { final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case MENU_EDIT: startEditAddress(info.targetView); return true; case MENU_DEL: BaseAlertDialog dialog = new BaseAlertDialog(getActivity()); dialog.setTitle(R.string.address_del); dialog.setMessage(getResources().getString(R.string.address_list_del_ask)); dialog.setPositiveButton(R.string.dialog_ask_ok, new OnClickListener() { @Override public void onClick(View v) { delAddressItem(info.targetView); } }); dialog.setNegativeButton(R.string.dialog_ask_cancel, null); dialog.show(); return true; default: } return super.onContextItemSelected(item); } private void startEditAddress(View item) { AddressInfo address = (AddressInfo) item.getTag(); AddressActivity activity = (AddressActivity) getActivity(); if (address != null) { Bundle bundle = new Bundle(); bundle.putString(Constants.Intent.EXTRA_ADDRESS_ID, address.getAddressId()); bundle.putString(Constants.Intent.EXTRA_ADDRESS_CONSIGNEE, address.getConsignee()); bundle.putInt(Constants.Intent.EXTRA_ADDRESS_PROVINCE, address.getProvinceId()); bundle.putInt(Constants.Intent.EXTRA_ADDRESS_CITY, address.getCityId()); bundle.putInt(Constants.Intent.EXTRA_ADDRESS_DISTRICT, address.getDistrictId()); bundle.putString(Constants.Intent.EXTRA_ADDRESS_LOCATION, address.getAddress()); bundle.putString(Constants.Intent.EXTRA_ADDRESS_ZIPCODE, address.getZipCode()); bundle.putString(Constants.Intent.EXTRA_ADDRESS_TEL, address.getTel()); activity.showFragment(AddressActivity.TAG_ADD_FRAGMENT, bundle, true); } else { activity.showFragment(AddressActivity.TAG_ADD_FRAGMENT, null, true); } } public void delAddressItemComplete(int result, String error) { mProgressDialog.dismiss(); switch (result) { case Request.STATUS_OK: ToastUtil.show(getActivity(), R.string.address_ok); mLoader.reload(); break; case Request.STATUS_NETWORK_UNAVAILABLE: ToastUtil.show(getActivity(), R.string.network_unavaliable); break; default: if (TextUtils.isEmpty(error)) { ToastUtil.show(getActivity(), R.string.address_err); } else { ToastUtil.show(getActivity(), error); } } } private void delAddressItem(View item) { mProgressDialog = ProgressDialog.show(getActivity(), getString(R.string.address_deling), getString(R.string.address_deling)); mProgressDialog.setCancelable(true); String addressId = ((AddressInfo) item.getTag()).getAddressId(); Intent serviceIntent = new Intent(getActivity(), ShopIntentService.class); serviceIntent.setAction(Constants.Intent.ACTION_DEL_ADDRESS); serviceIntent.putExtra(Constants.Intent.EXTRA_ADDRESS_ID, addressId); getActivity().startService(serviceIntent); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { LogUtil.d(TAG, "onCreateContextMenu"); View selectedItem = ((AdapterContextMenuInfo) menuInfo).targetView; String title = (String) ((TextView) (selectedItem.findViewById(R.id.address_consignee))) .getText(); menu.setHeaderTitle(title); menu.add(0, MENU_EDIT, MENU_EDIT, R.string.address_edit); menu.add(0, MENU_DEL, MENU_DEL, R.string.address_del); super.onCreateContextMenu(menu, v, menuInfo); } @Override public void onResume() { super.onResume(); if (mLoader != null) { mLoader.forceLoad(); } } }