Moved some stuff from the PlayerFragment into a abstract super class, as we want to add more PlayerFragments in future.

This commit is contained in:
Karim Abou Zeid 2015-12-20 18:10:10 +01:00
commit e709455fb1
3 changed files with 167 additions and 117 deletions

View file

@ -12,6 +12,7 @@ import android.view.ViewGroup;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.ui.fragments.player.AbsPlayerFragment;
import com.kabouzeid.gramophone.ui.fragments.player.MiniPlayerFragment; import com.kabouzeid.gramophone.ui.fragments.player.MiniPlayerFragment;
import com.kabouzeid.gramophone.ui.fragments.player.PlayerFragment; import com.kabouzeid.gramophone.ui.fragments.player.PlayerFragment;
import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.sothree.slidinguppanel.SlidingUpPanelLayout;
@ -34,7 +35,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private int navigationBarColor; private int navigationBarColor;
private int taskColor; private int taskColor;
private PlayerFragment playerFragment; private AbsPlayerFragment playerFragment;
private MiniPlayerFragment miniPlayerFragment; private MiniPlayerFragment miniPlayerFragment;
@Override @Override
@ -43,7 +44,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
setContentView(createContentView()); setContentView(createContentView());
ButterKnife.bind(this); ButterKnife.bind(this);
playerFragment = (PlayerFragment) getSupportFragmentManager().findFragmentById(R.id.player_fragment); playerFragment = (AbsPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.player_fragment);
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment); miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
if (miniPlayerFragment.getView() != null) { if (miniPlayerFragment.getView() != null) {
@ -56,7 +57,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
} }
slidingUpPanelLayout.setPanelSlideListener(this); slidingUpPanelLayout.setPanelSlideListener(this);
playerFragment.show(); playerFragment.onShow();
slidingUpPanelLayout.post(new Runnable() { slidingUpPanelLayout.post(new Runnable() {
@Override @Override
@ -98,7 +99,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
if (shouldColorNavigationBar()) { if (shouldColorNavigationBar()) {
super.setNavigationBarColor(navigationBarColor); super.setNavigationBarColor(navigationBarColor);
} }
playerFragment.show(); playerFragment.onShow();
} }
@Override @Override
@ -108,7 +109,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
if (shouldColorNavigationBar()) { if (shouldColorNavigationBar()) {
super.setNavigationBarColor(playerFragmentColor); super.setNavigationBarColor(playerFragmentColor);
} }
playerFragment.hide(); playerFragment.onHide();
} }
@Override @Override

View file

@ -0,0 +1,146 @@
package com.kabouzeid.gramophone.ui.fragments.player;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.PlayingQueueDialog;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
public abstract class AbsPlayerFragment extends Fragment implements MusicServiceEventListener, Toolbar.OnMenuItemClickListener, PaletteColorHolder {
public static final String TAG = AbsPlayerFragment.class.getSimpleName();
protected AbsMusicServiceActivity activity;
protected Callbacks callbacks;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
activity = (AbsMusicServiceActivity) context;
callbacks = (Callbacks) context;
} catch (ClassCastException e) {
throw new RuntimeException(context.getClass().getSimpleName() + " must be an instance of " + AbsMusicServiceActivity.class.getSimpleName() + " and implement " + Callbacks.class.getSimpleName());
}
}
@Override
public void onDetach() {
super.onDetach();
activity = null;
callbacks = null;
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
activity.addMusicServiceEventListener(this);
}
@Override
public void onDestroyView() {
super.onDestroyView();
activity.removeMusicServiceEventListener(this);
}
@Override
public void onPlayingMetaChanged() {
}
@Override
public void onQueueChanged() {
}
@Override
public void onPlayStateChanged() {
}
@Override
public void onRepeatModeChanged() {
}
@Override
public void onShuffleModeChanged() {
}
@Override
public void onMediaStoreChanged() {
}
@Override
public boolean onMenuItemClick(MenuItem item) {
final Song song = MusicPlayerRemote.getCurrentSong();
switch (item.getItemId()) {
case R.id.action_sleep_timer:
new SleepTimerDialog().show(getFragmentManager(), "SET_SLEEP_TIMER");
return true;
case R.id.action_toggle_favorite:
MusicUtil.toggleFavorite(activity, song);
return true;
case R.id.action_share:
SongShareDialog.create(song).show(getFragmentManager(), "SHARE_SONG");
return true;
case R.id.action_equalizer:
NavigationUtil.openEqualizer(activity);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(activity), true);
return true;
case R.id.action_add_to_playlist:
AddToPlaylistDialog.create(song).show(getFragmentManager(), "ADD_PLAYLIST");
return true;
case R.id.action_playing_queue:
PlayingQueueDialog.create().show(getFragmentManager(), "PLAY_QUEUE");
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id);
startActivity(intent);
return true;
case R.id.action_details:
SongDetailDialog.create(song).show(getFragmentManager(), "SONG_DETAIL");
return true;
case R.id.action_go_to_album:
NavigationUtil.goToAlbum(activity, song.albumId);
return true;
case R.id.action_go_to_artist:
NavigationUtil.goToArtist(activity, song.artistId);
return true;
}
return false;
}
public abstract void onHide();
public abstract void onShow();
public abstract boolean onBackPressed();
public interface Callbacks {
void onPaletteColorChanged();
}
}

