Lots of progress with dynamic theming, the nav drawer now uses a RecyclerView, AboutDeveloperDialogHelper is now a DialogFragment, RTL support (to suppress Lint warnings), other various small fixes, cleaned up and formatted lot of code (and removed un-used resources), R.string.ok > android.R.string.ok, R.string.cancel > android.R.string.cancel, switched dialog helpers to DialogFragments.

This commit is contained in:
Aidan Follestad 2015-04-16 16:47:02 -05:00
commit 7ce86afd74
265 changed files with 2853 additions and 2292 deletions

View file

@ -16,8 +16,8 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@ -43,7 +43,7 @@ import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.util.List;
import java.util.ArrayList;
/*
*
@ -54,10 +54,8 @@ import java.util.List;
* */
public class AlbumDetailActivity extends AbsFabActivity {
public static final String TAG = AlbumDetailActivity.class.getSimpleName();
private App app;
private Album album;
private ObservableRecyclerView recyclerView;
@ -66,12 +64,11 @@ public class AlbumDetailActivity extends AbsFabActivity {
private View songsBackgroundView;
private TextView albumTitleView;
private Toolbar toolbar;
private int toolbarHeight;
private int headerOffset;
private int titleViewHeight;
private int albumArtViewHeight;
private int toolbarColor;
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += albumArtViewHeight + titleViewHeight;
@ -112,7 +109,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled())
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
Bundle intentExtras = getIntent().getExtras();
int albumId = -1;
@ -148,8 +146,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
int toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
@ -199,8 +197,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setNavigationBarColored(boolean colored){
if (colored){
private void setNavigationBarColored(boolean colored) {
if (colored) {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
@ -216,8 +214,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
public void run() {
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
recyclerView.scrollBy(0,1);
recyclerView.scrollBy(0,-1);
recyclerView.scrollBy(0, 1);
recyclerView.scrollBy(0, -1);
}
});
}
@ -229,7 +227,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
private void setUpSongsAdapter() {
final List<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
final ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
final AlbumSongAdapter albumSongAdapter = new AlbumSongAdapter(this, songs);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(albumSongAdapter);
@ -283,16 +281,16 @@ public class AlbumDetailActivity extends AbsFabActivity {
startActivity(intent);
return true;
case R.id.action_go_to_artist:
Pair[] artistPairs = null;
artistPairs = getSharedViewsWithFab(artistPairs);
Pair[] artistPairs = getSharedViewsWithFab(null);
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
return true;
}
return super.onOptionsItemSelected(item);
}
@Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
switch (event.getAction()){
@Subscribe
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;

View file

@ -23,6 +23,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@ -50,6 +51,7 @@ import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
/*
@ -74,7 +76,6 @@ public class ArtistDetailActivity extends AbsFabActivity {
private View songsBackgroundView;
private TextView artistNameTv;
private Toolbar toolbar;
private int toolbarHeight;
private int headerOffset;
private int titleViewHeight;
private int artistImageViewHeight;
@ -85,7 +86,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
private Spanned biography;
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += artistImageViewHeight + titleViewHeight;
@ -127,7 +128,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
getIntentExtras();
initViews();
@ -153,8 +155,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
int toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
@ -180,8 +182,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setNavigationBarColored(boolean colored){
if (colored){
private void setNavigationBarColored(boolean colored) {
if (colored) {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
@ -193,7 +195,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
songListView.addHeaderView(songListHeader);
final List<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
final ArrayList<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs);
songListView.setAdapter(songAdapter);
@ -242,6 +244,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
return new MaterialDialog.Builder(ArtistDetailActivity.this)
.title(artist.name)
.content(biography)
.positiveText(android.R.string.ok)
.build();
}
@ -285,14 +288,15 @@ public class ArtistDetailActivity extends AbsFabActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setStandardColors() {
int titleTextColor = Util.resolveColor(this, R.attr.title_text_color);
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
toolbarColor = defaultBarColor;
artistNameTv.setBackgroundColor(defaultBarColor);
artistNameTv.setTextColor(titleTextColor);
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
}
private void setUpToolBar() {
@ -398,8 +402,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
@Subscribe
public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
switch (event.getAction()){
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;

View file

@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewPager;
@ -17,11 +18,12 @@ import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.astuetz.PagerSlidingTabStrip;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter;
import com.kabouzeid.gramophone.helper.AboutDeveloperDialogHelper;
import com.kabouzeid.gramophone.helper.CreatePlaylistDialogHelper;
import com.kabouzeid.gramophone.dialogs.AboutDialog;
import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
@ -44,6 +46,7 @@ import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
@ -95,8 +98,7 @@ public class MainActivity extends AbsFabActivity
navigationDrawerFragment.setItemChecked(startPosition);
final int accentColor = Util.resolveColor(MainActivity.this, R.attr.colorAccent);
slidingTabLayout.setIndicatorColor(accentColor);
slidingTabLayout.setIndicatorColor(ThemeSingleton.get().positiveColor);
slidingTabLayout.setViewPager(viewPager);
slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@ -137,7 +139,7 @@ public class MainActivity extends AbsFabActivity
private void setToolBarTransparent(boolean transparent) {
float alpha = transparent ? 0.97f : 1f;
final int colorPrimary = Util.resolveColor(this, R.attr.colorPrimary);
final int colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
ViewUtil.setBackgroundAlpha(toolbar, alpha, colorPrimary);
ViewUtil.setBackgroundAlpha(statusBar, alpha, colorPrimary);
ViewUtil.setBackgroundAlpha(slidingTabLayout, alpha, colorPrimary);
@ -222,6 +224,22 @@ public class MainActivity extends AbsFabActivity
getResources().getString(R.string.transition_album_cover)
)
}));
} else if (position == NavigationDrawerFragment.ABOUT_INDEX) {
drawerLayout.closeDrawers();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new AboutDialog().show(getSupportFragmentManager(), "ABOUT_DIALOG");
}
}, 200);
} else if (position == NavigationDrawerFragment.SETTINGS_INDEX) {
drawerLayout.closeDrawers();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
}
}, 200);
} else {
if (viewPager != null) {
viewPager.setCurrentItem(position, true);
@ -267,17 +285,11 @@ public class MainActivity extends AbsFabActivity
MusicPlayerRemote.shuffleAllSongs(this);
return true;
case R.id.action_new_playlist:
CreatePlaylistDialogHelper.getDialog(this).show();
CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
return true;
case R.id.action_search:
startActivity(new Intent(MainActivity.this, SearchActivity.class));
return true;
case R.id.action_settings:
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
return true;
case R.id.action_about:
AboutDeveloperDialogHelper.getDialog(this).show();
return true;
case R.id.action_current_playing:
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
return true;
@ -319,9 +331,9 @@ public class MainActivity extends AbsFabActivity
PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(currentPage);
}
private boolean handlePlaybackIntent(Intent intent) {
private void handlePlaybackIntent(Intent intent) {
if (intent == null) {
return false;
return;
}
Uri uri = intent.getData();
@ -335,7 +347,8 @@ public class MainActivity extends AbsFabActivity
final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");
if (id >= 0) {
int position = intent.getIntExtra("position", 0);
MusicPlayerRemote.openQueue((List<Song>) (List<? extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
//noinspection unchecked
MusicPlayerRemote.openQueue((ArrayList<Song>) (List<? extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
handled = true;
}
} else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
@ -356,7 +369,6 @@ public class MainActivity extends AbsFabActivity
if (handled) {
setIntent(new Intent());
}
return handled;
}
private long parseIdFromIntent(Intent intent, String longKey,

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.ui.activities;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
@ -20,11 +19,14 @@ import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.afollestad.materialdialogs.internal.MDTintHelper;
import com.afollestad.materialdialogs.util.DialogUtils;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistImageUrlLoader;
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
@ -66,9 +68,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private ImageButton repeatButton;
private ImageButton shuffleButton;
private View mediaControllerContainer;
private int lastFooterColor = -1;
private boolean killThreads = false;
@Override
@ -128,11 +128,13 @@ public class MusicControllerActivity extends AbsFabActivity {
if (Util.hasLollipopSDK()) {
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
}
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
mediaControllerContainer.setBackgroundColor(
DialogUtils.resolveColor(this, R.attr.music_controller_container_color));
} else {
if (Util.hasLollipopSDK() && !Util.isInPortraitMode(this)) {
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
mediaControllerContainer.setBackgroundColor(
DialogUtils.resolveColor(this, R.attr.music_controller_container_color));
} else {
mediaControllerContainer.setBackground(null);
}
@ -140,6 +142,7 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setUpProgressSlider() {
MDTintHelper.setTint(progressSlider, ThemeSingleton.get().positiveColor);
progressSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@ -159,8 +162,10 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setUpPrevNext() {
nextButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_next_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
prevButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_previous_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
nextButton.setImageDrawable(Util.getTintedDrawable(this,
R.drawable.ic_skip_next_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
prevButton.setImageDrawable(Util.getTintedDrawable(this,
R.drawable.ic_skip_previous_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -188,10 +193,12 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE:
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
ThemeSingleton.get().positiveColor));
break;
default:
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
break;
}
}
@ -209,13 +216,16 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE:
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
break;
case MusicService.REPEAT_MODE_ALL:
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
ThemeSingleton.get().positiveColor));
break;
default:
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_one_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_one_white_48dp,
ThemeSingleton.get().positiveColor));
break;
}
}
@ -294,9 +304,9 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setStandardColors() {
int songTitleTextColor = Util.resolveColor(this, R.attr.title_text_color);
int artistNameTextColor = Util.resolveColor(this, R.attr.caption_text_color);
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
int songTitleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
int artistNameTextColor = DialogUtils.resolveColor(this, R.attr.caption_text_color);
int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
animateColorChange(defaultBarColor);
@ -353,7 +363,8 @@ public class MusicControllerActivity extends AbsFabActivity {
Thread.sleep(1);
} catch (InterruptedException e) {
return;
} catch (Exception e) {
} catch (Exception e2) {
e2.printStackTrace();
}
final int finalTotal = total;
final int finalCurrentPosition = currentPosition;
@ -427,7 +438,7 @@ public class MusicControllerActivity extends AbsFabActivity {
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_add_to_playlist:
AddToPlaylistDialogHelper.getDialog(this, song).show();
AddToPlaylistDialog.create(song).show(getSupportFragmentManager(), "ADD_PLAYLIST");
return true;
case android.R.id.home:
super.onBackPressed();
@ -443,7 +454,7 @@ public class MusicControllerActivity extends AbsFabActivity {
case R.id.action_details:
String songFilePath = SongFilePathLoader.getSongFilePath(this, song.id);
File songFile = new File(songFilePath);
SongDetailDialogHelper.getDialog(this, songFile).show();
SongDetailDialog.create(songFile).show(getSupportFragmentManager(), "SONG_DETAIL");
return true;
case R.id.action_go_to_album:
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithFab(null));
@ -480,4 +491,4 @@ public class MusicControllerActivity extends AbsFabActivity {
super.onDestroy();
App.bus.unregister(this);
}
}
}

View file

@ -1,5 +1,7 @@
package com.kabouzeid.gramophone.ui.activities;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@ -18,25 +20,34 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import java.util.List;
import java.util.ArrayList;
public class PlaylistDetailActivity extends AbsFabActivity {
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
private RecyclerView recyclerView;
private Playlist playlist;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
setUpTranslucence(false, false);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist_detail);
getIntentExtras();
setUpToolBar();
final int primary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
final int primaryDark = PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker();
if (Util.hasLollipopSDK()) {
getWindow().setStatusBarColor(primaryDark);
getWindow().setNavigationBarColor(primaryDark);
}
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final List<PlaylistSong> songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
getIntentExtras();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final ArrayList<PlaylistSong> songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
final PlaylistSongAdapter adapter = new PlaylistSongAdapter(this, songs);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(adapter);
@ -57,6 +68,12 @@ public class PlaylistDetailActivity extends AbsFabActivity {
recyclerView.addItemDecoration(dragSortRecycler);
recyclerView.addOnItemTouchListener(dragSortRecycler);
recyclerView.setOnScrollListener(dragSortRecycler.getScrollListener());
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setBackgroundColor(primary);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(playlist.name);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void getIntentExtras() {
@ -68,12 +85,6 @@ public class PlaylistDetailActivity extends AbsFabActivity {
}
}
private void setUpToolBar() {
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
getSupportActionBar().setTitle(playlist.name);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public String getTag() {
return TAG;

View file

@ -29,6 +29,7 @@ import com.kabouzeid.gramophone.model.SearchEntry;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import java.util.ArrayList;
@ -48,9 +49,11 @@ public class SearchActivity extends AbsBaseActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
final int primary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
final int primaryDark = PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker();
if (Util.hasLollipopSDK()) {
getWindow().setStatusBarColor(Util.resolveColor(this, R.attr.colorPrimaryDark));
getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.colorPrimaryDark));
getWindow().setStatusBarColor(primaryDark);
getWindow().setNavigationBarColor(primaryDark);
}
listView = (ListView) findViewById(R.id.list);
@ -60,7 +63,7 @@ public class SearchActivity extends AbsBaseActivity {
Object item = parent.getItemAtPosition(position);
if (item instanceof SearchEntry) {
if (item instanceof Song) {
List<Song> playList = new ArrayList<>();
ArrayList<Song> playList = new ArrayList<>();
playList.add((Song) item);
MusicPlayerRemote.openQueue(playList, 0, true);
} else if (item instanceof Album) {
@ -95,7 +98,9 @@ public class SearchActivity extends AbsBaseActivity {
}
});
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setBackgroundColor(primary);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@ -164,10 +169,7 @@ public class SearchActivity extends AbsBaseActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
return id == R.id.action_settings || super.onOptionsItemSelected(item);
}
private void search(String query) {
@ -201,7 +203,7 @@ public class SearchActivity extends AbsBaseActivity {
public static class LabelEntry implements SearchEntry {
String title;
final String title;
String label;
public LabelEntry(String label) {

View file

@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.media.audiofx.AudioEffect;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@ -12,23 +13,46 @@ import android.preference.PreferenceManager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import com.afollestad.materialdialogs.util.DialogUtils;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
public class SettingsActivity extends AbsBaseActivity {
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
public static final String TAG = SettingsActivity.class.getSimpleName();
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setStatusBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker());
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
if (savedInstanceState == null)
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
}
@Override
public void onColorSelection(int title, int color) {
if (title == R.string.primary_color) {
PreferenceUtils.getInstance(this).setThemeColorPrimary(color);
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, color));
} else if (title == R.string.accent_color) {
PreferenceUtils.getInstance(this).setThemeColorAccent(color);
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, color));
}
recreate();
}
public static class SettingsFragment extends PreferenceFragment {
@ -62,6 +86,30 @@ public class SettingsActivity extends AbsBaseActivity {
}
});
ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
primaryColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary(),
DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary());
return true;
}
});
ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
accentColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorAccent(),
DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
PreferenceUtils.getInstance(getActivity()).getThemeColorAccent());
return true;
}
});
findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {

View file

@ -3,24 +3,22 @@ package com.kabouzeid.gramophone.ui.activities.base;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import com.crashlytics.android.Crashlytics;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.squareup.otto.Subscribe;
/**
* Created by karim on 20.01.15.
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
public abstract class AbsBaseActivity extends ThemeBaseActivity implements KabViewsDisableAble {
private App app;
private boolean areViewsEnabled;
private Object uiPreferenceChangeListener = new Object() {
private final Object uiPreferenceChangeListener = new Object() {
@Subscribe
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
@ -30,7 +28,6 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
@Override
protected void onCreate(Bundle savedInstanceState) {
Crashlytics.setString(AppKeys.CL_CURRENT_ACTIVITY, getTag());
setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
super.onCreate(savedInstanceState);
try {
App.bus.register(uiPreferenceChangeListener);
@ -45,7 +42,7 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
return app;
}
public abstract String getTag();
protected abstract String getTag();
@Override
protected void onResume() {
@ -53,15 +50,6 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
enableViews();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.THEME_CHANGED:
recreate();
break;
}
}
@Override
public void enableViews() {
areViewsEnabled = true;
@ -77,14 +65,12 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
return areViewsEnabled;
}
protected void setUpTranslucence(boolean statusBarTranslucent, boolean navigationBarTranslucent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent);
if (Util.isInPortraitMode(this) || Util.isTablet(this)) {
Util.setNavBarTranslucent(getWindow(), navigationBarTranslucent);
} else {
Util.setNavBarTranslucent(getWindow(), false);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.THEME_CHANGED:
recreate();
break;
}
}

View file

@ -1,5 +1,7 @@
package com.kabouzeid.gramophone.ui.activities.base;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v4.util.Pair;
import android.util.Log;
@ -8,8 +10,10 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.misc.SmallOnGestureListener;
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
@ -19,14 +23,14 @@ import com.melnykov.fab.FloatingActionButton;
import com.squareup.otto.Subscribe;
/**
* Created by karim on 22.01.15.
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsFabActivity extends AbsBaseActivity {
public static final String TAG = AbsFabActivity.class.getSimpleName();
private FloatingActionButton fab;
private PlayPauseDrawable playPauseDrawable;
private Object busEventListener = new Object() {
private final Object busEventListener = new Object() {
@Subscribe
public void onBusEvent(MusicRemoteEvent event) {
onMusicRemoteEvent(event);
@ -49,6 +53,17 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
}
getFab().setImageDrawable(playPauseDrawable);
final int accentColor = ThemeSingleton.get().positiveColor;
if (accentColor == Color.WHITE) {
getFab().setColorNormal(accentColor);
getFab().setColorPressed(ColorChooserDialog.shiftColorDown(accentColor));
getFab().getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
} else {
getFab().setColorNormal(accentColor);
getFab().setColorPressed(ColorChooserDialog.shiftColorUp(accentColor));
getFab().getDrawable().clearColorFilter();
}
updateFabState();
final GestureDetector gestureDetector = new GestureDetector(this, new SmallOnGestureListener() {
@Override
@ -111,9 +126,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
Pair[] sharedViewsWithFab;
if (sharedViews != null) {
sharedViewsWithFab = new Pair[sharedViews.length + 1];
for (int i = 0; i < sharedViews.length; i++) {
sharedViewsWithFab[i] = sharedViews[i];
}
System.arraycopy(sharedViews, 0, sharedViewsWithFab, 0, sharedViews.length);
} else {
sharedViewsWithFab = new Pair[1];
}
@ -134,7 +147,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
}
}
public void onMusicRemoteEvent(MusicRemoteEvent event) {
protected void onMusicRemoteEvent(MusicRemoteEvent event) {
switch (event.getAction()) {
case MusicRemoteEvent.PLAY:
setFabPause();

View file

@ -0,0 +1,76 @@
package com.kabouzeid.gramophone.ui.activities.base;
import android.app.ActivityManager;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
/**
* @author Aidan Follestad (afollestad)
*/
public abstract class ThemeBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
private boolean mLastDarkTheme;
private int mLastPrimary;
private int mLastAccent;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
super.onCreate(savedInstanceState);
setupTheme();
}
private void setupTheme() {
// Persist current values so the Activity knows if they change
mLastDarkTheme = PreferenceUtils.getInstance(this).getGeneralTheme() == 1;
mLastPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
mLastAccent = PreferenceUtils.getInstance(this).getThemeColorAccent();
// Accent colors in dialogs, and any dynamic views that pull from this singleton
ThemeSingleton.get().positiveColor = mLastAccent;
ThemeSingleton.get().negativeColor = ThemeSingleton.get().positiveColor;
ThemeSingleton.get().neutralColor = ThemeSingleton.get().positiveColor;
ThemeSingleton.get().widgetColor = ThemeSingleton.get().positiveColor;
// Dark theme
ThemeSingleton.get().darkTheme = mLastDarkTheme;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Sets color of entry in the system recents page
ActivityManager.TaskDescription td = new ActivityManager.TaskDescription(
getString(R.string.app_name),
BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher),
mLastPrimary);
setTaskDescription(td);
}
}
@Override
protected void onResume() {
super.onResume();
if (mLastDarkTheme != (PreferenceUtils.getInstance(this).getGeneralTheme() == 1) ||
mLastPrimary != PreferenceUtils.getInstance(this).getThemeColorPrimary() ||
mLastAccent != PreferenceUtils.getInstance(this).getThemeColorAccent()) {
// Theme colors changed, recreate the Activity
recreate();
}
}
protected void setUpTranslucence(boolean statusBarTranslucent, boolean navigationBarTranslucent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent);
if (Util.isInPortraitMode(this) || Util.isTablet(this)) {
Util.setNavBarTranslucent(getWindow(), navigationBarTranslucent);
} else {
Util.setNavBarTranslucent(getWindow(), false);
}
}
}
}

