Merge branch 'playlist-actions' of https://github.com/arkon/Phonograph into arkon-playlist-actions
This commit is contained in:
commit
36d85f3003
4 changed files with 65 additions and 19 deletions
|
|
@ -23,10 +23,11 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.OrderablePlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.SongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.interfaces.LoaderIds;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
|
||||
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
|
||||
|
|
@ -34,7 +35,6 @@ import com.kabouzeid.gramophone.model.Playlist;
|
|||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
|
@ -84,7 +84,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
|
||||
setUpRecyclerView();
|
||||
|
||||
setUpToolBar();
|
||||
setUpToolbar();
|
||||
|
||||
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
|
||||
}
|
||||
|
|
@ -130,12 +130,17 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
});
|
||||
}
|
||||
|
||||
private void setUpToolBar() {
|
||||
private void setUpToolbar() {
|
||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||
setSupportActionBar(toolbar);
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setTitle(playlist.name);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setToolbarTitle(playlist.name);
|
||||
}
|
||||
|
||||
private void setToolbarTitle(String title) {
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setTitle(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -148,20 +153,14 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_shuffle_playlist:
|
||||
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
|
||||
return true;
|
||||
case R.id.action_equalizer:
|
||||
NavigationUtil.openEqualizer(this);
|
||||
return true;
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
return PlaylistMenuHelper.handleMenuClick(this, playlist, item);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
|
@ -188,6 +187,20 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
@Override
|
||||
public void onMediaStoreChanged() {
|
||||
super.onMediaStoreChanged();
|
||||
|
||||
// Playlist deleted
|
||||
if (!PlaylistsUtil.doesPlaylistExist(this, playlist.id)) {
|
||||
onBackPressed();
|
||||
return;
|
||||
}
|
||||
|
||||
// Playlist renamed
|
||||
final String playlistName = PlaylistsUtil.getNameForPlaylist(this, playlist.id);
|
||||
if (!playlistName.equals(playlist.name)) {
|
||||
playlist = PlaylistLoader.getPlaylist(this, playlist.id);
|
||||
setToolbarTitle(playlist.name);
|
||||
}
|
||||
|
||||
getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,23 @@ import static android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
|
|||
*/
|
||||
public class PlaylistsUtil {
|
||||
|
||||
public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) {
|
||||
if (playlistId == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Cursor cursor = context.getContentResolver().query(
|
||||
MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
|
||||
new String[]{}, null, null, null);
|
||||
|
||||
if (cursor == null || cursor.getCount() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int createPlaylist(@NonNull final Context context, @Nullable final String name) {
|
||||
int id = -1;
|
||||
if (name != null && name.length() > 0) {
|
||||
|
|
@ -50,8 +67,12 @@ public class PlaylistsUtil {
|
|||
id = Integer.parseInt(uri.getLastPathSegment());
|
||||
}
|
||||
} else {
|
||||
// Playlist exists
|
||||
if (cursor.moveToFirst()) {
|
||||
id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Playlists._ID));
|
||||
Toast.makeText(context, context.getResources().getString(
|
||||
R.string.playlist_exists, name), Toast.LENGTH_SHORT).show();
|
||||
cursor.close();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (cursor != null) {
|
||||
|
|
@ -79,6 +100,7 @@ public class PlaylistsUtil {
|
|||
selection.append(")");
|
||||
try {
|
||||
context.getContentResolver().delete(EXTERNAL_CONTENT_URI, selection.toString(), null);
|
||||
context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
|
||||
} catch (SecurityException ignored) {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,14 +10,24 @@
|
|||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
android:id="@+id/action_play"
|
||||
android:title="@string/action_play"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
android:title="@string/equalizer"
|
||||
android:id="@+id/action_add_to_current_playing"
|
||||
android:title="@string/action_add_to_playing_queue"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_rename_playlist"
|
||||
android:title="@string/action_rename"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_delete_playlist"
|
||||
android:title="@string/action_delete"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_save_playlist"
|
||||
android:title="@string/save_playlist_title"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@
|
|||
<string name="inserted_x_songs_into_playlist_x">Inserted %1$d songs into the playlist %2$s.</string>
|
||||
<string name="created_playlist_x">Created playlist %1$s.</string>
|
||||
<string name="deleted_x_songs">Deleted %1$d songs.</string>
|
||||
<string name="playlist_exists">Playlist %1$s already exists.</string>
|
||||
<string name="could_not_create_playlist">Couldn\u2019t create playlist.</string>
|
||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||
<string name="clear_playlist_x"><![CDATA[Clear the playlist <b>%1$s</b>? This can\u2019t be undone!]]></string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue