package code.name.monkey.retromusic.helper.menu; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.view.View; import android.widget.PopupMenu; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog; import code.name.monkey.retromusic.dialogs.DeleteSongsDialog; import code.name.monkey.retromusic.dialogs.SongDetailDialog; import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.interfaces.PaletteColorHolder; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.ui.activities.tageditor.AbsTagEditorActivity; import code.name.monkey.retromusic.ui.activities.tageditor.SongTagEditorActivity; import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.NavigationUtil; public class SongMenuHelper { public static final int MENU_RES = R.menu.menu_item_song; public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull Song song, int menuItemId) { switch (menuItemId) { case R.id.action_set_as_ringtone: MusicUtil.setRingtone(activity, song.id); return true; case R.id.action_share: activity.startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, activity), null)); return true; case R.id.action_delete_from_device: DeleteSongsDialog.create(song).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); return true; case R.id.action_add_to_playlist: AddToPlaylistDialog.create(song).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); return true; case R.id.action_play_next: MusicPlayerRemote.playNext(song); return true; case R.id.action_add_to_current_playing: MusicPlayerRemote.enqueue(song); return true; case R.id.action_tag_editor: Intent tagEditorIntent = new Intent(activity, SongTagEditorActivity.class); tagEditorIntent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id); if (activity instanceof PaletteColorHolder) tagEditorIntent.putExtra(AbsTagEditorActivity.EXTRA_PALETTE, ((PaletteColorHolder) activity).getPaletteColor()); activity.startActivity(tagEditorIntent); return true; case R.id.action_details: SongDetailDialog.create(song).show(activity.getSupportFragmentManager(), "SONG_DETAILS"); 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 static abstract class OnClickSongMenu implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { private AppCompatActivity activity; protected OnClickSongMenu(@NonNull AppCompatActivity activity) { this.activity = activity; } public int getMenuRes() { return MENU_RES; } @Override public void onClick(View v) { PopupMenu popupMenu = new PopupMenu(activity, v); popupMenu.inflate(getMenuRes()); popupMenu.setOnMenuItemClickListener(this); popupMenu.show(); } @Override public boolean onMenuItemClick(MenuItem item) { return handleMenuClick(activity, getSong(), item.getItemId()); } public abstract Song getSong(); } }