/** {@inheritDoc} */
 @Override
 public void remove(final int which) {
   mSong = mAdapter.getItem(which - 1);
   mAdapter.remove(mSong);
   mAdapter.notifyDataSetChanged();
   final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", mPlaylistId);
   getActivity()
       .getContentResolver()
       .delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID + "=" + mSong.mSongId, null);
 }
  /** {@inheritDoc} */
  @Override
  public void onCreateContextMenu(
      final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    // Get the position of the selected item
    final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
    mSelectedPosition = info.position - 1;
    // Creat a new song
    mSong = mAdapter.getItem(mSelectedPosition);
    mSelectedId = mSong.mSongId;
    mSongName = mSong.mSongName;
    mAlbumName = mSong.mAlbumName;
    mArtistName = mSong.mArtistName;

    // Play the song
    menu.add(
        GROUP_ID,
        FragmentMenuItems.PLAY_SELECTION,
        Menu.NONE,
        getString(R.string.context_menu_play_selection));

    // Play next
    menu.add(
        GROUP_ID,
        FragmentMenuItems.PLAY_NEXT,
        Menu.NONE,
        getString(R.string.context_menu_play_next));

    // Add the song to the queue
    menu.add(GROUP_ID, FragmentMenuItems.ADD_TO_QUEUE, Menu.NONE, getString(R.string.add_to_queue));

    // Add the song to a playlist
    final SubMenu subMenu =
        menu.addSubMenu(
            GROUP_ID, FragmentMenuItems.ADD_TO_PLAYLIST, Menu.NONE, R.string.add_to_playlist);
    MusicUtils.makePlaylistMenu(getActivity(), GROUP_ID, subMenu, false);

    // View more content by the song artist
    menu.add(
        GROUP_ID,
        FragmentMenuItems.MORE_BY_ARTIST,
        Menu.NONE,
        getString(R.string.context_menu_more_by_artist));

    // Make the song a ringtone
    menu.add(
        GROUP_ID,
        FragmentMenuItems.USE_AS_RINGTONE,
        Menu.NONE,
        getString(R.string.context_menu_use_as_ringtone));

    // Delete the song
    menu.add(
        GROUP_ID, FragmentMenuItems.DELETE, Menu.NONE, getString(R.string.context_menu_delete));
  }
 /** {@inheritDoc} */
 @Override
 public void drop(final int from, final int to) {
   if (from == 0 || to == 0) {
     mAdapter.notifyDataSetChanged();
     return;
   }
   final int realFrom = from - 1;
   final int realTo = to - 1;
   mSong = mAdapter.getItem(realFrom);
   mAdapter.remove(mSong);
   mAdapter.insert(mSong, realTo);
   mAdapter.notifyDataSetChanged();
   MediaStore.Audio.Playlists.Members.moveItem(
       getActivity().getContentResolver(), mPlaylistId, realFrom, realTo);
 }