package com.xiaomi.xms.sales.ui;
import android.content.Intent;
import android.graphics.Bitmap;
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.OnItemSelectedListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
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.ShoppingActivity;
import com.xiaomi.xms.sales.adapter.BaseSpinnerAdapter;
import com.xiaomi.xms.sales.loader.ImageLoader;
import com.xiaomi.xms.sales.loader.ShoppingLoader;
import com.xiaomi.xms.sales.loader.ShoppingLoader.Result;
import com.xiaomi.xms.sales.model.Image;
import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item;
import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.CartListNode;
import com.xiaomi.xms.sales.model.ShoppingCartListInfo.SelectableProduct;
import com.xiaomi.xms.sales.model.Tags;
import com.xiaomi.xms.sales.ui.ShoppingFragment.OnCheckStatusListener;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.Device;
import com.xiaomi.xms.sales.util.LogUtil;
import com.xiaomi.xms.sales.widget.EmptyLoadingView;
import com.xiaomi.xms.sales.widget.SelfBindView;
import com.xiaomi.xms.sales.widget.SelfBindView.SelfBindViewInteface;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Set;
public class EditCartItemFragment extends BaseFragment implements
LoaderCallbacks<ShoppingLoader.Result> {
private ArrayList<String> mSpinnerlist = new ArrayList<String>();
private String mItemId;
private EmptyLoadingView mLoadingView;
private TextView mTitle;
private BaseSpinnerAdapter mTitleSpinnerAdapter;
private Spinner mTitleSpinner;
private TextView mPrice;
private TextView mPriceNewline;
private SelfBindView mPhoto;
private BaseSpinnerAdapter mAdapter;
private Spinner mSpinner;
private final static String TAG = "EditCartItemFragment";
private Button mDelete;
private int mOldCount = 0;
private LinearLayout mContainerLayout;
// Adapt phone related
private View mAdaptPhoneContainer;
private LinearLayout mAdaptPhoneTypes;
private View mOpContainer;
private OnCheckStatusListener mCheckStatusListener;
private String mMihomeBuyId;
private ArrayList<SelectableProduct> mSelectableProducts;
private boolean mIsTitleSpinnerInited;
private LinearLayout mPhotoContainer;
private String mItemIds;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = getArguments();
setItemId(bundle.getString(Tags.EditConsumption.ITEM_ID));
mItemIds = bundle.getString(Tags.EditConsumption.ITEM_IDS);
mMihomeBuyId = bundle.getString(Constants.Intent.EXTRA_MIHOME_BUY);
View view = inflater.inflate(R.layout.edit_cartitem_fragment, container, false);
mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading);
mContainerLayout = (LinearLayout) view.findViewById(R.id.edit_cart_item_container);
mTitle = (TextView) view.findViewById(R.id.title);
mTitleSpinner = (Spinner) view.findViewById(R.id.title_spinner);
mTitleSpinnerAdapter = new BaseSpinnerAdapter(getActivity());
mTitleSpinner.setAdapter(mTitleSpinnerAdapter);
mTitleSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (!mIsTitleSpinnerInited) {
mIsTitleSpinnerInited = true;
return;
}
if (mSelectableProducts != null
&& position < mSelectableProducts.size()) {
if (mCheckStatusListener != null) {
NextStepInfo nextStep = new NextStepInfo();
nextStep.selectableProduct = mSelectableProducts.get(position);
mCheckStatusListener.onDelShoppingCartItem(mItemId, nextStep, mItemIds);
}
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
mPrice = (TextView) view.findViewById(R.id.price);
mPriceNewline = (TextView) view.findViewById(R.id.price_newline);
mPhotoContainer = (LinearLayout) view.findViewById(R.id.container_photo);
// mPhoto = (ImageView) view.findViewById(R.id.photo);
mSpinner = (Spinner) view.findViewById(R.id.spinner);
mAdaptPhoneContainer = view.findViewById(R.id.adapt_phone_container);
mAdaptPhoneTypes = (LinearLayout) view.findViewById(R.id.adapt_type_view);
mAdapter = new BaseSpinnerAdapter(getActivity());
mSpinner.setAdapter(mAdapter);
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String number = mSpinnerlist.get(position);
int n = Integer.parseInt(number);
if (mOldCount == 0 || mOldCount == n) {
return;
}
Intent intent = new Intent(getActivity(), ShopIntentService.class);
intent.setAction(Constants.Intent.ACTION_EDIT_CONSUMPTION);
JSONObject json = new JSONObject();
try {
json.put(Tags.EditConsumption.ITEM_ID, mItemId);
json.put(Tags.EditConsumption.ITEM_IDS, mItemIds);
json.put(Tags.EditConsumption.CONSUMPTION, number);
intent.putExtra(Constants.Intent.EXTRA_SHOP_INTENT_SERVICE_RETURN_JSON,
json.toString());
intent.putExtra(Constants.Intent.EXTRA_MIHOME_BUY, mMihomeBuyId);
getActivity().startService(intent);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
mDelete = (Button) view.findViewById(R.id.button_delete);
mDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mCheckStatusListener != null) {
mCheckStatusListener.onDelShoppingCartItem(mItemId,
OnCheckStatusListener.NEXT_ACTION_BACK, mItemIds);
}
}
});
getParent().getHomeButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
mOpContainer = view.findViewById(R.id.op_container);
mOpContainer.setVisibility(View.VISIBLE);
initImageContainer();
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
public void setItemId(String itemId) {
LogUtil.d(TAG, "setItemId: " + itemId);
mItemId = itemId;
}
@Override
public Loader onCreateLoader(int arg0, Bundle arg1) {
mLoader = new ShoppingLoader(getActivity(), mMihomeBuyId);
mLoader.setProgressNotifiable(mLoadingView);
return mLoader;
}
private void initImageContainer() {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
final LinearLayout parentView = (LinearLayout) layoutInflater.inflate(R.layout.selfbind_container,
null);
mPhoto = (SelfBindView) parentView.findViewById(R.id.selfbind_image);
mPhoto.SelfBindViewCallBack = new SelfBindViewInteface() {
@Override
public void bindView(ImageView view, Bitmap bitmap, Image image) {
parentView.setLayoutParams(new LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT, bitmap.getHeight()
* Device.DISPLAY_WIDTH / bitmap.getWidth()));
view.setImageBitmap(image.proccessImage(bitmap));
}
};
mPhotoContainer.addView(parentView);
}
@Override
public void onLoadFinished(Loader<Result> loader, Result result) {
ArrayList<Item> items = result.mInfo.getItems();
CartListNode node = null;
Item item = null;
for (int i = 0; i < items.size(); i++) {
item = items.get(i);
if (item.getType() != Item.TYPE_CARTLIST) {
continue;
}
node = (CartListNode) items.get(i).getNode();
if (!TextUtils.equals(node.getItemId(), mItemId) ||
!TextUtils.equals(node.getItemIds(), mItemIds)) {
continue;
}
mSelectableProducts = node.getSelectableProducts();
if (mSelectableProducts != null && !mSelectableProducts.isEmpty()) {
mTitle.setVisibility(View.GONE);
mTitleSpinner.setVisibility(View.VISIBLE);
mPrice.setVisibility(View.GONE);
mPriceNewline.setVisibility(View.VISIBLE);
mPriceNewline
.setText(getString(R.string.home_product_price_format, node.getPrice()));
int selection = 0;
ArrayList<String> names = new ArrayList<String>();
int pIdx = 0;
for (SelectableProduct product : mSelectableProducts) {
names.add(product.name);
if (product.name.equals(node.getTitle())) {
selection = pIdx;
}
pIdx++;
}
mTitleSpinnerAdapter.updateData(names);
mTitleSpinner.setSelection(selection, false);
} else {
mTitle.setVisibility(View.VISIBLE);
mTitleSpinner.setVisibility(View.GONE);
mTitle.setText(node.getTitle());
mPrice.setVisibility(View.VISIBLE);
mPriceNewline.setVisibility(View.GONE);
mPrice.setText(getString(R.string.home_product_price_format, node.getPrice()));
}
// mItemIds = node.getItemIds();
ImageLoader.getInstance()
.loadImage(mPhoto, node.getPhoto(), R.drawable.default_pic_large);
setAdaptPhoneView(node);
mSpinnerlist.clear();
int buyLimit = node.getBuyLimit();
for (int m = 1; m <= buyLimit; m++) {
mSpinnerlist.add("" + m);
}
mAdapter.updateData(mSpinnerlist);
for (int j = 0; j < mSpinnerlist.size(); j++) {
if (node.getCount() == Integer.parseInt(mSpinnerlist.get(j))) {
mOldCount = node.getCount();
mSpinner.setSelection(j, true);
}
}
if (!node.getCanChangeNum()) {
mSpinner.setVisibility(View.GONE);
} else {
mSpinner.setVisibility(View.VISIBLE);
}
if (!node.getCanDelete()) {
mDelete.setVisibility(View.GONE);
} else {
mDelete.setVisibility(View.VISIBLE);
}
break;
}
if (mContainerLayout != null) {
mContainerLayout.setVisibility(View.VISIBLE);
}
}
@Override
public void onLoaderReset(Loader<Result> arg0) {
}
@Override
public void onResume() {
super.onResume();
getActivity().setTitle(R.string.edit_cart_item_activity_title);
}
public ShoppingActivity getParent() {
return (ShoppingActivity) getActivity();
}
public void onSubmitCallback(String action, Intent callbackIntent) {
if (TextUtils.equals(action, Constants.Intent.ACTION_EDIT_CONSUMPTION)) {
getLoaderManager().restartLoader(0, null, this).forceLoad();
}
}
private void setAdaptPhoneView(CartListNode node) {
mAdaptPhoneContainer.setVisibility(View.GONE);
mAdaptPhoneTypes.removeAllViews();
if (node.getAdaptPhone() != null) {
Set<String> set = node.getAdaptPhone().keySet();
String[] adaptArray = set.toArray(new String[set.size()]);
if (adaptArray != null) {
mAdaptPhoneContainer.setVisibility(View.VISIBLE);
for (int i = 0; i < adaptArray.length; i++) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
LinearLayout view = (LinearLayout) layoutInflater.inflate(
R.layout.adapt_phone_item, null);
View phoneType = view.findViewById(R.id.phone_type);
view.setTag(R.id.phone_type, phoneType);
TextView type = (TextView) view.getTag(R.id.phone_type);
type.setText(node.getAdaptPhone().get(adaptArray[i]));
if (TextUtils.equals(Tags.Phone.M11S_PHONE, adaptArray[i])) {
type.setBackgroundResource(R.drawable.m11s_icon);
} else if (TextUtils.equals(Tags.Phone.M22S_PHONE, adaptArray[i])) {
type.setBackgroundResource(R.drawable.m22s_icon);
} else if (TextUtils.equals(Tags.Phone.MI_BOX, adaptArray[i])) {
type.setBackgroundResource(R.drawable.m11s_icon);
} else if (TextUtils.equals(Tags.Phone.M2A_PHONE, adaptArray[i])) {
type.setBackgroundResource(R.drawable.m2a_icon);
} else if (TextUtils.equals(Tags.Phone.MRED_PHONE, adaptArray[i])) {
type.setBackgroundResource(R.drawable.mred_icon);
} else if (TextUtils.equals(Tags.Phone.M3_PHONE, adaptArray[i])) {
type.setBackgroundResource(R.drawable.m3_icon);
} else if (TextUtils.equals(Tags.Phone.MI_TV, adaptArray[i])) {
type.setBackgroundResource(R.drawable.mtv_icon);
} else if (TextUtils.equals(Tags.Phone.ALL_PHONETYPE, adaptArray[i])) {
type.setTextColor(getResources().getColor(
R.color.highlight_text_color_inverse));
type.setTextSize(14);
} else {
type.setBackgroundResource(R.drawable.m11s_icon);
}
mAdaptPhoneTypes.addView(view);
}
}
}
}
public void setOnCheckStatusListener(OnCheckStatusListener l) {
mCheckStatusListener = l;
}
public static class NextStepInfo {
public SelectableProduct selectableProduct;
}
}