package pct.droid.activities;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import butterknife.Bind;
import pct.droid.R;
import pct.droid.activities.base.PopcornBaseActivity;
import pct.droid.base.beaming.BeamPlayerNotificationService;
import pct.droid.base.beaming.server.BeamServerService;
import pct.droid.base.content.preferences.Prefs;
import pct.droid.base.providers.media.models.Media;
import pct.droid.base.providers.media.models.Movie;
import pct.droid.base.providers.media.models.Show;
import pct.droid.base.torrent.StreamInfo;
import pct.droid.base.utils.AnimUtils;
import pct.droid.base.utils.NetworkUtils;
import pct.droid.base.utils.PixelUtils;
import pct.droid.base.utils.PrefUtils;
import pct.droid.base.utils.VersionUtils;
import pct.droid.fragments.dialog.MessageDialogFragment;
import pct.droid.fragments.MovieDetailFragment;
import pct.droid.fragments.ShowDetailFragment;
import pct.droid.fragments.base.BaseDetailFragment;
import pct.droid.utils.ActionBarBackground;
import pct.droid.widget.ObservableParallaxScrollView;
import timber.log.Timber;
public class MediaDetailActivity extends PopcornBaseActivity implements BaseDetailFragment.FragmentListener {
private static Media sMedia;
private Integer mHeaderHeight = 0, mToolbarHeight = 0, mTopHeight;
private Boolean mTransparentBar = true, mIsTablet = false;
@Bind(R.id.toolbar)
Toolbar mToolbar;
TextView mToolbarTitle;
@Bind(R.id.scrollview)
ObservableParallaxScrollView mScrollView;
@Nullable
@Bind(R.id.parallax)
RelativeLayout mParallaxLayout;
@Nullable
@Bind(R.id.parallax_color)
View mParallaxColor;
@Bind(R.id.content)
FrameLayout mContent;
@Bind(R.id.logo)
ImageView mLogo;
@Bind(R.id.bg_image)
ImageView mBgImage;
public static void startActivity(Context context, Media media) {
Intent intent = new Intent(context, MediaDetailActivity.class);
if (media != null)
sMedia = media;
context.startActivity(intent);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
super.onCreate(savedInstanceState, R.layout.activity_mediadetail);
setSupportActionBar(mToolbar);
setShowCasting(true);
// Set transparent toolbar
// Hacky empty string to make sure title textview is added to the toolbar
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle(" ");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
ActionBarBackground.fadeOut(this);
// Get Title TextView from the Toolbar
if (mToolbar.getChildAt(0) instanceof TextView) {
mToolbarTitle = (TextView) mToolbar.getChildAt(0);
} else {
mToolbarTitle = (TextView) mToolbar.getChildAt(1);
}
mToolbarTitle.setVisibility(View.INVISIBLE);
// mParallaxLayout doesn't exist? Then this is a tablet or big screen device
mIsTablet = mParallaxLayout == null;
if(sMedia == null) {
finish();
return;
}
getSupportActionBar().setTitle(sMedia.title);
mScrollView.setListener(mOnScrollListener);
mScrollView.setOverScrollEnabled(false);
// Calculate toolbar scrolling variables
if (!mIsTablet) {
int parallaxHeight = mParallaxLayout.getLayoutParams().height = PixelUtils.getScreenHeight(this);
mTopHeight = (parallaxHeight / 3) * 2;
((LinearLayout.LayoutParams) mContent.getLayoutParams()).topMargin = -(parallaxHeight / 3);
mContent.setMinimumHeight(mTopHeight / 3);
mParallaxColor.setBackgroundColor(sMedia.color);
mParallaxColor.getBackground().setAlpha(0);
mToolbar.setBackgroundColor(sMedia.color);
mToolbar.getBackground().setAlpha(0);
} else {
mTopHeight = (PixelUtils.getScreenHeight(this) / 2);
((LinearLayout.LayoutParams) mContent.getLayoutParams()).topMargin = mTopHeight;
mContent.setMinimumHeight(mTopHeight);
}
Fragment fragment = null;
if (sMedia.isMovie) {
fragment = MovieDetailFragment.newInstance((Movie) sMedia);
} else if (sMedia instanceof Show) {
fragment = ShowDetailFragment.newInstance((Show) sMedia);
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content, fragment).commit();
}
String imageUrl = sMedia.image;
if (mIsTablet || !PixelUtils.screenIsPortrait(this)) {
imageUrl = sMedia.headerImage;
}
Picasso.with(this).load(imageUrl).into(mBgImage, new Callback() {
@Override
public void onSuccess() {
mHandler.post(new Runnable() {
@Override
public void run() {
AnimUtils.fadeIn(mBgImage);
mLogo.setVisibility(View.GONE);
}
});
}
@Override
public void onError() {
}
});
}
@Override
protected void onResume() {
super.onResume();
supportInvalidateOptionsMenu();
if (null != mService) {
mService.stopStreaming();
}
BeamServerService.getServer().stop();
BeamPlayerNotificationService.cancelNotification();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void playStream(StreamInfo streamInfo) {
if (PrefUtils.get(this, Prefs.WIFI_ONLY, true) &&
!NetworkUtils.isWifiConnected(this) &&
NetworkUtils.isNetworkConnected(this)) {
MessageDialogFragment.show(getFragmentManager(), R.string.wifi_only, R.string.wifi_only_message);
} else {
if(mService != null) {
mService.startForeground();
}
if (VersionUtils.isLollipop()) {
mScrollView.smoothScrollTo(0, 0);
StreamLoadingActivity.startActivity(this, streamInfo, Pair.create((View) mBgImage, ViewCompat.getTransitionName(mBgImage)));
} else {
StreamLoadingActivity.startActivity(this, streamInfo);
}
}
}
public void setSubScrollListener(ObservableParallaxScrollView.Listener subScrollListener) {
mSubOnScrollListener = subScrollListener;
}
public int getHeaderHeight() {
return mHeaderHeight;
}
/* The scroll listener makes the toolbar scroll off the screen when the user scroll all the way down. And it appears again on scrolling up. */
private ObservableParallaxScrollView.Listener mSubOnScrollListener = null;
private ObservableParallaxScrollView.Listener mOnScrollListener = new ObservableParallaxScrollView.Listener() {
@Override
public void onScroll(int scrollY, ObservableParallaxScrollView.Direction direction) {
if (mToolbarHeight == 0) {
mToolbarHeight = mToolbar.getHeight();
mHeaderHeight = mTopHeight - mToolbarHeight;
Timber.d("mHeaderHeight: %d", mHeaderHeight);
}
if (!mIsTablet) {
if (scrollY > 0) {
if (scrollY < mHeaderHeight) {
float diff = (float) scrollY / (float) mHeaderHeight;
int alpha = (int) Math.ceil(255 * diff);
mParallaxColor.getBackground().setAlpha(alpha);
mToolbar.getBackground().setAlpha(0);
AnimUtils.fadeOut(mToolbarTitle);
} else {
mToolbar.getBackground().setAlpha(255);
mParallaxColor.getBackground().setAlpha(255);
AnimUtils.fadeIn(mToolbarTitle);
}
}
} else {
/* Fade out when over header */
if (mTopHeight - scrollY < 0) {
if (mTransparentBar) {
mTransparentBar = false;
ActionBarBackground.changeColor(MediaDetailActivity.this, sMedia.color, true);
}
} else {
if (!mTransparentBar) {
mTransparentBar = true;
ActionBarBackground.fadeOut(MediaDetailActivity.this);
}
}
}
if (mSubOnScrollListener != null) {
mSubOnScrollListener.onScroll(scrollY, direction);
}
}
};
}