package com.xiaomi.xms.sales.ui;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaScannerConnection;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.activity.ProductDetailsActivity;
import com.xiaomi.xms.sales.adapter.BasePageAdapter;
import com.xiaomi.xms.sales.adapter.ProductDetailPageAdapter;
import com.xiaomi.xms.sales.adapter.ProductDetailPageAdapter.OnPageItemClickListener;
import com.xiaomi.xms.sales.loader.ImageLoader;
import com.xiaomi.xms.sales.loader.ProductDetailsLoader;
import com.xiaomi.xms.sales.loader.ProductDetailsLoader.Result;
import com.xiaomi.xms.sales.model.ProductDetailsInfo;
import com.xiaomi.xms.sales.model.ProductDetailsInfoItem;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.ImageUtil;
import com.xiaomi.xms.sales.util.ToastUtil;
import com.xiaomi.xms.sales.widget.gallery.ZoomImageView;
public class ProductDetailFullScreenFragment extends BaseFragment implements
LoaderCallbacks<ProductDetailsLoader.Result>, OnPageItemClickListener, OnPageChangeListener {
private static final String TAG = "ProductDetailFullScreenFragment";
private static final int PRODUCT_DETAIL_LOADER = 0;
private ViewPager mViewPager;
private BasePageAdapter<ProductDetailsInfoItem> mProductPageAdapter;
private View mActionBarBottom;
private View mActionBarTop;
private TextView mActionBarTile;
private View mActionBarHome;
private Button mProductDetailBtn;
private Button mSaveImageBtn;
private ProductDetailsInfo mProductDetailInfos;
private String mProductId;
private int mInitItem;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mProductId = getArguments().getString(Constants.Intent.EXTRA_PRODUCT_ID);
mInitItem = getArguments().getInt(Constants.Intent.EXTRA_FULL_SCREEN_START_INDEX, -1);
View view = inflater.inflate(R.layout.product_detail_full_screen_fragment, container, false);
mViewPager = (ViewPager) view.findViewById(R.id.product_detail_pager);
mProductPageAdapter = new ProductDetailPageAdapter(getActivity());
((ProductDetailPageAdapter) mProductPageAdapter).setOnPageItemClickListener(this);
mViewPager.setAdapter(mProductPageAdapter);
mViewPager.setOnPageChangeListener(this);
mViewPager.setOnTouchListener(mViewPagerOnTouchListener);
mViewPager.setPageMargin(getResources().getDimensionPixelSize(
R.dimen.view_pager_page_margin));
initFloatingActionBar(view);
return view;
}
private OnTouchListener mViewPagerOnTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 如果当前没有数据,那么无法滑动
if (mProductPageAdapter.getCount() == 0) {
return true;
}
ZoomImageView currentImageView = (ZoomImageView) mViewPager.findViewById(
mViewPager.getCurrentItem()).findViewById(R.id.product_details_photo_frame);
// 如果当前图片被放大了,那么无法滑动
if (currentImageView.isZoomedOut()) {
currentImageView.dispatchTouchEvent(event);
return true;
}
return false;
}
};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(PRODUCT_DETAIL_LOADER, null, this);
}
private void initFloatingActionBar(View view) {
mActionBarTop = view.findViewById(R.id.action_bar_top);
mActionBarBottom = view.findViewById(R.id.action_bar_bottom);
mActionBarTile = (TextView)view.findViewById(R.id.action_bar_title);
mActionBarHome = view.findViewById(R.id.action_bar_home);
mActionBarHome.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
mSaveImageBtn = (Button)view.findViewById(R.id.save_image);
mSaveImageBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mProductPageAdapter.getCount() > 0) {
int currentPos = mViewPager.getCurrentItem();
ProductDetailsInfoItem item = mProductPageAdapter.getData(currentPos);
Bitmap image = ImageLoader.getInstance().syncLoadLocalImage(item.getImage(), false);
if (image != null) {
String fileName = Constants.ExternalStorage.ROOT_SAVED
+ mProductDetailInfos.getProductName() + "_"
+ System.currentTimeMillis() + ".jpg";
if (ImageUtil.saveToFile(image, fileName)) {
MediaScannerConnection.scanFile(getActivity(), new String[] {
fileName }, null, null);
ToastUtil.show(
getActivity(),
getString(R.string.save_pic_success, fileName));
} else {
ToastUtil.show(getActivity(), R.string.save_pic_fail);
}
} else {
ToastUtil.show(getActivity(), R.string.save_pic_unavailiable);
}
}
}
});
mProductDetailBtn = (Button)view.findViewById(R.id.back_to_detail);
if (isFromProductDetail()) {
mProductDetailBtn.setText(R.string.back_to_detail);
}
mProductDetailBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isFromProductDetail()) {
Intent intent = new Intent(getActivity(), ProductDetailsActivity.class);
intent.putExtra(Constants.Intent.EXTRA_PRODUCT_ID, mProductId);
getActivity().startActivity(intent);
} else {
getActivity().onBackPressed();
}
}
});
}
@Override
public Loader onCreateLoader(int id, Bundle bundle) {
if (id == PRODUCT_DETAIL_LOADER) {
mLoader = new ProductDetailsLoader(getActivity());
((ProductDetailsLoader)mLoader).setProductId(mProductId);
return mLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<Result> loader, Result data) {
mProductDetailInfos = data.mProductDetailsInfos;
if (mProductDetailInfos != null) {
mProductPageAdapter.updateData(mProductDetailInfos.getItems());
} else {
mProductPageAdapter.updateData(null);
}
int currentIndex = isFromProductDetail() ? mInitItem : 0;
mViewPager.setCurrentItem(currentIndex);
updateTitle(currentIndex + 1, mProductPageAdapter.getCount());
}
private void updateTitle(int index, int count) {
mActionBarTile.setText(getResources().getString(R.string.pic_view_format, index,
count));
}
private boolean isFromProductDetail() {
return mInitItem != -1;
}
@Override
public void onLoaderReset(Loader<Result> arg0) {
}
@Override
public void onClick() {
if (mActionBarBottom.getVisibility() == View.VISIBLE) {
mActionBarBottom.startAnimation(AnimationUtils.loadAnimation(getActivity(),
R.anim.disappear_from_top));
mActionBarBottom.setVisibility(View.GONE);
mActionBarTop.setVisibility(View.GONE);
} else {
mActionBarBottom.startAnimation(AnimationUtils.loadAnimation(getActivity(),
R.anim.appear_from_bottom));
mActionBarBottom.setVisibility(View.VISIBLE);
mActionBarTop.setVisibility(View.VISIBLE);
updateTitle(mViewPager.getCurrentItem() + 1, mProductPageAdapter.getCount());
}
}
@Override
public void onPageScrollStateChanged(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
updateTitle(mViewPager.getCurrentItem() + 1, mProductPageAdapter.getCount());
}
}