Added double tap on album cover to toggle favorite

This commit is contained in:
Karim Abou Zeid 2015-12-23 18:27:30 +01:00
commit b3a061c342
3 changed files with 45 additions and 20 deletions

View file

@ -49,7 +49,7 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
new SleepTimerDialog().show(getFragmentManager(), "SET_SLEEP_TIMER"); new SleepTimerDialog().show(getFragmentManager(), "SET_SLEEP_TIMER");
return true; return true;
case R.id.action_toggle_favorite: case R.id.action_toggle_favorite:
MusicUtil.toggleFavorite(getActivity(), song); toggleFavorite(song);
return true; return true;
case R.id.action_share: case R.id.action_share:
SongShareDialog.create(song).show(getFragmentManager(), "SHARE_SONG"); SongShareDialog.create(song).show(getFragmentManager(), "SHARE_SONG");
@ -83,6 +83,10 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
return false; return false;
} }
protected void toggleFavorite(Song song){
MusicUtil.toggleFavorite(getActivity(), song);
}
public abstract void onShow(); public abstract void onShow();
public abstract void onHide(); public abstract void onHide();

View file

@ -4,7 +4,9 @@ import android.animation.Animator;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.ColorInt; import android.support.annotation.ColorInt;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.view.GestureDetector;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator; import android.view.animation.AccelerateInterpolator;
@ -32,7 +34,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
@Bind(R.id.player_favorite_icon) @Bind(R.id.player_favorite_icon)
ImageView favoriteIcon; ImageView favoriteIcon;
private OnColorChangedListener onColorChangedListener; private Callbacks callbacks;
private int currentPosition; private int currentPosition;
@Override @Override
@ -49,6 +51,23 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
viewPager.setOffscreenPageLimit(2); viewPager.setOffscreenPageLimit(2);
updatePlayingQueue(); updatePlayingQueue();
viewPager.addOnPageChangeListener(this); 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 @Override
@ -144,14 +163,16 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
} }
private void notifyColorChange(int color) { private void notifyColorChange(int color) {
if (onColorChangedListener != null) onColorChangedListener.onColorChanged(color); if (callbacks != null) callbacks.onColorChanged(color);
} }
public void setOnColorChangedListener(OnColorChangedListener listener) { public void setCallbacks(Callbacks listener) {
onColorChangedListener = listener; callbacks = listener;
} }
interface OnColorChangedListener { interface Callbacks {
void onColorChanged(int color); void onColorChanged(int color);
void onFavoriteToggled();
} }
} }

View file

@ -11,7 +11,6 @@ import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewAnimationUtils; import android.view.ViewAnimationUtils;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -39,7 +38,7 @@ import org.solovyev.android.views.llm.LinearLayoutManager;
import butterknife.Bind; import butterknife.Bind;
import butterknife.ButterKnife; import butterknife.ButterKnife;
public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCoverFragment.OnColorChangedListener, SlidingUpPanelLayout.PanelSlideListener { public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCoverFragment.Callbacks, SlidingUpPanelLayout.PanelSlideListener {
public static final String TAG = PlayerFragment.class.getSimpleName(); public static final String TAG = PlayerFragment.class.getSimpleName();
@Bind(R.id.player_toolbar) @Bind(R.id.player_toolbar)
@ -172,7 +171,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
playbackControlsFragment = (PlaybackControlsFragment) getChildFragmentManager().findFragmentById(R.id.playback_controls_fragment); playbackControlsFragment = (PlaybackControlsFragment) getChildFragmentManager().findFragmentById(R.id.playback_controls_fragment);
playerAlbumCoverFragment = (PlayerAlbumCoverFragment) getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment); playerAlbumCoverFragment = (PlayerAlbumCoverFragment) getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setOnColorChangedListener(this); playerAlbumCoverFragment.setCallbacks(this);
} }
private void setUpPlayerToolbar() { private void setUpPlayerToolbar() {
@ -254,18 +253,14 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
} }
@Override @Override
public boolean onMenuItemClick(MenuItem item) { protected void toggleFavorite(Song song) {
final Song song = MusicPlayerRemote.getCurrentSong(); super.toggleFavorite(song);
switch (item.getItemId()) { if (song.id == MusicPlayerRemote.getCurrentSong().id) {
case R.id.action_toggle_favorite: if (MusicUtil.isFavorite(getActivity(), song)) {
super.onMenuItemClick(item); playerAlbumCoverFragment.showHeartAnimation();
if (MusicUtil.isFavorite(getActivity(), song)) { }
playerAlbumCoverFragment.showHeartAnimation(); updateIsFavorite();
}
updateIsFavorite();
return true;
} }
return super.onMenuItemClick(item);
} }
@Override @Override
@ -294,6 +289,11 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
getCallbacks().onPaletteColorChanged(); getCallbacks().onPaletteColorChanged();
} }
@Override
public void onFavoriteToggled() {
toggleFavorite(MusicPlayerRemote.getCurrentSong());
}
@Override @Override
public void onPanelSlide(View view, float slide) { public void onPanelSlide(View view, float slide) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {