package pct.droid.fragments;
import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.text.Layout;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import pct.droid.R;
import pct.droid.adapters.ShowDetailPagerAdapter;
import pct.droid.base.fragments.dialog.StringArraySelectorDialogFragment;
import pct.droid.base.providers.media.models.Episode;
import pct.droid.base.providers.media.models.Show;
import pct.droid.base.utils.PixelUtils;
import pct.droid.base.utils.VersionUtils;
import pct.droid.fragments.dialog.SynopsisDialogFragment;
import pct.droid.fragments.base.BaseDetailFragment;
import pct.droid.widget.ObservableParallaxScrollView;
import pct.droid.widget.WrappingViewPager;
public class ShowDetailFragment extends BaseDetailFragment {
private static Show sShow;
private Boolean mIsTablet = false;
@Bind(R.id.pager)
WrappingViewPager mViewPager;
@Bind(R.id.tabs)
TabLayout mTabs;
@Nullable
@Bind(R.id.background)
View mBackground;
@Nullable
@Bind(R.id.top)
View mShadow;
@Nullable
@Bind(R.id.title)
TextView mTitle;
@Nullable
@Bind(R.id.aired)
TextView mMeta;
@Nullable
@Bind(R.id.synopsis)
TextView mSynopsis;
@Nullable
@Bind(R.id.read_more)
TextView mReadMore;
@Nullable
@Bind(R.id.rating)
RatingBar mRating;
@Nullable
@Bind(R.id.cover_image)
ImageView mCoverImage;
public static ShowDetailFragment newInstance(Show show) {
sShow = show;
return new ShowDetailFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mRoot = inflater.inflate(R.layout.fragment_showdetail, container, false);
ButterKnife.bind(this, mRoot);
if (VersionUtils.isJellyBean() && container != null) {
int minHeight = container.getMinimumHeight() + PixelUtils.getPixelsFromDp(mActivity, 48);
mRoot.setMinimumHeight(minHeight);
mViewPager.setMinimumHeight(minHeight);
}
if(sShow == null)
return mRoot;
mTabs.setTabMode(TabLayout.MODE_SCROLLABLE);
mTabs.setTabGravity(TabLayout.GRAVITY_CENTER);
mIsTablet = mCoverImage != null;
List<Fragment> fragments = new ArrayList<>();
if (mIsTablet) {
Double rating = Double.parseDouble(sShow.rating);
mTitle.setText(sShow.title);
mRating.setProgress(rating.intValue());
String metaDataStr = sShow.year;
if (sShow.status != null) {
metaDataStr += " • ";
if (sShow.status == Show.Status.CONTINUING) {
metaDataStr += getString(R.string.continuing);
} else {
metaDataStr += getString(R.string.ended);
}
}
if (!TextUtils.isEmpty(sShow.genre)) {
metaDataStr += " • ";
metaDataStr += sShow.genre;
}
mMeta.setText(metaDataStr);
if (!TextUtils.isEmpty(sShow.synopsis)) {
mSynopsis.setText(sShow.synopsis);
mSynopsis.post(new Runnable() {
@Override
public void run() {
boolean ellipsized = false;
Layout layout = mSynopsis.getLayout();
if (layout == null) return;
int lines = layout.getLineCount();
if (lines > 0) {
int ellipsisCount = layout.getEllipsisCount(lines - 1);
if (ellipsisCount > 0) {
ellipsized = true;
}
}
mReadMore.setVisibility(ellipsized ? View.VISIBLE : View.GONE);
}
});
} else {
mSynopsis.setClickable(false);
mReadMore.setVisibility(View.GONE);
}
Picasso.with(mCoverImage.getContext()).load(sShow.image).into(mCoverImage);
// Use reflection to set indicator color
try {
Field field = TabLayout.class.getDeclaredField("mTabStrip");
field.setAccessible(true);
Object ob = field.get(mTabs);
Class<?> c = Class.forName("android.support.design.widget.TabLayout$SlidingTabStrip");
Method method = c.getDeclaredMethod("setSelectedIndicatorColor", int.class);
method.setAccessible(true);
method.invoke(ob, sShow.color);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
mBackground.post(new Runnable() {
@Override
public void run() {
mBackground.getLayoutParams().height = mBackground.getLayoutParams().height - mTabs.getHeight();
}
});
fragments.add(ShowDetailAboutFragment.newInstance(sShow));
}
final ArrayList<Integer> availableSeasons = new ArrayList<>();
for (Episode episode : sShow.episodes) {
if (!availableSeasons.contains(episode.season)) {
availableSeasons.add(episode.season);
}
}
Collections.sort(availableSeasons);
boolean hasSpecial = availableSeasons.indexOf(0) > -1;
if (hasSpecial)
availableSeasons.remove(availableSeasons.indexOf(0));
for (int seasonInt : availableSeasons) {
fragments.add(ShowDetailSeasonFragment.newInstance(sShow, seasonInt));
}
if (hasSpecial)
fragments.add(ShowDetailSeasonFragment.newInstance(sShow, 0));
ShowDetailPagerAdapter fragmentPagerAdapter = new ShowDetailPagerAdapter(mActivity, getChildFragmentManager(), fragments);
mViewPager.setAdapter(fragmentPagerAdapter);
mTabs.setupWithViewPager(mViewPager);
mTabs.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabs));
if(fragmentPagerAdapter.getCount() == 1) {
mTabs.setTabMode(TabLayout.MODE_FIXED);
}
mActivity.setSubScrollListener(mOnScrollListener);
return mRoot;
}
@Override
public void onDetach() {
super.onDetach();
mActivity.setSubScrollListener(null);
}
@Nullable
@OnClick(R.id.read_more)
public void openReadMore(View v) {
if (getFragmentManager().findFragmentByTag("overlay_fragment") != null)
return;
SynopsisDialogFragment synopsisDialogFragment = new SynopsisDialogFragment();
Bundle b = new Bundle();
b.putString("text", sShow.synopsis);
synopsisDialogFragment.setArguments(b);
synopsisDialogFragment.show(getFragmentManager(), "overlay_fragment");
}
public void openDialog(String title, String[] items, DialogInterface.OnClickListener onClickListener) {
StringArraySelectorDialogFragment.show(mActivity.getSupportFragmentManager(), title, items, -1, onClickListener);
}
private ObservableParallaxScrollView.Listener mOnScrollListener = new ObservableParallaxScrollView.Listener() {
@Override
public void onScroll(int scrollY, ObservableParallaxScrollView.Direction direction) {
if (!mIsTablet) {
if (scrollY > 0) {
int headerHeight = mActivity.getHeaderHeight();
if (scrollY < headerHeight) {
float alpha = 1.0f - ((float) scrollY / (float) headerHeight);
mShadow.setAlpha(alpha);
mTabs.setBackgroundColor(mActivity.getResources().getColor(android.R.color.transparent));
mTabs.setTranslationY(0);
} else {
mShadow.setAlpha(0);
mTabs.setBackgroundColor(sShow.color);
mTabs.setTranslationY(scrollY - headerHeight);
}
}
}
}
};
}