package com.xiaomi.xms.sales.ui; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; 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.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.ShopIntentService; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.activity.ComboActivity; import com.xiaomi.xms.sales.activity.ShoppingActivity; import com.xiaomi.xms.sales.adapter.BaseSpinnerAdapter; import com.xiaomi.xms.sales.loader.ComboLoader; import com.xiaomi.xms.sales.loader.ComboLoader.Result; import com.xiaomi.xms.sales.loader.ImageLoader; import com.xiaomi.xms.sales.model.AddToShppingCartInfo; import com.xiaomi.xms.sales.model.ComboInfo; import com.xiaomi.xms.sales.model.ProductInfo; import com.xiaomi.xms.sales.request.HostManager.Parameters; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.widget.AddShoppingCartAnimation; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; public class ComboFragment extends BaseFragment implements LoaderCallbacks<ComboLoader.Result> { private final static String TAG = "ComboFragment"; private final static int COMBO_LOADER = 0; private final static int TAG_POSITION = -1; private EmptyLoadingView mLoadingView; private String mComboId; private LinearLayout mLinearList; private ComboInfo mInfo; private AddToShppingCartInfo mToCart; private String mComboCount; private ArrayList<String> mProductList; private AddShoppingCartAnimation mAddShoppingCartAnimation; private Button mAddCartSubmit; private View mAddButtonLayout; private ImageView mCartView; private LinearLayout mLinearGotoCartView; @Override public void onAttach(Activity activity) { super.onAttach(activity); Bundle bundle = getArguments(); mComboId = bundle.getString(Constants.Intent.EXTRA_PRODUCT_ID); mComboCount = bundle.getString(Parameters.Keys.CONSUMPTION); getActivity().setTitle(R.string.combo_detail); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.combo_fragment, container, false); mLinearList = (LinearLayout) view.findViewById(R.id.combo_list_container); mLinearGotoCartView = (LinearLayout) view.findViewById(R.id.goto_shoppingcart_layout); Button gotoBtn = (Button) view .findViewById(R.id.goto_shoppingcart_btn); gotoBtn.setOnClickListener(mClickListener); mAddButtonLayout = view.findViewById(R.id.add_shopping_layout); mAddCartSubmit = (Button) view.findViewById(R.id.combo_detail_submit); mAddCartSubmit.setText(R.string.add_shopping_cart); mAddCartSubmit.setOnClickListener(mClickListener); mCartView = (ImageView) view.findViewById(R.id.cart_icon); mToCart = new AddToShppingCartInfo(); mToCart.setProductId(mComboId); mToCart.setConsumption(mComboCount); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loadingview); getLoaderManager().initLoader(COMBO_LOADER, null, this); return view; } @Override public Loader onCreateLoader(int id, Bundle bundle) { if (id == COMBO_LOADER) { mLoader = new ComboLoader(getActivity()); ((ComboLoader) mLoader).setProductId(mComboId); mLoader.setProgressNotifiable(mLoadingView); return mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> loader, Result data) { mLinearList.removeAllViewsInLayout(); mInfo = data.mComboInfos; if (mInfo != null) { mAddButtonLayout.setVisibility(View.VISIBLE); mProductList = new ArrayList<String>(); setViewData(); } } @Override public void onLoaderReset(Loader<Result> arg0) { } public LinearLayout initItemView() { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); LinearLayout view = (LinearLayout) layoutInflater.inflate(R.layout.combo_list_item, null); View comboProductPhoto = view.findViewById(R.id.combo_product_photo); View comboProductName = view.findViewById(R.id.combo_product_name); View comboProductStyle = view.findViewById(R.id.combo_choose_style); comboProductStyle.setTag(R.id.combo_product_name, comboProductName); comboProductStyle.setTag(R.id.combo_product_photo, comboProductPhoto); return view; } private void setViewData() { for (int i = 0; i < mInfo.getSelectedProducts().size(); i++) { String mPriductId = mInfo.getSelectedProducts().get(i).getProductId(); View viewItem = initItemView(); Spinner comboProductStyle = (Spinner) viewItem.findViewById(R.id.combo_choose_style); ImageView comboProductPhoto = (ImageView) viewItem .findViewById(R.id.combo_product_photo); TextView comboProductName = (TextView) viewItem .findViewById(R.id.combo_product_name); comboProductStyle.setTag(TAG_POSITION, i); if (mInfo.getComboProductList().get(i).isEmpty()) { comboProductStyle.setVisibility(View.GONE); ImageLoader.getInstance() .loadImage(comboProductPhoto, mInfo.getSelectedProducts().get(i).getImage(), R.drawable.default_pic_small); comboProductName.setText(mInfo.getSelectedProducts().get(i).getProductName()); } else { Set<String> set = mInfo.getComboProductList().get(i).keySet(); String[] styleArray = set.toArray(new String[set.size()]); HashMap<String, ProductInfo> comboMap = mInfo.getComboProductList().get(i); ArrayList<String> styleList = new ArrayList<String>(); for (int j = 0; j < styleArray.length; j++) { if (TextUtils.equals(mPriductId, comboMap.get(styleArray[j]).getProductId())) { styleList.add(0, styleArray[j]); } else { styleList.add(styleArray[j]); } } if (styleList.size() == 1) { comboProductStyle.setVisibility(View.GONE); ImageLoader.getInstance() .loadImage(comboProductPhoto, comboMap.get(styleList.get(0)).getImage(), R.drawable.default_pic_small); comboProductName.setText(comboMap.get(styleList.get(0)).getProductName()); mPriductId = comboMap.get(styleList.get(0)).getProductId(); } else { comboProductStyle.setVisibility(View.VISIBLE); BaseSpinnerAdapter adapter = new BaseSpinnerAdapter(getActivity()); comboProductStyle.setAdapter(adapter); comboProductStyle.setPrompt(getString(R.string.please_choose)); adapter.updateData(styleList); comboProductStyle.setOnItemSelectedListener(new SpinnerItemListener(comboMap, styleList)); } } setViewItemBackground(viewItem, mInfo.getSelectedProducts().size(), i); mLinearList.addView(viewItem); mProductList.add(mPriductId); } LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View addCartSubmitLayout = layoutInflater.inflate(R.layout.combo_addcart_button, null); mLinearList.addView(addCartSubmitLayout); } private void setViewItemBackground(View view, int total, int position) { // 如果仅有一条 if (total == 1) { view.setBackgroundResource(R.drawable.list_item_single_bg_n); } else if (position == 0) { view.setBackgroundResource(R.drawable.list_item_top_bg_n); } else if (position == total - 1) { view.setBackgroundResource(R.drawable.list_item_bottom_bg_n); } else { view.setBackgroundResource(R.drawable.list_item_middle_bg_n); } } private class SpinnerItemListener implements OnItemSelectedListener { private ArrayList<String> styleList; private HashMap<String, ProductInfo> map; public SpinnerItemListener(HashMap<String, ProductInfo> map, ArrayList<String> styleList) { this.styleList = styleList; this.map = map; } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { int j = (Integer) parent.getTag(TAG_POSITION); ProductInfo info = map.get(styleList.get(position)); ImageLoader.getInstance().loadImage( (ImageView) parent.getTag(R.id.combo_product_photo), info.getImage(), R.drawable.default_pic_small); ((TextView) parent.getTag(R.id.combo_product_name)).setText(info .getProductName()); mProductList.set(j, info.getProductId()); } @Override public void onNothingSelected(AdapterView<?> parent) { } } private OnClickListener mClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.combo_detail_submit: mToCart.setAllProductId(TextUtils.join("|", mProductList)); ((ComboActivity) getActivity()).registerServiceAction(); addShoppingCart(); break; case R.id.goto_shoppingcart_btn: mLinearGotoCartView.setVisibility(View.GONE); Intent intent = new Intent(getActivity(), ShoppingActivity.class); startActivity(intent); break; } } }; private void addShoppingCart() { Intent intent = new Intent(getActivity(), ShopIntentService.class); intent.setAction(Constants.Intent.ACTION_ADD_SHOPPING_CART); intent.putExtra(Parameters.Keys.ITEM_IDS, mToCart.mAllProductId); intent.putExtra(Parameters.Keys.PRODUCT_ID, mToCart.mProductId); intent.putExtra(Parameters.Keys.CONSUMPTION, mToCart.mConsumption); intent.putExtra(Parameters.Keys.PROMOTION_ID, mToCart.mPromotionId); intent.putExtra(Parameters.Keys.PROMOTION_TYPE, mToCart.mPromotionType); intent.putExtra(Parameters.Keys.SECURITY_CODE, mToCart.mSecurityCode); getActivity().startService(intent); setSumbitButtonAttribute(false, getString(R.string.doing_add_shopping_cart)); } public void onAddShoppingCartFinish() { setSumbitButtonAttribute(true, getString(R.string.add_shopping_cart)); } public void setSumbitButtonAttribute(boolean isClick, String text) { mAddCartSubmit.setEnabled(isClick); mAddCartSubmit.setText(text); } public void playAddCartAnimation() { mAddShoppingCartAnimation.setAnim(); } public void showGotoCartWindow() { mLinearGotoCartView.setVisibility(View.VISIBLE); mLinearGotoCartView.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.appear_from_title)); new Handler().postDelayed(new Runnable() { @Override public void run() { try { mLinearGotoCartView.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.disappear_from_title)); new Handler().postDelayed(new Runnable() { @Override public void run() { hideGotoCartWindow(); } }, 500); } catch (Exception e) { } } }, 2000); } public void hideGotoCartWindow() { mLinearGotoCartView.setVisibility(View.GONE); } }