@Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.listview, container, false);
    mListView = (ListView) root.findViewById(android.R.id.list);

    // Align the track list with the header, in other words,OCD.
    TextView mHeader = (TextView) root.findViewById(R.id.title);
    int eight =
        (int) getActivity().getResources().getDimension(R.dimen.list_separator_padding_left_right);
    mHeader.setPadding(eight, 0, 0, 0);

    // Set the header while in @TracksBrowser
    String header = getActivity().getResources().getString(R.string.track_header);
    int left = getActivity().getResources().getInteger(R.integer.listview_padding_left);
    int right = getActivity().getResources().getInteger(R.integer.listview_padding_right);
    ApolloUtils.listHeader(this, root, header);
    ApolloUtils.setListPadding(this, mListView, left, 0, right, 0);

    // Hide the extra spacing from the Bottom ActionBar in the queue
    // Fragment in @AudioPlayerHolder
    if (getArguments() != null) {
      mPlaylistId = getArguments().getLong(BaseColumns._ID);
      String mimeType = getArguments().getString(MIME_TYPE);
      if (Audio.Playlists.CONTENT_TYPE.equals(mimeType)) {
        switch ((int) mPlaylistId) {
          case (int) PLAYLIST_QUEUE:
            LinearLayout emptyness = (LinearLayout) root.findViewById(R.id.empty_view);
            emptyness.setVisibility(View.GONE);
        }
      }
    }
    return root;
  }
 /** Check if we're viewing the contents of a playlist */
 public void isEditMode() {
   if (getArguments() != null) {
     String mimetype = getArguments().getString(MIME_TYPE);
     if (Audio.Playlists.CONTENT_TYPE.equals(mimetype)) {
       mPlaylistId = getArguments().getLong(BaseColumns._ID);
       switch ((int) mPlaylistId) {
         case (int) PLAYLIST_QUEUE:
           mEditMode = true;
           break;
         case (int) PLAYLIST_FAVORITES:
           mEditMode = true;
           break;
         default:
           if (mPlaylistId > 0) {
             mEditMode = true;
           }
           break;
       }
     }
   }
 }
  @Override
  public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String[] projection =
        new String[] {BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST};
    StringBuilder where = new StringBuilder();
    String sortOrder = Audio.Media.DEFAULT_SORT_ORDER;
    where.append(AudioColumns.IS_MUSIC + "=1").append(" AND " + MediaColumns.TITLE + " != ''");
    Uri uri = Audio.Media.EXTERNAL_CONTENT_URI;
    if (getArguments() != null) {
      mPlaylistId = getArguments().getLong(BaseColumns._ID);
      String mimeType = getArguments().getString(MIME_TYPE);
      if (Audio.Playlists.CONTENT_TYPE.equals(mimeType)) {
        where = new StringBuilder();
        where.append(AudioColumns.IS_MUSIC + "=1");
        where.append(" AND " + MediaColumns.TITLE + " != ''");
        switch ((int) mPlaylistId) {
          case (int) PLAYLIST_QUEUE:
            uri = Audio.Media.EXTERNAL_CONTENT_URI;
            long[] mNowPlaying = MusicUtils.getQueue();
            if (mNowPlaying.length == 0) return null;
            where = new StringBuilder();
            where.append(BaseColumns._ID + " IN (");
            if (mNowPlaying == null || mNowPlaying.length <= 0) return null;
            for (long queue_id : mNowPlaying) {
              where.append(queue_id + ",");
            }
            where.deleteCharAt(where.length() - 1);
            where.append(")");
            break;
          case (int) PLAYLIST_FAVORITES:
            long favorites_id = MusicUtils.getFavoritesId(getActivity());
            projection =
                new String[] {
                  Playlists.Members._ID,
                  Playlists.Members.AUDIO_ID,
                  MediaColumns.TITLE,
                  AudioColumns.ALBUM,
                  AudioColumns.ARTIST
                };
            uri = Playlists.Members.getContentUri(EXTERNAL, favorites_id);
            sortOrder = Playlists.Members.DEFAULT_SORT_ORDER;
            break;
          default:
            if (id < 0) return null;
            projection =
                new String[] {
                  Playlists.Members._ID,
                  Playlists.Members.AUDIO_ID,
                  MediaColumns.TITLE,
                  AudioColumns.ALBUM,
                  AudioColumns.ARTIST,
                  AudioColumns.DURATION
                };

            uri = Playlists.Members.getContentUri(EXTERNAL, mPlaylistId);
            sortOrder = Playlists.Members.DEFAULT_SORT_ORDER;
            break;
        }
      } else if (Audio.Genres.CONTENT_TYPE.equals(mimeType)) {
        long genreId = getArguments().getLong(BaseColumns._ID);
        uri = Genres.Members.getContentUri(EXTERNAL, genreId);
        projection =
            new String[] {
              BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST
            };
        where = new StringBuilder();
        where.append(AudioColumns.IS_MUSIC + "=1").append(" AND " + MediaColumns.TITLE + " != ''");
        sortOrder = Genres.Members.DEFAULT_SORT_ORDER;
      } else {
        if (Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
          long albumId = getArguments().getLong(BaseColumns._ID);
          where.append(" AND " + AudioColumns.ALBUM_ID + "=" + albumId);
          sortOrder = Audio.Media.TRACK + ", " + sortOrder;
        } else if (Audio.Artists.CONTENT_TYPE.equals(mimeType)) {
          sortOrder = MediaColumns.TITLE;
          long artist_id = getArguments().getLong(BaseColumns._ID);
          where.append(" AND " + AudioColumns.ARTIST_ID + "=" + artist_id);
        }
      }
    }
    return new CursorLoader(getActivity(), uri, projection, where.toString(), null, sortOrder);
  }