Option to hide the new bottom bar

This commit is contained in:
Karim Abou Zeid 2015-08-13 00:37:49 +02:00
commit ec2e943a5d
13 changed files with 122 additions and 57 deletions

View file

@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.ui.activities;
import android.animation.Animator;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
@ -43,6 +44,7 @@ import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
@ -89,7 +91,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
private int albumArtViewHeight;
private int toolbarColor;
private float toolbarAlpha;
private int bottomOffset;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -179,7 +180,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
}
private void setUpObservableListViewParams() {
bottomOffset = getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity);
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
int toolbarHeight = Util.getActionBarSize(this);
@ -274,8 +274,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
}
private void setUpRecyclerViewView() {
setUpRecyclerViewPadding();
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, bottomOffset);
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
contentView.post(new Runnable() {
@Override
@ -289,6 +289,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
});
}
private void setUpRecyclerViewPadding() {
recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, getBottomOffset());
}
private void setUpToolBar() {
setSupportActionBar(toolbar);
//noinspection ConstantConditions
@ -417,4 +421,12 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
super.onMediaStoreChanged();
reloadDataSet();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
super.onSharedPreferenceChanged(sharedPreferences, key);
if (key.equals(PreferenceUtil.HIDE_BOTTOM_BAR)) {
setUpRecyclerViewPadding();
}
}
}

View file

@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.ui.activities;
import android.animation.Animator;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
@ -50,6 +51,7 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.kabouzeid.gramophone.views.SquareIfPlaceImageView;
@ -98,7 +100,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private int artistImageViewHeight;
private int toolbarColor;
private float toolbarAlpha;
private int bottomOffset;
private Artist artist;
@Nullable
@ -187,7 +188,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
};
private void setUpObservableListViewParams() {
bottomOffset = getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity);
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
int toolbarHeight = Util.getActionBarSize(this);
@ -213,8 +213,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
}
private void setUpSongListView() {
setUpSongListPadding();
songListView.setScrollViewCallbacks(observableScrollViewCallbacks);
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset);
songListView.addHeaderView(songListHeader);
songAdapter = new ArtistSongAdapter(this, loadSongDataSet(), this);
@ -230,6 +230,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
});
}
private void setUpSongListPadding() {
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, getBottomOffset());
}
private void setUpAlbumRecyclerView() {
albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
albumAdapter = new HorizontalAlbumAdapter(this, loadAlbumDataSet(), this);
@ -477,4 +481,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
super.onMediaStoreChanged();
reloadDataSets();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
super.onSharedPreferenceChanged(sharedPreferences, key);
if (key.equals(PreferenceUtil.HIDE_BOTTOM_BAR)) {
setUpSongListPadding();
}
}
}

View file