View file

@ -2,13 +2,10 @@ package com.kabouzeid.gramophone.ui.fragments.player;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorSet; import android.animation.AnimatorSet;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.ColorInt; import android.support.annotation.ColorInt;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView; import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
@ -26,24 +23,12 @@ import android.widget.TextView;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.adapter.song.PlayingQueueAdapter; import com.kabouzeid.gramophone.adapter.song.PlayingQueueAdapter;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.PlayingQueueDialog;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.misc.DragSortRecycler; import com.kabouzeid.gramophone.misc.DragSortRecycler;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil; import com.kabouzeid.gramophone.util.ViewUtil;
import com.kabouzeid.gramophone.views.SquareLayout; import com.kabouzeid.gramophone.views.SquareLayout;
@ -54,7 +39,7 @@ import org.solovyev.android.views.llm.LinearLayoutManager;
import butterknife.Bind; import butterknife.Bind;
import butterknife.ButterKnife; import butterknife.ButterKnife;
public class PlayerFragment extends Fragment implements MusicServiceEventListener, Toolbar.OnMenuItemClickListener, PaletteColorHolder, PlayerAlbumCoverFragment.OnColorChangedListener, SlidingUpPanelLayout.PanelSlideListener { public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCoverFragment.OnColorChangedListener, 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)
@ -79,9 +64,6 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
private int lastColor; private int lastColor;
private AbsMusicServiceActivity activity;
private Callbacks callbacks;
private PlaybackControlsFragment playbackControlsFragment; private PlaybackControlsFragment playbackControlsFragment;
private PlayerAlbumCoverFragment playerAlbumCoverFragment; private PlayerAlbumCoverFragment playerAlbumCoverFragment;
@ -90,38 +72,15 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
private PlayingQueueAdapter playingQueueAdapter; private PlayingQueueAdapter playingQueueAdapter;
@Override @Override
public void onAttach(Context context) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onAttach(context); View view = inflater.inflate(R.layout.fragment_player, container, false);
try { ButterKnife.bind(this, view);
activity = (AbsMusicServiceActivity) context; return view;
callbacks = (Callbacks) context;
} catch (ClassCastException e) {
throw new RuntimeException(context.getClass().getSimpleName() + " must be an instance of " + AbsMusicServiceActivity.class.getSimpleName() + " and implement " + Callbacks.class.getSimpleName());
}
}
@Override
public void onDetach() {
super.onDetach();
activity = null;
callbacks = null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_player, container, false);
} }
@Override @Override
public void onViewCreated(final View view, Bundle savedInstanceState) { public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
setUpPlayerToolbar(); setUpPlayerToolbar();
setUpSubFragments(); setUpSubFragments();
@ -152,21 +111,18 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
} }
}); });
activity.addMusicServiceEventListener(this);
setUpCurrentSongView(); setUpCurrentSongView();
} }
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
activity.removeMusicServiceEventListener(this);
ButterKnife.unbind(this); ButterKnife.unbind(this);
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayingMetaChanged() {
updatePlayerMenu(); updateIsFavorite();
updateCurrentSong(); updateCurrentSong();
updateQueue(); updateQueue();
} }
@ -176,26 +132,6 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
updateQueue(); updateQueue();
} }
@Override
public void onPlayStateChanged() {
}
@Override
public void onRepeatModeChanged() {
}
@Override
public void onShuffleModeChanged() {
}
@Override
public void onMediaStoreChanged() {
}
private void updateQueue() { private void updateQueue() {
playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition()); playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition());
if (slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { if (slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
@ -252,7 +188,7 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
currentSongViewHolder.image.setImageDrawable(Util.getTintedDrawable(activity, R.drawable.ic_volume_up_white_24dp, ColorUtil.resolveColor(activity, R.attr.icon_color))); currentSongViewHolder.image.setImageDrawable(Util.getTintedDrawable(activity, R.drawable.ic_volume_up_white_24dp, ColorUtil.resolveColor(activity, R.attr.icon_color)));
} }
private void updatePlayerMenu() { private void updateIsFavorite() {
boolean isFavorite = MusicUtil.isFavorite(activity, MusicPlayerRemote.getCurrentSong()); boolean isFavorite = MusicUtil.isFavorite(activity, MusicPlayerRemote.getCurrentSong());
Drawable favoriteIcon = Util.getTintedDrawable(activity, isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp, ViewUtil.getToolbarIconColor(activity, false)); Drawable favoriteIcon = Util.getTintedDrawable(activity, isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp, ViewUtil.getToolbarIconColor(activity, false));
toolbar.getMenu().findItem(R.id.action_toggle_favorite) toolbar.getMenu().findItem(R.id.action_toggle_favorite)
@ -311,57 +247,28 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
final Song song = MusicPlayerRemote.getCurrentSong(); final Song song = MusicPlayerRemote.getCurrentSong();
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_sleep_timer:
new SleepTimerDialog().show(getFragmentManager(), "SET_SLEEP_TIMER");
return true;
case R.id.action_toggle_favorite: case R.id.action_toggle_favorite:
MusicUtil.toggleFavorite(activity, song); super.onMenuItemClick(item);
if (MusicUtil.isFavorite(activity, song)) { if (MusicUtil.isFavorite(activity, song)) {
playerAlbumCoverFragment.showHeartAnimation(); playerAlbumCoverFragment.showHeartAnimation();
} }
updatePlayerMenu(); updateIsFavorite();
return true;
case R.id.action_share:
SongShareDialog.create(song).show(getFragmentManager(), "SHARE_SONG");
return true;
case R.id.action_equalizer:
NavigationUtil.openEqualizer(activity);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(activity), true);
return true;
case R.id.action_add_to_playlist:
AddToPlaylistDialog.create(song).show(getFragmentManager(), "ADD_PLAYLIST");
return true;
case R.id.action_playing_queue:
PlayingQueueDialog.create().show(getFragmentManager(), "PLAY_QUEUE");
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id);
startActivity(intent);
return true;
case R.id.action_details:
SongDetailDialog.create(song).show(getFragmentManager(), "SONG_DETAIL");
return true;
case R.id.action_go_to_album:
NavigationUtil.goToAlbum(activity, song.albumId);
return true;
case R.id.action_go_to_artist:
NavigationUtil.goToArtist(activity, song.artistId);
return true; return true;
} }
return false; return super.onMenuItemClick(item);
} }
public void hide() { @Override
public void onHide() {
playbackControlsFragment.hide(); playbackControlsFragment.hide();
} }
public void show() { @Override
public void onShow() {
playbackControlsFragment.show(); playbackControlsFragment.show();
} }
@Override
public boolean onBackPressed() { public boolean onBackPressed() {
if (slidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.COLLAPSED) { if (slidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.COLLAPSED) {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
@ -409,8 +316,4 @@ public class PlayerFragment extends Fragment implements MusicServiceEventListene
public void onPanelHidden(View view) { public void onPanelHidden(View view) {
} }
public interface Callbacks {
void onPaletteColorChanged();
}
} }