package com.kabouzeid.gramophone.ui.fragments.player;
import android.animation.Animator;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.AlbumCoverPagerAdapter;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.misc.SimpleAnimatorListener;
import com.kabouzeid.gramophone.ui.fragments.AbsMusicServiceFragment;
import com.kabouzeid.gramophone.util.ViewUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements ViewPager.OnPageChangeListener {
public static final String TAG = PlayerAlbumCoverFragment.class.getSimpleName();
private Unbinder unbinder;
@BindView(R.id.player_album_cover_viewpager)
ViewPager viewPager;
@BindView(R.id.player_favorite_icon)
ImageView favoriteIcon;
private Callbacks callbacks;
private int currentPosition;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_player_album_cover, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPager.addOnPageChangeListener(this);
viewPager.setOnTouchListener(new View.OnTouchListener() {
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
if (callbacks != null) {
callbacks.onFavoriteToggled();
return true;
}
return super.onDoubleTap(e);
}
});
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
viewPager.removeOnPageChangeListener(this);
unbinder.unbind();
}
@Override
public void onServiceConnected() {
updatePlayingQueue();
}
@Override
public void onPlayingMetaChanged() {
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
}
@Override
public void onQueueChanged() {
updatePlayingQueue();
}
private void updatePlayingQueue() {
viewPager.setAdapter(new AlbumCoverPagerAdapter(getFragmentManager(), MusicPlayerRemote.getPlayingQueue()));
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
onPageSelected(MusicPlayerRemote.getPosition());
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
currentPosition = position;
((AlbumCoverPagerAdapter) viewPager.getAdapter()).receiveColor(colorReceiver, position);
if (position != MusicPlayerRemote.getPosition()) {
MusicPlayerRemote.playSongAt(position);
}
}
private AlbumCoverPagerAdapter.AlbumCoverFragment.ColorReceiver colorReceiver = new AlbumCoverPagerAdapter.AlbumCoverFragment.ColorReceiver() {
@Override
public void onColorReady(int color, int requestCode) {
if (currentPosition == requestCode) {
notifyColorChange(color);
}
}
};
@Override
public void onPageScrollStateChanged(int state) {
}
public void showHeartAnimation() {
favoriteIcon.clearAnimation();
favoriteIcon.setAlpha(0f);
favoriteIcon.setScaleX(0f);
favoriteIcon.setScaleY(0f);
favoriteIcon.setVisibility(View.VISIBLE);
favoriteIcon.setPivotX(favoriteIcon.getWidth() / 2);
favoriteIcon.setPivotY(favoriteIcon.getHeight() / 2);
favoriteIcon.animate()
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationCancel(Animator animation) {
favoriteIcon.setVisibility(View.INVISIBLE);
}
})
.withEndAction(new Runnable() {
@Override
public void run() {
favoriteIcon.animate()
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
.setInterpolator(new AccelerateInterpolator())
.scaleX(0f)
.scaleY(0f)
.alpha(0f)
.start();
}
})
.start();
}
private void notifyColorChange(int color) {
if (callbacks != null) callbacks.onColorChanged(color);
}
public void setCallbacks(Callbacks listener) {
callbacks = listener;
}
public interface Callbacks {
void onColorChanged(int color);
void onFavoriteToggled();
}
}