package com.xiaomi.xms.sales.ui; 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.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.activity.MainActivity; import com.xiaomi.xms.sales.activity.ShoppingActivity; import com.xiaomi.xms.sales.adapter.ShoppingAdapter; import com.xiaomi.xms.sales.loader.ShoppingLoader; import com.xiaomi.xms.sales.model.ShoppingCartListInfo; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.CartListNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.IncastNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.IncastNode.IncastProduct; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.SupplyNode; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; 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.BaseListView; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import com.xiaomi.xms.sales.xmsf.account.LoginManager; public class ShoppingFragment extends BaseFragment implements LoaderCallbacks<ShoppingLoader.Result>, OnItemClickListener { private static final String TAG = "ShoppingFragment"; private final static int CARTLIST_LOADER = 0; private EmptyLoadingView mLoadingView; private BaseListView mListView; private ShoppingAdapter mAdapter; private View mEmpty; private View mContainer; public TextView mPrice; public Button mCheckout; private View mHeaderContainer; private Button mGoto; private OnCheckStatusListener mCheckStatusListener; private String mMihomeBuyId = HostManager.Parameters.Values.MIHOME_BUY_NULL; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); if (bundle != null) { mMihomeBuyId = bundle.getString(Constants.Intent.EXTRA_MIHOME_BUY); if (TextUtils.isEmpty(mMihomeBuyId)) { mMihomeBuyId = HostManager.Parameters.Values.MIHOME_BUY_NULL; } } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.shopping_fragment, container, false); mListView = (BaseListView) view.findViewById(android.R.id.list); mAdapter = new ShoppingAdapter(getActivity()); View footerView = inflater.inflate(R.layout.empty_list_item, null, false); mListView.addFooterView(footerView, null, false); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading); mContainer = view.findViewById(R.id.container); mPrice = (TextView) view.findViewById(R.id.total); mCheckout = (Button) view.findViewById(R.id.next); mCheckout.setText(getString(R.string.shopping_button_checkout)); mCheckout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ShoppingActivity activity = (ShoppingActivity) getActivity(); Bundle bundle = new Bundle(); bundle.putString(Constants.Intent.EXTRA_MIHOME_BUY, mMihomeBuyId); activity.showFragment(ShoppingActivity.Fragments.TAG_ORDER_SUBMIT_FRAGMENT, bundle,true); } }); mHeaderContainer = view.findViewById(R.id.header_container); mEmpty = (View) view.findViewById(R.id.empty); showEmptyView(false); mGoto = (Button) view.findViewById(R.id.goto_button); mGoto.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MainActivity.launchMain(getActivity(), MainActivity.FRAGMENT_TAG_CATEGORY); } }); getParent().getHomeButton().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (!LoginManager.getInstance().hasLogin()) { getParent().gotoAccount(); } getLoaderManager().initLoader(CARTLIST_LOADER, null, this); } @Override public void onResume() { super.onResume(); getActivity().setTitle(R.string.product_shopping_cart); } @SuppressWarnings("unchecked") public Loader<ShoppingLoader.Result> onCreateLoader(int id, Bundle bundle) { if (id == CARTLIST_LOADER) { mHeaderContainer.setVisibility(View.GONE); mLoader = new ShoppingLoader(getActivity(), mMihomeBuyId); mLoader.setProgressNotifiable(mLoadingView); mLoader.setNeedDatabase(false); return (Loader<ShoppingLoader.Result>) mLoader; } return null; } @Override public void onLoadFinished(Loader<ShoppingLoader.Result> loader, ShoppingLoader.Result data) { if (ShoppingActivity.Signal.CART_RELOAD == true) { ShoppingActivity.Signal.CART_RELOAD = false; getLoaderManager().restartLoader(CARTLIST_LOADER, null, this); return; } if (data.mInfo == null) { return; } LogUtil.d(TAG, "onLoadFinished: data.result is " + data.mInfo.getResult()); if (!TextUtils.equals(String.valueOf(data.mInfo.getCode()), Tags.RESULT_CODE)) { Toast.makeText(getActivity(), data.mInfo.getDescription(), Toast.LENGTH_SHORT).show(); return; } LogUtil.d(TAG, "onLoadFinished:" + data.mInfo); if (data.mInfo.hasEmpty()) { showEmptyView(true); } else { mAdapter.updateData(data.mInfo.getItems()); mPrice.setText(String.format(getString(R.string.currency_unit_template), data.mInfo.getTotal())); mHeaderContainer.setVisibility(View.VISIBLE); } ((BaseActivity) getActivity()).updateShoppingCount(); } @Override public void onLoaderReset(Loader<ShoppingLoader.Result> loader) { } @Override protected void onNetworkConnected(int type) { if (mLoader != null) { mLoader.reload(); } } @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { int type = mAdapter.getItemViewType(position); if (type == Item.TYPE_CARTLIST) { CartListNode node = (CartListNode) view.getTag(); String itemId = node.getItemId(); String itemIds = node.getItemIds(); ShoppingActivity activity = (ShoppingActivity) getActivity(); Bundle bundle = new Bundle(); bundle.putString(Tags.EditConsumption.ITEM_ID, itemId); bundle.putString(Tags.EditConsumption.ITEM_IDS, itemIds); bundle.putString(Constants.Intent.EXTRA_MIHOME_BUY, mMihomeBuyId); activity.showFragment(ShoppingActivity.Fragments.TAG_EDIT_CARTITEM_FRAGMENT, bundle, true); } else if (type == Item.TYPE_SUPPLY) { Item item = mAdapter.getData().get(position); SupplyNode supplyNode = (SupplyNode) item.getNode(); onSupplyClick(supplyNode); } else if (type == Item.TYPE_INCAST) { ShoppingActivity avtivity = (ShoppingActivity) getActivity(); IncastNode node = (IncastNode) mAdapter.getData().get(position).getNode(); Bundle bundle = new Bundle(); bundle.putString(Constants.Intent.EXTRA_INCAST_PRODUCTS, IncastProduct.serialize(node.getPostFreeProducts())); avtivity.showFragment(ShoppingActivity.Fragments.TAG_INCAST_PRODUCTS_FRAGMENT, bundle, true); } } public void showEmptyView(boolean isShow) { if (isShow) { mEmpty.setVisibility(View.VISIBLE); mContainer.setVisibility(View.GONE); } else { mEmpty.setVisibility(View.GONE); mContainer.setVisibility(View.VISIBLE); } } @Override public void onStart() { super.onStart(); } public void onSupplyClick(SupplyNode node) { LogUtil.d(TAG, "onSupplyClick"); if (mCheckStatusListener != null) { if (!node.getCheckedStatus()) { mCheckStatusListener.onAddShoppingCart(node.getActId(), node.getProductId(), ShoppingCartListInfo.PROMOTION_TYPE_SUPPLY, null, ""); } else { mCheckStatusListener.onDelShoppingCartItem(node.getItemId(), null, ""); } } } public void onSupplyCallback(Intent callbackIntent) { String action = callbackIntent.getAction(); if (TextUtils.equals(action, Constants.Intent.ACTION_ADD_SHOPPING_CART)) { String result = callbackIntent.getStringExtra( Constants.Intent.EXTRA_ADD_SHOPPING_CART_RESULT_MSG); String msg = callbackIntent .getStringExtra(Constants.Intent.EXTRA_ADD_SHOPPING_CART_RESULT_MSG); if (!TextUtils.equals(result, Constants.AddShoppingCartStatus.ADD_SUCCESS)) { if (TextUtils.equals(result, Constants.AddShoppingCartStatus.ADD_FAIL)) { ToastUtil.show(getActivity(), R.string.shopping_add_supply_exception); } else { ToastUtil.show(getActivity(), msg); } return; } } else if (TextUtils.equals(action, Constants.Intent.ACTION_DELETE_CARTITEM)) { } ShoppingActivity.Signal.CART_RELOAD = false; getLoaderManager().restartLoader(CARTLIST_LOADER, null, this); } public ShoppingActivity getParent() { return (ShoppingActivity) getActivity(); } public interface OnCheckStatusListener { public static final String NEXT_ACTION_BACK = "back"; public void onDelShoppingCartItem(String item, Object nextStep, String itemIds); public void onAddShoppingCart(String actId, String productId, String promotionType, Object nextStep, String itemIds); } public void setOnCheckStatusListener(OnCheckStatusListener l) { mCheckStatusListener = l; } }