Last added playlist half working. More to come tomorrow.

This commit is contained in:
Karim Abou Zeid 2015-06-21 01:23:27 +02:00
commit 65c879d64e
47 changed files with 1000 additions and 317 deletions

View file

@ -59,7 +59,6 @@ import com.nostra13.universalimageloader.core.ImageLoader;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import butterknife.ButterKnife;
@ -419,8 +418,9 @@ public class MainActivity extends AbsFabActivity
final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");
if (id >= 0) {
int position = intent.getIntExtra("position", 0);
//noinspection unchecked
MusicPlayerRemote.openQueue((ArrayList<Song>) (List<? extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
ArrayList<Song> songs = new ArrayList<>();
songs.addAll(PlaylistSongLoader.getPlaylistSongList(this, id));
MusicPlayerRemote.openQueue(songs, position, true);
handled = true;
}
} else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) {

View file

@ -13,9 +13,7 @@ import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.PlaylistLoader;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.DragSortRecycler;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Playlist;
@ -32,6 +30,8 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
public static String EXTRA_PLAYLIST = "extra_playlist";
private Playlist playlist;
private MaterialCab cab;
private PlaylistSongAdapter adapter;
@ -86,8 +86,10 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
private void getIntentExtras() {
Bundle intentExtras = getIntent().getExtras();
final int playlistId = intentExtras.getInt(AppKeys.E_PLAYLIST);
playlist = PlaylistLoader.getPlaylist(this, playlistId);
try {
playlist = (Playlist) intentExtras.getSerializable(EXTRA_PLAYLIST);
} catch (ClassCastException ignored) {
}
if (playlist == null) {
finish();
}
@ -120,6 +122,9 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
case R.id.action_playing_queue:
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_clear_playlist:
//TODO
return true;
}
return super.onOptionsItemSelected(item);
}

View file

@ -0,0 +1,162 @@
package com.kabouzeid.gramophone.ui.activities;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.LastAddedSongAdapter;
import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.SmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.squareup.otto.Subscribe;
import butterknife.ButterKnife;
import butterknife.InjectView;
public class SmartPlaylistDetailActivity extends AbsFabActivity implements CabHolder {
public static final String TAG = SmartPlaylistDetailActivity.class.getSimpleName();
@InjectView(R.id.recycler_view)
RecyclerView recyclerView;
@InjectView(R.id.toolbar)
Toolbar toolbar;
@InjectView(android.R.id.empty)
TextView empty;
private SmartPlaylist playlist;
private MaterialCab cab;
private SmartPlaylistSongAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist_detail);
ButterKnife.inject(this);
getIntentExtras();
setUpRecyclerView();
checkIsEmpty();
setUpToolBar();
if (PreferenceUtils.getInstance(this).coloredNavigationBarPlaylist())
setNavigationBarThemeColor();
setStatusBarThemeColor();
App.bus.register(this);
}
private void setUpRecyclerView() {
adapter = new LastAddedSongAdapter(this, this);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(adapter);
}
private void setUpToolBar() {
toolbar.setBackgroundColor(getThemeColorPrimary());
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setTitle(playlist.name);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void getIntentExtras() {
Bundle intentExtras = getIntent().getExtras();
try {
playlist = (SmartPlaylist) intentExtras.getSerializable(PlaylistDetailActivity.EXTRA_PLAYLIST);
} catch (ClassCastException ignored) {
}
if (playlist == null) {
finish();
}
}
@Override
public String getTag() {
return TAG;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_current_playing:
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
return true;
case R.id.action_playing_queue:
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_clear_playlist:
//TODO
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
if (cab != null && cab.isActive()) cab.finish();
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menu)
.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary())
.start(callback);
return cab;
}
@Override
protected void onDestroy() {
super.onDestroy();
App.bus.unregister(this);
}
@Subscribe
public void onDataBaseEvent(DataBaseChangedEvent event) {
switch (event.getAction()) {
case DataBaseChangedEvent.PLAYLISTS_CHANGED:
case DataBaseChangedEvent.DATABASE_CHANGED:
adapter.updateDataSet();
checkIsEmpty();
break;
}
}
@Override
public void onBackPressed() {
if (cab != null && cab.isActive()) cab.finish();
else super.onBackPressed();
}
private void checkIsEmpty() {
empty.setVisibility(
adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE
);
}
}

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.AppBarLayout.OnOffsetChangedListener;
@ -15,38 +16,49 @@ import android.widget.TextView;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.views.FastScroller;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.Optional;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment implements OnOffsetChangedListener {
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();
private RecyclerView recyclerView;
@InjectView(R.id.recycler_view)
RecyclerView recyclerView;
@Optional
@InjectView(android.R.id.empty)
TextView empty;
@Optional
@InjectView(R.id.fast_scroller)
FastScroller fastScroller;
private RecyclerView.Adapter mAdapter;
private FastScroller fastScroller;
private TextView empty;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main_activity_recycler_view, container, false);
View view = inflater.inflate(getLayoutRes(), container, false);
ButterKnife.inject(this, view);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
fastScroller = (FastScroller) view.findViewById(R.id.fast_scroller);
empty = (TextView) view.findViewById(android.R.id.empty);
fastScroller.setRecyclerView(recyclerView);
fastScroller.setPressedHandleColor(getMainActivity().getThemeColorPrimary());
fastScroller.setOnHandleTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
if (fastScroller != null) {
fastScroller.setRecyclerView(recyclerView);
fastScroller.setPressedHandleColor(getMainActivity().getThemeColorPrimary());
fastScroller.setOnHandleTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
}
getMainActivity().addOnAppBarOffsetChangedListener(this);
@ -75,9 +87,11 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int i) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fastScroller.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, getMainActivity().getTotalAppBarScrollingRange() + i);
fastScroller.setLayoutParams(params);
if (fastScroller != null) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fastScroller.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, getMainActivity().getTotalAppBarScrollingRange() + i);
fastScroller.setLayoutParams(params);
}
}
@Override
@ -93,10 +107,12 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
}
private void showEmptyMessageIfEmpty() {
RecyclerView.Adapter adapter = getAdapter();
if (adapter != null) {
empty.setText(getEmptyMessage());
empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
if (empty != null) {
RecyclerView.Adapter adapter = getAdapter();
if (adapter != null) {
empty.setText(getEmptyMessage());
empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
}
}
}
@ -105,7 +121,22 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
return R.string.empty;
}
@LayoutRes
protected int getLayoutRes() {
return R.layout.fragment_main_activity_recycler_view;
}
protected RecyclerView getRecyclerView() {
return recyclerView;
}
protected abstract RecyclerView.LayoutManager createLayoutManager();
protected abstract RecyclerView.Adapter createAdapter();
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
}