diff options
Diffstat (limited to 'src/org/lineageos/eleven/utils/PlaylistPopupMenuHelper.java')
-rw-r--r-- | src/org/lineageos/eleven/utils/PlaylistPopupMenuHelper.java | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/org/lineageos/eleven/utils/PlaylistPopupMenuHelper.java b/src/org/lineageos/eleven/utils/PlaylistPopupMenuHelper.java new file mode 100644 index 0000000..a3fd6d0 --- /dev/null +++ b/src/org/lineageos/eleven/utils/PlaylistPopupMenuHelper.java @@ -0,0 +1,112 @@ +/* +* Copyright (C) 2014 The CyanogenMod Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package com.cyanogenmod.eleven.utils; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ContentUris; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.net.Uri; +import android.provider.MediaStore; +import android.support.v4.app.FragmentManager; + +import com.cyanogenmod.eleven.Config; +import com.cyanogenmod.eleven.Config.SmartPlaylistType; +import com.cyanogenmod.eleven.R; +import com.cyanogenmod.eleven.model.Playlist; + +public abstract class PlaylistPopupMenuHelper extends PopupMenuHelper { + private Playlist mPlaylist; + + public PlaylistPopupMenuHelper(Activity activity, FragmentManager fragmentManager, PopupMenuType type) { + super(activity, fragmentManager); + mType = type; + } + + public abstract Playlist getPlaylist(int position); + + @Override + public PopupMenuType onPreparePopupMenu(int position) { + mPlaylist = getPlaylist(position); + return mPlaylist.isSmartPlaylist() ? + PopupMenuType.SmartPlaylist : PopupMenuType.Playlist; + } + + public void updateName(String name) { + if(mPlaylist != null) { mPlaylist.mPlaylistName = name; } + } + + @Override + protected long getSourceId() { + return mPlaylist.mPlaylistId; + } + + @Override + protected Config.IdType getSourceType() { + return Config.IdType.Playlist; + } + + @Override + protected long[] getIdList() { + if (mPlaylist.isSmartPlaylist()) { + return MusicUtils.getSongListForSmartPlaylist(mActivity, + SmartPlaylistType.getTypeById(getSourceId())); + } else { + return MusicUtils.getSongListForPlaylist(mActivity, getSourceId()); + } + } + + @Override + protected void onDeleteClicked() { + // TODO: do this with a proper DialogFragment + buildDeleteDialog(getId(), mPlaylist.mPlaylistName).show(); + } + + @Override // FIXME: is this really the right thing? + protected long getId() { + return mPlaylist.mPlaylistId; + } + + /** + * Create a new {@link AlertDialog} for easy playlist deletion + * + * @param playlistName The title of the playlist being deleted + * @param playlistId The ID of the playlist being deleted + * @return A new {@link AlertDialog} used to delete playlists + */ + private final AlertDialog buildDeleteDialog(final long playlistId, final String playlistName) { + return new AlertDialog.Builder(mActivity) + .setTitle(mActivity.getString(R.string.delete_dialog_title, playlistName)) + .setPositiveButton(R.string.context_menu_delete, new OnClickListener() { + + @Override + public void onClick(final DialogInterface dialog, final int which) { + final Uri mUri = ContentUris.withAppendedId( + MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, + playlistId); + mActivity.getContentResolver().delete(mUri, null, null); + MusicUtils.refresh(); + } + }).setNegativeButton(R.string.cancel, new OnClickListener() { + + @Override + public void onClick(final DialogInterface dialog, final int which) { + dialog.dismiss(); + } + }).setMessage(R.string.cannot_be_undone).create(); + } +}
\ No newline at end of file |