diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumViewGridAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumViewGridAdapter.java index 1f292756..dbbd5c3c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumViewGridAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumViewGridAdapter.java @@ -33,7 +33,7 @@ public class AlbumViewGridAdapter extends ArrayAdapter { public AlbumViewGridAdapter(Context context, List objects) { super(context, R.layout.album_tile, objects); this.context = context; - usePalette = true; + usePalette = false; } @Override @@ -62,7 +62,6 @@ public class AlbumViewGridAdapter extends ArrayAdapter { Picasso.with(context) .load(MusicUtil.getAlbumArtUri(album.id)) .placeholder(R.drawable.default_album_art) - .error(R.drawable.default_album_art) .into(viewHolder.image, new Callback.EmptyCallback(){ @Override public void onSuccess() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java index e4e45e0c..3cf8b9cd 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Album; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.List; @@ -57,7 +58,7 @@ public class AlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 5 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR - }, selection, null, null); + }, selection, null, PreferenceUtils.getInstace(context).getAlbumSortOrder()); } public static Album getAlbum(Context context, int albumId) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java index 3b09916d..b172a805 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.Collections; @@ -68,6 +69,6 @@ public class AlbumSongLoader { MediaStore.Audio.AudioColumns.TRACK, /* 6 */ MediaStore.Audio.AudioColumns.ARTIST_ID - }, selection.toString(), null, null); + }, selection.toString(), null, PreferenceUtils.getInstace(context).getAlbumSongSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java index 10672b9b..8df0d022 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Album; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.List; @@ -50,6 +51,6 @@ public class ArtistAlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 4 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR - }, null, null, null); + }, null, null, PreferenceUtils.getInstace(context).getArtistAlbumSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java index 2a12265a..e49c1b7d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Artist; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.List; @@ -51,7 +52,7 @@ public class ArtistLoader { MediaStore.Audio.ArtistColumns.NUMBER_OF_ALBUMS, /* 3 */ MediaStore.Audio.ArtistColumns.NUMBER_OF_TRACKS - }, selection, null, null); + }, selection, null, PreferenceUtils.getInstace(context).getArtistSortOrder()); } public static Artist getArtist(Context context, int artistId) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java index 6ffd8935..4cdaa5f7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.List; @@ -59,6 +60,6 @@ public class ArtistSongLoader { MediaStore.Audio.AudioColumns.TRACK, /* 6 */ MediaStore.Audio.AudioColumns.ALBUM_ID - }, selection.toString(), null, null); + }, selection.toString(), null, PreferenceUtils.getInstace(context).getArtistSongSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java index 638383d7..c798096a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -6,6 +6,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.util.PreferenceUtils; import java.util.ArrayList; import java.util.List; @@ -62,7 +63,7 @@ public class SongLoader { MediaStore.Audio.AudioColumns.ARTIST_ID, /* 7 */ MediaStore.Audio.AudioColumns.ALBUM_ID - }, selection, null, null); + }, selection, null, PreferenceUtils.getInstace(context).getSongSortOrder()); } public static List getSongs(Context context, String query) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index c9c09213..c030263a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -7,13 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.support.v7.graphics.Palette; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.animation.DecelerateInterpolator; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ImageView; @@ -37,10 +35,7 @@ import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; -import com.nhaarman.listviewanimations.appearance.AnimationAdapter; -import com.nhaarman.listviewanimations.appearance.simple.ScaleInAnimationAdapter; import com.nineoldandroids.view.ViewHelper; -import com.nineoldandroids.view.ViewPropertyAnimator; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; @@ -58,15 +53,11 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab public static final String TAG = AlbumDetailActivity.class.getSimpleName(); private static final boolean TOOLBAR_IS_STICKY = true; - private static final int DEFAULT_DELAY_NO_TRANSITION = 200; - private static final int DEFAULT_DELAY = 450; - private static final int DEFAULT_ANIMATION_TIME = 1000; private App app; private Album album; - private AnimationAdapter animatedSongsAdapter; private ObservableListView absSongListView; private View statusBar; private ImageView albumArtImageView; @@ -138,6 +129,8 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab super.onCreate(savedInstanceState); setContentView(R.layout.activity_album_detail); + if (Util.hasLollipopSDK()) postponeEnterTransition(); + Bundle intentExtras = getIntent().getExtras(); int albumId = -1; if (intentExtras != null) { @@ -152,7 +145,8 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab setUpObservableListViewParams(); setUpToolBar(); setUpViews(); - animateEnterActivity(); + + if (Util.hasLollipopSDK()) startPostponedEnterTransition(); } @Override @@ -190,17 +184,11 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab albumTitleView.setText(album.title); ViewHelper.setAlpha(albumArtOverlayView, 0); - prepareViewsForOpenAnimation(); setUpAlbumArtAndApplyPalette(); setUpListView(); + setUpSongsAdapter(); } - private void prepareViewsForOpenAnimation() { - albumTitleView.setPivotY(0); - albumTitleView.setScaleY(0); - } - - @SuppressLint("NewApi") private void setUpAlbumArtAndApplyPalette() { Picasso.with(this).load(MusicUtil.getAlbumArtUri(album.id)) .placeholder(R.drawable.default_album_art) @@ -285,39 +273,11 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab } } - private void animateEnterActivity() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - animateHeader(0); - setUpSongsAdapter(); - } - }, DEFAULT_DELAY); - - } else { - setUpSongsAdapter(); - getFab().setScaleX(0); - getFab().setScaleY(0); - animateHeader(DEFAULT_DELAY_NO_TRANSITION); - animateFab(DEFAULT_DELAY_NO_TRANSITION); - } - } - private void setUpSongsAdapter() { final List songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator()); final SongAdapter songAdapter = new SongAdapter(this, this, songs); -// SwingBottomInAnimationAdapter songsAdapter = new SwingBottomInAnimationAdapter(songAdapter); -// SwingRightInAnimationAdapter songsAdapter = new SwingRightInAnimationAdapter(songAdapter); -// SwingLeftInAnimationAdapter songsAdapter = new SwingLeftInAnimationAdapter(songAdapter); - ScaleInAnimationAdapter songsAdapter = new ScaleInAnimationAdapter(songAdapter); -// AlphaInAnimationAdapter songsAdapter = new AlphaInAnimationAdapter(songAdapter); - - animatedSongsAdapter = songsAdapter; - animatedSongsAdapter.setAbsListView(absSongListView); - - absSongListView.setAdapter(animatedSongsAdapter); + absSongListView.setAdapter(songAdapter); absSongListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -328,26 +288,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab }); } - private void animateHeader(int startDelay) { - ViewPropertyAnimator.animate(albumTitleView) - .scaleX(1) - .scaleY(1) - .setInterpolator(new DecelerateInterpolator(4)) - .setDuration(DEFAULT_ANIMATION_TIME) - .setStartDelay(startDelay) - .start(); - } - - private void animateFab(int startDelay) { - ViewPropertyAnimator.animate(getFab()) - .scaleX(1) - .scaleY(1) - .setInterpolator(new DecelerateInterpolator(4)) - .setDuration(DEFAULT_ANIMATION_TIME) - .setStartDelay(startDelay) - .start(); - } - @Override public void enableViews() { super.enableViews(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 0e4f537b..2c2f1322 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -12,7 +12,6 @@ import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.graphics.Palette; import android.support.v7.widget.Toolbar; -import android.transition.Transition; import android.util.SparseArray; import android.view.Menu; import android.view.MenuItem; @@ -91,40 +90,15 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa super.onCreate(savedInstanceState); setContentView(R.layout.activity_artist_detail); + if (Util.hasLollipopSDK()) postponeEnterTransition(); + getIntentExtras(); initViews(); setUpObservableListViewParams(); setUpToolBar(); setUpViews(); - if (Util.hasLollipopSDK()) { - getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() { - @Override - public void onTransitionStart(Transition transition) { - - } - - @Override - public void onTransitionEnd(Transition transition) { - setUpArtistImageAndApplyPalette(false); - } - - @Override - public void onTransitionCancel(Transition transition) { - - } - - @Override - public void onTransitionPause(Transition transition) { - - } - - @Override - public void onTransitionResume(Transition transition) { - - } - }); - } + if (Util.hasLollipopSDK()) startPostponedEnterTransition(); } @Override @@ -442,7 +416,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa private String[] titles; - private SparseArray pages; //TODO check if this must be static + private SparseArray pages; private Artist artist; private Context context; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index d984b11e..6a5b7143 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -39,6 +39,7 @@ import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.ArtistViewFra import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.MainActivityFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.SongViewFragment; import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.squareup.picasso.Picasso; @@ -75,7 +76,7 @@ public class MainActivity extends AbsFabActivity private void setUpViewPager() { viewPagerAdapter = new MainActivityViewPagerAdapter(this); viewPager.setAdapter(viewPagerAdapter); - int startPosition = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_VIEWPAGER_ITEM_POSITION, 1); + int startPosition = PreferenceUtils.getInstace(this).getStartPage(); viewPager.setCurrentItem(startPosition); navigationDrawerFragment.setItemChecked(startPosition); @@ -89,7 +90,7 @@ public class MainActivity extends AbsFabActivity @Override public void onPageSelected(final int position) { - PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit().putInt(AppKeys.SP_VIEWPAGER_ITEM_POSITION, position).apply(); + PreferenceUtils.getInstace(MainActivity.this).setStartPage(position); navigationDrawerFragment.setItemChecked(position); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java index 392efcb5..c9e0e974 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java @@ -33,6 +33,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity { protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); setUpFab(); + App.bus.register(busEventListener); } private void setUpFab() { @@ -100,7 +101,6 @@ public abstract class AbsFabActivity extends AbsBaseActivity { protected void onResume() { super.onResume(); updateControllerState(); - App.bus.register(busEventListener); } @Override @@ -149,9 +149,9 @@ public abstract class AbsFabActivity extends AbsBaseActivity { } @Override - protected void onStop() { - super.onStop(); + protected void onDestroy() { App.bus.unregister(busEventListener); + super.onDestroy(); } public void onMusicRemoteEvent(MusicRemoteEvent event) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java index 6ce9d961..fec26a5a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java @@ -75,7 +75,7 @@ public class AlbumViewFragment extends MainActivityFragment { } private void fillAbsListView(List albums) { - Collections.sort(albums, new AlbumAlphabeticComparator()); + //Collections.sort(albums, new AlbumAlphabeticComparator()); AlbumViewGridAdapter albumViewGridAdapter = new AlbumViewGridAdapter(getActivity(), albums); absListView.setAdapter(albumViewGridAdapter); absListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java index bc2340e1..d4e6a557 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java @@ -82,7 +82,7 @@ public class ArtistViewFragment extends MainActivityFragment { } private void fillAbsListView(List artists) { - Collections.sort(artists, new ArtistAlphabeticComparator()); + //Collections.sort(artists, new ArtistAlphabeticComparator()); ArtistViewListAdapter artistAdapter = new ArtistViewListAdapter(getActivity(), artists); absListView.setAdapter(artistAdapter); absListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java index b71c8790..e28729a3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -64,7 +64,7 @@ public class SongViewFragment extends MainActivityFragment { } private void fillAbsListView(final List songs) { - Collections.sort(songs, new SongAlphabeticComparator()); + //Collections.sort(songs, new SongAlphabeticComparator()); AbsBaseActivity absBaseActivity = null; if (getActivity() instanceof AbsBaseActivity) { absBaseActivity = (AbsBaseActivity) getActivity(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index 1e3c4327..6a79ebfa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -6,9 +6,12 @@ import android.content.ContentValues; import android.content.Context; import android.net.Uri; import android.os.Environment; +import android.os.ParcelFileDescriptor; import android.util.Log; import java.io.File; +import java.io.FileDescriptor; +import java.io.FileNotFoundException; import java.io.IOException; /** @@ -24,6 +27,16 @@ public class MusicUtil { return ContentUris.withAppendedId(sArtworkUri, album_id); } + public static boolean hasAlbumArt(final Context context, int album_id) { + try { + context.getContentResolver().openFileDescriptor(getAlbumArtUri(album_id), "r"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return false; + } + return true; + } + public static String getReadableDurationString(long songDurationMillis) { long minutes = (songDurationMillis / 1000) / 60; long seconds = (songDurationMillis / 1000) % 60; diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java new file mode 100644 index 00000000..c538db4c --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java @@ -0,0 +1,140 @@ +package com.kabouzeid.gramophone.util; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +public final class PreferenceUtils { + + /* Default start page (Artist page) */ + public static final int DEFAULT_PAGE = 2; + + /* Saves the last page the pager was on in {@link MusicBrowserPhoneFragment} */ + public static final String START_PAGE = "start_page"; + + // Sort order for the artist list + public static final String ARTIST_SORT_ORDER = "artist_sort_order"; + + // Sort order for the artist song list + public static final String ARTIST_SONG_SORT_ORDER = "artist_song_sort_order"; + + // Sort order for the artist album list + public static final String ARTIST_ALBUM_SORT_ORDER = "artist_album_sort_order"; + + // Sort order for the album list + public static final String ALBUM_SORT_ORDER = "album_sort_order"; + + // Sort order for the album song list + public static final String ALBUM_SONG_SORT_ORDER = "album_song_sort_order"; + + // Sort order for the song list + public static final String SONG_SORT_ORDER = "song_sort_order"; + + // Key used to download images only on Wi-Fi + public static final String ONLY_ON_WIFI = "only_on_wifi"; + + // Key that gives permissions to download missing artist images + public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "download_missing_artist_images"; + + private static PreferenceUtils sInstance; + + private final SharedPreferences mPreferences; + + public PreferenceUtils(final Context context) { + mPreferences = PreferenceManager.getDefaultSharedPreferences(context); + } + + public static final PreferenceUtils getInstace(final Context context) { + if (sInstance == null) { + sInstance = new PreferenceUtils(context.getApplicationContext()); + } + return sInstance; + } + + public void setStartPage(final int value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putInt(START_PAGE, value); + editor.apply(); + } + + public final int getStartPage() { + return mPreferences.getInt(START_PAGE, DEFAULT_PAGE); + } + + public final boolean onlyOnWifi() { + return mPreferences.getBoolean(ONLY_ON_WIFI, true); + } + + public void setOnlyOnWifi(final boolean value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putBoolean(ONLY_ON_WIFI, value); + editor.apply(); + } + + public final boolean downloadMissingArtistImages() { + return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true); + } + + public void setDownloadMissingArtistImages(final boolean value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, value); + editor.apply(); + } + + private void setSortOrder(final String key, final String value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putString(key, value); + editor.apply(); + } + + public void setArtistSortOrder(final String value) { + setSortOrder(ARTIST_SORT_ORDER, value); + } + + public final String getArtistSortOrder() { + return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z); + } + + public void setArtistSongSortOrder(final String value) { + setSortOrder(ARTIST_SONG_SORT_ORDER, value); + } + + public final String getArtistSongSortOrder() { + return mPreferences.getString(ARTIST_SONG_SORT_ORDER, + SortOrder.ArtistSongSortOrder.SONG_A_Z); + } + + public void setArtistAlbumSortOrder(final String value) { + setSortOrder(ARTIST_ALBUM_SORT_ORDER, value); + } + + public final String getArtistAlbumSortOrder() { + return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, + SortOrder.ArtistAlbumSortOrder.ALBUM_A_Z); + } + + public void setAlbumSortOrder(final String value) { + setSortOrder(ALBUM_SORT_ORDER, value); + } + + public final String getAlbumSortOrder() { + return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z); + } + + public void setAlbumSongSortOrder(final String value) { + setSortOrder(ALBUM_SONG_SORT_ORDER, value); + } + + public final String getAlbumSongSortOrder() { + return mPreferences.getString(ALBUM_SONG_SORT_ORDER, + SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST); + } + + public void setSongSortOrder(final String value) { + setSortOrder(SONG_SORT_ORDER, value); + } + + public final String getSongSortOrder() { + return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java b/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java new file mode 100644 index 00000000..ba2af4b3 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2012 Andrew Neal 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.kabouzeid.gramophone.util; + +import android.provider.MediaStore; + +/** + * Holds all of the sort orders for each list type. + * + * @author Andrew Neal (andrewdneal@gmail.com) + */ +public final class SortOrder { + + /** This class is never instantiated */ + public SortOrder() { + } + + /** + * Artist sort order entries. + */ + public static interface ArtistSortOrder { + /* Artist sort order A-Z */ + public final static String ARTIST_A_Z = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER; + + /* Artist sort order Z-A */ + public final static String ARTIST_Z_A = ARTIST_A_Z + " DESC"; + + /* Artist sort order number of songs */ + public final static String ARTIST_NUMBER_OF_SONGS = MediaStore.Audio.Artists.NUMBER_OF_TRACKS + + " DESC"; + + /* Artist sort order number of albums */ + public final static String ARTIST_NUMBER_OF_ALBUMS = MediaStore.Audio.Artists.NUMBER_OF_ALBUMS + + " DESC"; + } + + /** + * Album sort order entries. + */ + public static interface AlbumSortOrder { + /* Album sort order A-Z */ + public final static String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER; + + /* Album sort order Z-A */ + public final static String ALBUM_Z_A = ALBUM_A_Z + " DESC"; + + /* Album sort order songs */ + public final static String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Albums.NUMBER_OF_SONGS + + " DESC"; + + /* Album sort order artist */ + public final static String ALBUM_ARTIST = MediaStore.Audio.Albums.ARTIST; + + /* Album sort order year */ + public final static String ALBUM_YEAR = MediaStore.Audio.Albums.FIRST_YEAR + " DESC"; + + } + + /** + * Song sort order entries. + */ + public static interface SongSortOrder { + /* Song sort order A-Z */ + public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER; + + /* Song sort order Z-A */ + public final static String SONG_Z_A = SONG_A_Z + " DESC"; + + /* Song sort order artist */ + public final static String SONG_ARTIST = MediaStore.Audio.Media.ARTIST; + + /* Song sort order album */ + public final static String SONG_ALBUM = MediaStore.Audio.Media.ALBUM; + + /* Song sort order year */ + public final static String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC"; + + /* Song sort order duration */ + public final static String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC"; + + /* Song sort order date */ + public final static String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC"; + } + + /** + * Album song sort order entries. + */ + public static interface AlbumSongSortOrder { + /* Album song sort order A-Z */ + public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER; + + /* Album song sort order Z-A */ + public final static String SONG_Z_A = SONG_A_Z + " DESC"; + + /* Album song sort order track list */ + public final static String SONG_TRACK_LIST = MediaStore.Audio.Media.TRACK + ", " + + MediaStore.Audio.Media.DEFAULT_SORT_ORDER; + + /* Album song sort order duration */ + public final static String SONG_DURATION = SongSortOrder.SONG_DURATION; + } + + /** + * Artist song sort order entries. + */ + public static interface ArtistSongSortOrder { + /* Artist song sort order A-Z */ + public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER; + + /* Artist song sort order Z-A */ + public final static String SONG_Z_A = SONG_A_Z + " DESC"; + + /* Artist song sort order album */ + public final static String SONG_ALBUM = MediaStore.Audio.Media.ALBUM; + + /* Artist song sort order year */ + public final static String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC"; + + /* Artist song sort order duration */ + public final static String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC"; + + /* Artist song sort order date */ + public final static String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC"; + } + + /** + * Artist album sort order entries. + */ + public static interface ArtistAlbumSortOrder { + /* Artist album sort order A-Z */ + public final static String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER; + + /* Artist album sort order Z-A */ + public final static String ALBUM_Z_A = ALBUM_A_Z + " DESC"; + + /* Artist album sort order songs */ + public final static String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Artists.Albums.NUMBER_OF_SONGS + + " DESC"; + + /* Artist album sort order year */ + public final static String ALBUM_YEAR = MediaStore.Audio.Artists.Albums.FIRST_YEAR + + " DESC"; + } + +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index 0bfca220..4fe099ac 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -10,7 +10,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Build; -import android.preference.PreferenceManager; import android.provider.MediaStore; import android.util.TypedValue; import android.view.View; @@ -18,9 +17,7 @@ import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.misc.AppKeys; /** * Created by karim on 12.12.14. @@ -117,7 +114,7 @@ public class Util { } boolean state = false; - final boolean onlyOnWifi = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(AppKeys.SP_ONLY_ON_WIFI, true); + final boolean onlyOnWifi = PreferenceUtils.getInstace(context).onlyOnWifi(); /* Monitor network connections */ final ConnectivityManager connectivityManager = (ConnectivityManager) context diff --git a/app/src/main/res/drawable/image_background.xml b/app/src/main/res/drawable/image_background.xml index aad6705d..f30c6f66 100644 --- a/app/src/main/res/drawable/image_background.xml +++ b/app/src/main/res/drawable/image_background.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/res/drawable/navigation_drawer_gradient.xml b/app/src/main/res/drawable/shadow_down.xml similarity index 63% rename from app/src/main/res/drawable/navigation_drawer_gradient.xml rename to app/src/main/res/drawable/shadow_down.xml index 88c9a943..1e29601d 100644 --- a/app/src/main/res/drawable/navigation_drawer_gradient.xml +++ b/app/src/main/res/drawable/shadow_down.xml @@ -3,7 +3,6 @@ android:shape="rectangle"> + android:endColor="#34000000" + android:startColor="@android:color/transparent" /> \ No newline at end of file