package com.xiaomi.xms.sales.ui; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; 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.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.activity.CampaignActivity; import com.xiaomi.xms.sales.activity.FCodeActivity; import com.xiaomi.xms.sales.activity.ProductDetailsActivity; import com.xiaomi.xms.sales.loader.ImageLoader; import com.xiaomi.xms.sales.loader.MiPhoneLoader; import com.xiaomi.xms.sales.loader.MiPhoneLoader.Result; import com.xiaomi.xms.sales.model.Image; import com.xiaomi.xms.sales.model.MiPhoneDetailInfo; import com.xiaomi.xms.sales.model.MiPhoneDetailInfo.Item; import com.xiaomi.xms.sales.model.MiPhoneDetailInfo.Item.FeatureItem; import com.xiaomi.xms.sales.model.MiPhoneDetailInfo.Item.MediaItem; import com.xiaomi.xms.sales.model.MiPhoneDetailInfo.Item.RecommendItem; import com.xiaomi.xms.sales.request.HostManager; 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.util.ToastUtil; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import com.xiaomi.xms.sales.widget.SelfBindView; import com.xiaomi.xms.sales.widget.SelfBindView.SelfBindViewInteface; import com.xiaomi.xms.sales.xmsf.account.LoginManager; import java.util.ArrayList; public class MiPhoneDetailFragment extends BaseFragment implements LoaderCallbacks<MiPhoneLoader.Result> { public static final int MIPHONE_DETAIL_LOADER = 0; public static final int MEDIA_HORIZONTAL_COUNT = 3; public static final String DEFAULT_PHONE_TYPE = "0"; private EmptyLoadingView mLoadingView; public String mProductId; private MiPhoneDetailInfo mMiPhoneDetailInfo; private LinearLayout mLinearHead; private LinearLayout mLinearMedia; private LinearLayout mLinearSecondMedia; private LinearLayout mLinearFeature; private LinearLayout mLinearGallary; private LinearLayout mLinearCurMiPhone; private LinearLayout mLinearLoadMore; private LinearLayout mInterested; private LinearLayout mPlaceholderView; private OnAddPhoneFragmentListener mAddPhoneFragmentListener; public String mNextId; public String mLastId; public boolean mNextIsPhone; public boolean mLastIsPhone; private int mPosition; @Override public void onAttach(Activity activity) { super.onAttach(activity); Bundle bundle = getArguments(); mProductId = bundle.getString(Constants.Intent.EXTRA_PRODUCT_ID); mPosition = bundle.getInt(Constants.Intent.EXTRA_PRODUCTVIEW_POSITION); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.miphone_detail_fragment, container, false); mLinearHead = (LinearLayout) view.findViewById(R.id.miphone_head_container); mLinearMedia = (LinearLayout) view.findViewById(R.id.miphone_media_container); mLinearSecondMedia = (LinearLayout) view.findViewById(R.id.miphone_media_container_second); mLinearFeature = (LinearLayout) view.findViewById(R.id.miphone_feature_container); mLinearGallary = (LinearLayout) view.findViewById(R.id.miphone_recommend_container); mLinearCurMiPhone = (LinearLayout) view.findViewById(R.id.miphone_footer_container); mLinearLoadMore = (LinearLayout) view.findViewById(R.id.miphone_load_more_container); mInterested = (LinearLayout) view.findViewById(R.id.maybe_interested_container); mPlaceholderView = (LinearLayout) view.findViewById(R.id.placeholder_view); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loadingview); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(MIPHONE_DETAIL_LOADER, null, this); } @Override public Loader onCreateLoader(int id, Bundle bundle) { if (id == MIPHONE_DETAIL_LOADER) { mLoader = new MiPhoneLoader(getActivity()); ((MiPhoneLoader) mLoader).setProductId(mProductId); mLoader.setProgressNotifiable(mLoadingView); return mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> loader, Result data) { mMiPhoneDetailInfo = data.mMiPhoneDetailInfos; bindHeadView(); setData(); if (mMiPhoneDetailInfo != null) { mNextId = mMiPhoneDetailInfo.getNextItem(); mLastId = mMiPhoneDetailInfo.getLastItem(); mNextIsPhone = mMiPhoneDetailInfo.getNextIsPhone(); mLastIsPhone = mMiPhoneDetailInfo.getLastIsPhone(); if (mAddPhoneFragmentListener != null) { mAddPhoneFragmentListener.onAddFragmentItem(mLastId, mProductId, mNextId, mLastIsPhone, mNextIsPhone, mPosition); } } } @Override public void onLoaderReset(Loader<Result> arg0) { } private void bindHeadView() { mLinearHead.removeAllViewsInLayout(); if (mMiPhoneDetailInfo != null) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); final LinearLayout parentView = (LinearLayout) layoutInflater.inflate( R.layout.miphone_detail_headview, null); SelfBindView headImg = (SelfBindView) parentView.findViewById(R.id.head_img); headImg.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)); } }; ImageLoader.getInstance().loadImage(headImg, mMiPhoneDetailInfo.getFocusImg(), R.drawable.default_pic_large); mLinearHead.addView(parentView); } } private void setData() { mLinearMedia.removeAllViewsInLayout(); mLinearSecondMedia.removeAllViewsInLayout(); mLinearFeature.removeAllViewsInLayout(); mLinearGallary.removeAllViewsInLayout(); mLinearCurMiPhone.removeAllViewsInLayout(); if (mMiPhoneDetailInfo != null) { ArrayList<MediaItem> list = new ArrayList<MediaItem>(); for (int i = 0; i < mMiPhoneDetailInfo.getItem().size(); i++) { Item data = mMiPhoneDetailInfo.getItem().get(i); if (data.getType() == Item.TYPE_MEDIA) { list.add((MediaItem) data.getNode()); } else if (data.getType() == Item.TYPE_FEATURES) { bindFeatureView((FeatureItem) data.getNode()); } else if (data.getType() == Item.TYPE_GALLERY) { bindRecommendView((RecommendItem) data.getNode()); } } if (list != null) { bindMediaView(list); } mLinearLoadMore.setVisibility(View.VISIBLE); mInterested.setVisibility(View.VISIBLE); mPlaceholderView.setVisibility(View.VISIBLE); } } private void bindMediaView(ArrayList<MediaItem> data) { int total = data.size(); int step = 1; for (int i = 0; i < total; i = i + step) { if (total == MEDIA_HORIZONTAL_COUNT) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); LinearLayout view = (LinearLayout) layoutInflater.inflate( R.layout.miphone_media_item, null); TextView introduce = (TextView) view.findViewById(R.id.introduce); ImageView show = (ImageView) view.findViewById(R.id.media_img); introduce.setText(data.get(i).getMediaItemText()); ImageLoader.getInstance().loadImage(show, data.get(i).getMediaItemImg(), R.drawable.default_pic_small_inverse); final String url = data.get(i).getMediaItemUrl(); show.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openBrowserToMedia(url); } }); LayoutParams params = new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1); if (i == total - 1) { params.rightMargin = getResources().getDimensionPixelSize( R.dimen.button_padding_size); } params.leftMargin = getResources().getDimensionPixelSize( R.dimen.button_padding_size); mLinearMedia.addView(view, params); } else { step = 2; LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); LinearLayout view = (LinearLayout) layoutInflater.inflate( R.layout.miphone_media_second_itme, null); LinearLayout secondItemView = (LinearLayout) view .findViewById(R.id.media_second_item); secondItemView.setVisibility(View.INVISIBLE); TextView introduce = (TextView) view.findViewById(R.id.media_introduce); ImageView show = (ImageView) view.findViewById(R.id.media_image); introduce.setText(data.get(i).getMediaItemText()); ImageLoader.getInstance().loadImage(show, data.get(i).getMediaItemImg(), R.drawable.default_pic_small_inverse); final String url = data.get(i).getMediaItemUrl(); show.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openBrowserToMedia(url); } }); if (i + 1 < total) { secondItemView.setVisibility(View.VISIBLE); TextView secondIntroduce = (TextView) view .findViewById(R.id.media_introduce_second); ImageView secondShow = (ImageView) view.findViewById(R.id.media_image_second); secondIntroduce.setText(data.get(i + 1).getMediaItemText()); ImageLoader.getInstance() .loadImage(secondShow, data.get(i + 1).getMediaItemImg(), R.drawable.default_pic_small_inverse); final String secondUrl = data.get(i + 1).getMediaItemUrl(); secondShow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openBrowserToMedia(secondUrl); } }); } mLinearSecondMedia.addView(view); } } } private void bindFeatureView(FeatureItem data) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); final LinearLayout parentView = (LinearLayout) layoutInflater.inflate(R.layout.selfbind_container, null); SelfBindView mShow = (SelfBindView) parentView.findViewById(R.id.selfbind_image); mShow.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)); } }; ImageLoader.getInstance().loadImage(mShow, data.getFeatureItemImg(), R.drawable.default_pic_large); mLinearFeature.addView(parentView); } private void bindRecommendView(RecommendItem data) { if (TextUtils.equals(mProductId, data.getProductId())) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); LinearLayout view = (LinearLayout) layoutInflater .inflate(R.layout.miphone_footer, null); TextView phoneName = (TextView) view.findViewById(R.id.phone_name_foot); TextView phonePrice = (TextView) view.findViewById(R.id.phone_price_foot); Button buy = (Button) view.findViewById(R.id.buy_miphone); Button codeBuy = (Button) view.findViewById(R.id.fcode_buy_miphone); phoneName.setText(data.getProductName()); phonePrice.setText(getResources().getString(R.string.rmb_identification, data.getProductPrice())); codeBuy.setText(getString(R.string.fcode_buy)); if (data.getIsCanBuy()) { buy.setText(getString(R.string.immediately_buy)); } else { buy.setText(getString(R.string.miphone_none_stock)); buy.setEnabled(false); } buy.setOnClickListener(onClickListener); codeBuy.setOnClickListener(onClickListener); mLinearCurMiPhone.addView(view); } else { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); LinearLayout view = (LinearLayout) layoutInflater.inflate( R.layout.miphone_recommend_item, null); ImageView phoneImg = (ImageView) view.findViewById(R.id.gallery_img); TextView phoneName = (TextView) view.findViewById(R.id.phone_name); TextView phonePrice = (TextView) view.findViewById(R.id.phone_price); TextView phoneBrief = (TextView) view.findViewById(R.id.phone_brief); ImageLoader.getInstance().loadImage(phoneImg, data.getRecommendItemImg(), R.drawable.list_default_bg); phoneName.setText(data.getProductName()); phonePrice.setText(getResources().getString(R.string.rmb_identification, data.getProductPrice())); phoneBrief.setText(data.getProductBrief()); final String productId = data.getProductId(); final int isPhone = data.isPhone(); final String activityUrl = data.getActivityUrl(); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { goToRecommendProduct(productId, isPhone, activityUrl); } }); mLinearGallary.addView(view); } } private OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.buy_miphone: immediatelyBuyMiPhone(); break; case R.id.fcode_buy_miphone: fCodeBuyMiPhone(); break; } } }; private void immediatelyBuyMiPhone() { if (LoginManager.getInstance().hasLogin()) { String phoneType = mMiPhoneDetailInfo.getPhoneType(); phoneType = TextUtils.isEmpty(phoneType) ? DEFAULT_PHONE_TYPE : phoneType; String url = HostManager.URL_XIAOMI_SHOP_MIPHONE_IMMEDIATELY_BUY_URL + phoneType; LogUtil.d("immediatelyBuyMiPhone", url); CampaignActivity.startActivityStandard((BaseActivity) getActivity(), url); } else { ToastUtil.show(getActivity(), getString(R.string.please_login)); ((BaseActivity) getActivity()).gotoAccount(); } } private void fCodeBuyMiPhone() { if (LoginManager.getInstance().hasLogin()) { Intent intent = new Intent(getActivity(), FCodeActivity.class); startActivity(intent); } else { ToastUtil.show(getActivity(), getString(R.string.fcode_buy_please_login)); ((BaseActivity) getActivity()).gotoAccount(); } } private void openBrowserToMedia(String url) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri content_url = Uri.parse(url); intent.setData(content_url); if (!TextUtils.isEmpty(url)) { startActivity(intent); } } private void goToRecommendProduct(String phoneId, int isphone, String activityUrl) { if (!TextUtils.isEmpty(activityUrl)) { CampaignActivity.startActivityStandard((BaseActivity) getActivity(), activityUrl); return; } if (!TextUtils.isEmpty(phoneId)) { Intent intent = new Intent(getActivity(), ProductDetailsActivity.class); if (isphone == 1) { intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, true); } else if (isphone == 0) { intent.putExtra(Constants.Intent.EXTRA_IS_MIPHONE, false); } intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, phoneId); getActivity().startActivity(intent); } } public interface OnAddPhoneFragmentListener { public void onAddFragmentItem(String lastId, String thisId, String nextId, boolean lastIsPhone, boolean nextIsPhone, int position); } public void setOnAddPhoneFragmentListener(OnAddPhoneFragmentListener l) { mAddPhoneFragmentListener = l; } public void moveAddPhoneFragmentListener() { mAddPhoneFragmentListener = null; } }