package com.xiaomi.xms.sales.ui;
import android.app.Activity;
import android.graphics.Paint;
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.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.TextView;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.adapter.BasePageAdapter;
import com.xiaomi.xms.sales.adapter.HomePageAdapter;
import com.xiaomi.xms.sales.adapter.HomePageAdapter.OnPageItemClickListener;
import com.xiaomi.xms.sales.loader.HomeLoader;
import com.xiaomi.xms.sales.loader.HomeLoader.Result;
import com.xiaomi.xms.sales.model.HomeInfo;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.Utils.Network;
import com.xiaomi.xms.sales.widget.BaseAlertDialog;
public class HomeFullScreenFragment extends BaseFragment implements
LoaderCallbacks<HomeLoader.Result>, OnPageChangeListener, OnPageItemClickListener {
private static final String TAG = "HomeFullScreenFragment";
private static final int HOME_LOADER = 0;
private ViewPager mViewPager;
private BasePageAdapter<HomeInfo> mHomePageAdapter;
private View mFloatingActionBar;
private TextView mProductName;
private TextView mProductPrice;
private TextView mFullPrice;
private View mFullScreenViewBtn;
private int mStartIndex = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_full_screen_fragment, container, false);
mViewPager = (ViewPager) view.findViewById(R.id.home_pager);
initFloatingActionBar(view);
mHomePageAdapter = new HomePageAdapter(getActivity());
((HomePageAdapter) mHomePageAdapter).setOnPageItemClickListener(this);
mViewPager.setAdapter(mHomePageAdapter);
mViewPager.setOnPageChangeListener(this);
mViewPager.setPageMargin(getResources().getDimensionPixelSize(
R.dimen.view_pager_page_margin));
if (getArguments() != null) {
mStartIndex = getArguments().getInt(
Constants.Intent.EXTRA_FULL_SCREEN_START_INDEX, 0);
}
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!shouldUserConfirm()) {
getLoaderManager().initLoader(HOME_LOADER, null, this);
}
}
private void initFloatingActionBar(View view) {
mFloatingActionBar = view.findViewById(R.id.floating_action_bar);
mProductName = (TextView) view.findViewById(R.id.product_name);
mProductPrice = (TextView) view.findViewById(R.id.product_price);
mFullPrice = (TextView) view.findViewById(R.id.full_price);
mFullPrice.getPaint().setFlags(Paint.ANTI_ALIAS_FLAG | Paint.STRIKE_THRU_TEXT_FLAG);
mFullScreenViewBtn = view.findViewById(R.id.view_detail);
mFullScreenViewBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
HomeBaseListItem.viewProductDetail(getActivity(), (HomeInfo) v.getTag(), true);
}
});
}
private void updateFloatingActionBar(HomeInfo data) {
mFullScreenViewBtn.setTag(data);
mProductName.setText(data.getProductName());
if (TextUtils.isEmpty(data.getFullPrice())
|| TextUtils.equals(data.getFullPrice(), data.getProductPrice())) {
mFullPrice.setVisibility(View.GONE);
} else {
mFullPrice.setVisibility(View.VISIBLE);
mFullPrice.setText(getActivity().getString(R.string.home_product_origin_price_format,
data.getFullPrice()));
}
if (TextUtils.isEmpty(data.getProductPrice())) {
mProductPrice.setVisibility(View.GONE);
} else {
mProductPrice.setVisibility(View.VISIBLE);
if (mFullPrice.getVisibility() == View.VISIBLE) {
mProductPrice.setText(getActivity().getString(
R.string.home_product_spec_price_format,
data.getProductPrice()));
} else {
mProductPrice.setText(getActivity().getString(R.string.home_product_price_format,
data.getProductPrice()));
}
}
}
@Override
public Loader onCreateLoader(int id, Bundle bundle) {
if (id == HOME_LOADER) {
mLoader = new HomeLoader(getActivity());
return mLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<Result> loader, Result data) {
mHomePageAdapter.updateData(data.mHomeInfos);
if (mStartIndex < mHomePageAdapter.getCount()) {
mViewPager.setCurrentItem(mStartIndex);
HomeInfo homeData = mHomePageAdapter.getData(mViewPager.getCurrentItem());
mProductName.setText(homeData.getProductName());
updateFloatingActionBar(homeData);
}
}
@Override
public void onLoaderReset(Loader<Result> arg0) {
}
@Override
public void onPageScrollStateChanged(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
HomeInfo data = mHomePageAdapter.getData(mViewPager.getCurrentItem());
updateFloatingActionBar(data);
}
@Override
public void onClick() {
if (mFloatingActionBar.getVisibility() == View.VISIBLE) {
mFloatingActionBar.startAnimation(AnimationUtils.loadAnimation(getActivity(),
R.anim.disappear_from_top));
mFloatingActionBar.setVisibility(View.GONE);
} else {
mFloatingActionBar.startAnimation(AnimationUtils.loadAnimation(getActivity(),
R.anim.appear_from_bottom));
mFloatingActionBar.setVisibility(View.VISIBLE);
HomeInfo data = mHomePageAdapter.getData(mViewPager.getCurrentItem());
updateFloatingActionBar(data);
}
}
private boolean shouldUserConfirm() {
if (Network.isMobileConnected(getActivity())) {
BaseAlertDialog dialog = new BaseAlertDialog(getActivity());
dialog.setTitle(R.string.home_full_screen_appear_title);
dialog.setMessage(R.string.home_full_screen_appear_summary);
dialog.setPositiveButton(R.string.home_full_screen_use, new OnClickListener() {
@Override
public void onClick(View v) {
getLoaderManager().initLoader(HOME_LOADER, null, HomeFullScreenFragment.this);
}
});
dialog.setNegativeButton(R.string.home_full_screen_discard,
new OnClickListener() {
@Override
public void onClick(View v) {
getActivity().setResult(Activity.RESULT_CANCELED);
getActivity().finish();
}
});
dialog.setCancelable(false);
dialog.show();
return true;
}
return false;
}
}