View file

@ -17,6 +17,7 @@ import android.view.animation.OvershootInterpolator;
import android.widget.ImageView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@ -48,10 +49,11 @@ import java.util.List;
import java.util.Map;
/**
* Created by karim on 18.01.15.
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsTagEditorActivity extends AbsBaseActivity {
public static final String TAG = AbsTagEditorActivity.class.getSimpleName();
private static final String TAG = AbsTagEditorActivity.class.getSimpleName();
private static final int REQUEST_CODE_SELECT_IMAGE = 1337;
private int id;
@ -64,7 +66,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
private Toolbar toolBar;
private ImageView image;
private View header;
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
float alpha;
@ -168,7 +170,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
protected abstract void deleteImage();
protected void setUpFab() {
private void setUpFab() {
ViewHelper.setScaleX(fab, 0);
ViewHelper.setScaleY(fab, 0);
fab.setEnabled(false);
@ -183,7 +185,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
protected abstract void save();
private void restoreStandardColors() {
final int vibrantColor = Util.resolveColor(this, R.attr.colorPrimary);
final int vibrantColor = DialogUtils.resolveColor(this, R.attr.colorPrimary);
paletteColorPrimary = vibrantColor;
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@ -199,7 +201,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
}
}
protected void setUpToolBar() {
private void setUpToolBar() {
setSupportActionBar(toolBar);
getSupportActionBar().setTitle(getResources().getString(R.string.tag_editor));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@ -270,7 +272,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
final int vibrantColor = palette.getVibrantColor(Util.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
final int vibrantColor = palette.getVibrantColor(DialogUtils.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
paletteColorPrimary = vibrantColor;
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

View file

@ -34,7 +34,6 @@ import java.util.Map;
public class AlbumTagEditorActivity extends AbsTagEditorActivity implements TextWatcher {
public static final String TAG = AlbumTagEditorActivity.class.getSimpleName();
private File albumArtFile;
private Bitmap albumArtBitmap;
private boolean deleteAlbumArt;
@ -157,13 +156,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
fieldKeyValueMap.put(FieldKey.GENRE, genreName.getText().toString());
fieldKeyValueMap.put(FieldKey.YEAR, year.getText().toString());
try {
albumArtFile = MusicUtil.getAlbumArtFile(this, String.valueOf(getId()));
} catch (IOException e) {
Log.e(TAG, "error while creating albumArtFile", e);
}
File albumArtFile = MusicUtil.getAlbumArtFile(String.valueOf(getId()));
if (albumArtBitmap != null && albumArtFile != null) {
if (albumArtBitmap != null) {
try {
albumArtBitmap.compress(Bitmap.CompressFormat.PNG, 0, new FileOutputStream(albumArtFile));
artwork = ArtworkFactory.createArtworkFromFile(albumArtFile);

View file

@ -7,34 +7,34 @@ import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.NavigationDrawerItemAdapter;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.NavigationDrawerItem;
import com.nhaarman.listviewanimations.appearance.simple.AlphaInAnimationAdapter;
import java.util.ArrayList;
public class NavigationDrawerFragment extends Fragment {
public static final int NAVIGATION_DRAWER_HEADER = -1;
private static final String TAG = NavigationDrawerFragment.class.getSimpleName();
public static final int ABOUT_INDEX = 4;
public static final int SETTINGS_INDEX = 5;
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
public View fragmentRootView;
private App app;
private NavigationDrawerCallbacks callbacks;
private NavigationDrawerItemAdapter drawerAdapter;
private DrawerLayout drawerLayout;
private ListView drawerListView;
private RecyclerView drawerRecyclerView;
private View fragmentContainerView;
private Button headerButton;
@ -91,7 +91,6 @@ public class NavigationDrawerFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
app = (App) getActivity().getApplicationContext();
userLearnedDrawer = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean(AppKeys.SP_USER_LEARNED_DRAWER, false);
if (savedInstanceState != null) {
setItemChecked(savedInstanceState.getInt(STATE_SELECTED_POSITION));
@ -101,8 +100,7 @@ public class NavigationDrawerFragment extends Fragment {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
}
@ -115,7 +113,7 @@ public class NavigationDrawerFragment extends Fragment {
}
private void initViews() {
drawerListView = (ListView) fragmentRootView.findViewById(R.id.navigation_drawer_list);
drawerRecyclerView = (RecyclerView) fragmentRootView.findViewById(R.id.navigation_drawer_list);
final View drawerHeader = fragmentRootView.findViewById(R.id.header);
headerButton = (Button) drawerHeader.findViewById(R.id.header_clickable);
albumArt = (ImageView) drawerHeader.findViewById(R.id.album_art);
@ -139,23 +137,22 @@ public class NavigationDrawerFragment extends Fragment {
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.albums), R.drawable.ic_album_white_24dp));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.artists), R.drawable.ic_person_white_24dp));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.playlists), R.drawable.ic_queue_music_white_24dp));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_about), R.drawable.ic_drawer_about));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_settings), R.drawable.ic_drawer_settings));
drawerAdapter = new NavigationDrawerItemAdapter(getActivity(), R.id.navigation_drawer, navigationDrawerItems);
final AlphaInAnimationAdapter animationAdapter = new AlphaInAnimationAdapter(drawerAdapter);
animationAdapter.setAbsListView(drawerListView);
drawerListView.setAdapter(animationAdapter);
drawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
drawerAdapter = new NavigationDrawerItemAdapter(getActivity(), navigationDrawerItems, new NavigationDrawerItemAdapter.Callback() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
public void onItemSelected(int index) {
selectItem(index);
}
});
drawerRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
drawerRecyclerView.setAdapter(drawerAdapter);
}
private void selectItem(final int position) {
if (position != NAVIGATION_DRAWER_HEADER) {
if (position != NAVIGATION_DRAWER_HEADER &&
position != ABOUT_INDEX && position != SETTINGS_INDEX) {
setItemChecked(position);
if (drawerLayout != null) {
new Handler().postDelayed(new Runnable() {
@ -165,11 +162,9 @@ public class NavigationDrawerFragment extends Fragment {
}
}, 400);
}
}
if (callbacks != null) {
if (callbacks != null)
callbacks.onNavigationDrawerItemSelected(position);
}
}
@Override
@ -191,7 +186,7 @@ public class NavigationDrawerFragment extends Fragment {
}
}
public static interface NavigationDrawerCallbacks {
public interface NavigationDrawerCallbacks {
void onNavigationDrawerItemSelected(int position);
}
}

View file

@ -10,7 +10,7 @@ import com.kabouzeid.gramophone.ui.activities.MainActivity;
import com.kabouzeid.gramophone.util.Util;
/**
* Created by karim on 27.02.15.
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityFragment extends Fragment implements KabViewsDisableAble {
private boolean areViewsEnabled;

View file

@ -9,7 +9,7 @@ import android.view.ViewGroup;
import com.kabouzeid.gramophone.R;
/**
* Created by karim on 30.03.15.
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment {
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();

View file

@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
@ -10,7 +9,7 @@ import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
/**
* Created by karim on 22.11.14.
* @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
public static final String TAG = AlbumViewFragment.class.getSimpleName();

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@ -8,6 +9,7 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PlaylistAdapter;
public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
@Override
@ -22,6 +24,6 @@ public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
@Override
protected RecyclerView.Adapter createAdapter() {
return new PlaylistAdapter(getActivity());
return new PlaylistAdapter((ActionBarActivity) getActivity());
}
}

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@ -7,9 +8,10 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter;
/**
* Created by karim on 29.12.14.
* @author Karim Abou Zeid (kabouzeid)
*/
public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
public static final String TAG = SongViewFragment.class.getSimpleName();
@Override
@ -24,6 +26,6 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
@Override
protected RecyclerView.Adapter createAdapter() {
return new SongAdapter(getActivity());
return new SongAdapter((ActionBarActivity) getActivity());
}
}

View file

@ -13,7 +13,6 @@ import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.Property;
import android.view.animation.DecelerateInterpolator;
@ -45,8 +44,8 @@ public class PlayPauseDrawable extends Drawable {
private float width;
private float height;
private float fallBackWidth;
private float fallBackHeight;
private final float fallBackWidth;
private final float fallBackHeight;
private float progress;
private boolean isPlay;

View file

@ -5,7 +5,7 @@ import android.util.AttributeSet;
import android.widget.ImageView;
/**
* Created by karim on 22.11.14.
* @author Karim Abou Zeid (kabouzeid)
*/
public class SquareImageView extends ImageView {
@ -23,6 +23,7 @@ public class SquareImageView extends ImageView {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//noinspection SuspiciousNameCombination
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}