@ -90,6 +90,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
@Nullable
private View navigationDrawerHeader;
private ArrayList<HideBottomBarListener> hideBottomBarListeners = new ArrayList<>();
public interface HideBottomBarListener {
void onBottomBarHiddenStateChanged(boolean hidden);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -127,7 +133,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
for (final PagerAdapter.MusicFragments fragment : fragments) {
pagerAdapter.add(fragment.getFragmentClass(), null);
}
pager.setAdapter(pagerAdapter);
pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1);
@ -576,4 +581,26 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
super.onPanelCollapsed(view);
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
@Override
public void hideBottomBar(boolean hide) {
super.hideBottomBar(hide);
for (HideBottomBarListener hideBottomBarListener : hideBottomBarListeners) {
if (hideBottomBarListener != null) {
hideBottomBarListener.onBottomBarHiddenStateChanged(hide);
}
}
}
public void addHideBottomBarListener(HideBottomBarListener listener) {
if (listener != null) {
hideBottomBarListeners.add(listener);
}
}
public void removeHideBottomBarListener(HideBottomBarListener listener) {
if (listener != null) {
hideBottomBarListeners.remove(listener);
}
}
}

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.widget.GridLayoutManager;
@ -27,6 +28,7 @@ import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import java.util.ArrayList;
import java.util.List;
@ -77,6 +79,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
}
private void setUpRecyclerView() {
setUpRecyclerViewPadding();
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
if (playlist instanceof AbsSmartPlaylist) {
adapter = new SmartPlaylistSongAdapter(this, loadSmartPlaylistDataSet(), R.layout.item_list, false, this);
@ -114,6 +117,10 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
});
}
private void setUpRecyclerViewPadding() {
recyclerView.setPadding(0, 0, 0, getBottomOffset());
}
private void reloadDataSet() {
if (playlist instanceof AbsSmartPlaylist) {
adapter.swapDataSet(loadSmartPlaylistDataSet());
@ -203,6 +210,14 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
reloadDataSet();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
super.onSharedPreferenceChanged(sharedPreferences, key);
if (key.equals(PreferenceUtil.HIDE_BOTTOM_BAR)) {
setUpRecyclerViewPadding();
}
}
private void checkIsEmpty() {
empty.setVisibility(
adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE

View file

@ -62,7 +62,7 @@ import butterknife.ButterKnife;
/**
* @author Karim Abou Zeid (kabouzeid)
* <p>
* <p/>
* Do not use {@link #setContentView(int)} but wrap your layout with
* {@link #wrapSlidingMusicPanelAndFab(int)} first and then return it in {@link #createContentView()}
*/
@ -252,6 +252,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
showPlaybackControllerCard = PreferenceUtil.getInstance(this).playbackControllerCardNowPlaying();
setUpPlaybackControllerCard();
break;
case PreferenceUtil.HIDE_BOTTOM_BAR:
hideBottomBar(PreferenceUtil.getInstance(this).hideBottomBar());
break;
}
}
@ -296,6 +299,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
}
private void setUpMiniPlayer() {
hideBottomBar(PreferenceUtil.getInstance(this).hideBottomBar());
final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
@ -403,6 +407,18 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
return slidingUpPanelLayout;
}
public void hideBottomBar(boolean hide) {
if (hide) {
slidingUpPanelLayout.setPanelHeight(0);
} else {
slidingUpPanelLayout.setPanelHeight(getResources().getDimensionPixelSize(R.dimen.mini_player_height));
}
}
public int getBottomOffset() {
return getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity) - slidingUpPanelLayout.getPanelHeight();
}
protected void updateFabState(boolean animate) {
if (playPauseDrawable == null) {
playPauseDrawable = new PlayPauseDrawable(this);

View file

@ -15,6 +15,7 @@ import android.widget.TextView;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
import com.kabouzeid.gramophone.ui.activities.MainActivity;
import com.kabouzeid.gramophone.views.FastScroller;
import butterknife.Bind;
@ -23,7 +24,7 @@ import butterknife.ButterKnife;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsMainActivityFragment implements OnOffsetChangedListener, MusicServiceEventListener {
public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsMainActivityFragment implements OnOffsetChangedListener, MusicServiceEventListener, MainActivity.HideBottomBarListener {
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();
@ -56,6 +57,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
getMainActivity().addOnAppBarOffsetChangedListener(this);
getMainActivity().addMusicStateListenerListener(this);
getMainActivity().addHideBottomBarListener(this);
setUpRecyclerView();
@ -63,10 +65,15 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
}
private void setUpRecyclerView() {
setUpRecyclerViewPadding();
invalidateLayoutManager();
invalidateAdapter();
}
private void setUpRecyclerViewPadding() {
recyclerView.setPadding(0, 0, 0, getMainActivity().getBottomOffset());
}
protected void invalidateAdapter() {
adapter = createAdapter();
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@ -129,6 +136,11 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
}
@Override
public void onBottomBarHiddenStateChanged(boolean hidden) {
setUpRecyclerViewPadding();
}
@Override
public void enableViews() {
super.enableViews();
@ -170,6 +182,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
super.onDestroyView();
getMainActivity().removeOnAppBarOffsetChangedListener(this);
getMainActivity().removeMusicStateListenerListener(this);
getMainActivity().removeHideBottomBarListener(this);
ButterKnife.unbind(this);
}

View file

@ -5,7 +5,6 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.SortOrder;
@ -52,6 +51,8 @@ public final class PreferenceUtil {
public static final String IGNORE_MEDIA_STORE_ARTWORK = "ignore_media_store_artwork";
public static final String HIDE_BOTTOM_BAR = "hide_bottom_bar";
private static PreferenceUtil sInstance;
private final SharedPreferences mPreferences;
@ -186,35 +187,33 @@ public final class PreferenceUtil {
return mPreferences.getBoolean(IGNORE_MEDIA_STORE_ARTWORK, false);
}
@Nullable
public final boolean hideBottomBar() {
return mPreferences.getBoolean(HIDE_BOTTOM_BAR, false);
}
public final String getArtistSortOrder() {
return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z);
}
@Nullable
public final String getArtistSongSortOrder() {
return mPreferences.getString(ARTIST_SONG_SORT_ORDER,
SortOrder.ArtistSongSortOrder.SONG_A_Z);
}
@Nullable
public final String getArtistAlbumSortOrder() {
return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER,
SortOrder.ArtistAlbumSortOrder.ALBUM_YEAR_ASC);
}
@Nullable
public final String getAlbumSortOrder() {
return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z);
}
@Nullable
public final String getAlbumSongSortOrder() {
return mPreferences.getString(ALBUM_SONG_SORT_ORDER,
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST);
}
@Nullable
public final String getSongSortOrder() {
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z);
}