Some bug fixes and grid size adjustable
This commit is contained in:
parent
bce9de2782
commit
c1a4185549
19 changed files with 236 additions and 88 deletions
|
|
@ -23,8 +23,8 @@ android {
|
||||||
applicationId "com.kabouzeid.gramophone"
|
applicationId "com.kabouzeid.gramophone"
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 22
|
targetSdkVersion 22
|
||||||
versionCode 16
|
versionCode 17
|
||||||
versionName "0.9.8b"
|
versionName "0.9.7.1b"
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
|
|
@ -60,7 +60,7 @@ dependencies {
|
||||||
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
||||||
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
|
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
|
||||||
compile 'com.mcxiaoke.volley:library:1.0.15'
|
compile 'com.mcxiaoke.volley:library:1.0.15'
|
||||||
compile 'com.squareup.picasso:picasso:2.5.0'
|
compile 'com.squareup.picasso:picasso:2.5.2'
|
||||||
compile 'com.squareup:otto:1.3.6'
|
compile 'com.squareup:otto:1.3.6'
|
||||||
compile 'com.squareup.okhttp:okhttp:2.2.0'
|
compile 'com.squareup.okhttp:okhttp:2.2.0'
|
||||||
compile 'asia.ivity.android:drag-sort-listview:1.0'
|
compile 'asia.ivity.android:drag-sort-listview:1.0'
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,11 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
|
||||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
if(item.getItemId() == R.id.action_remove_from_playing_queue) {
|
||||||
|
MusicPlayerRemote.removeFromQueue(position);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return MenuItemClickHelper.handleSongMenuClick(activity, song, item);
|
return MenuItemClickHelper.handleSongMenuClick(activity, song, item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -89,6 +90,11 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_delete_from_playlist:
|
||||||
|
int position = getAdapterPosition();
|
||||||
|
PlaylistsUtil.removeFromPlaylist(activity, dataSet.remove(position));
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
return true;
|
||||||
case R.id.action_go_to_album:
|
case R.id.action_go_to_album:
|
||||||
Pair[] albumPairs = new Pair[]{
|
Pair[] albumPairs = new Pair[]{
|
||||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover))
|
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover))
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@ import android.widget.Toast;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.App;
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
|
||||||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
|
||||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||||
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
|
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
|
||||||
|
|
@ -310,16 +307,16 @@ public class MusicPlayerRemote {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void playFile(Uri uri) {
|
public static void playFile(Uri uri) {
|
||||||
if (musicService != null && uri != null) {
|
// if (musicService != null && uri != null) {
|
||||||
String filename;
|
// String filename;
|
||||||
String scheme = uri.getScheme();
|
// String scheme = uri.getScheme();
|
||||||
if ("file".equals(scheme)) {
|
// if ("file".equals(scheme)) {
|
||||||
filename = uri.getPath();
|
// filename = uri.getPath();
|
||||||
} else {
|
// } else {
|
||||||
filename = uri.toString();
|
// filename = uri.toString();
|
||||||
}
|
// }
|
||||||
//musicService.playFile(filename); //TODO
|
// }
|
||||||
Toast.makeText(context, "This feature is not working yet", Toast.LENGTH_SHORT).show();
|
//TODO
|
||||||
}
|
Toast.makeText(context, "Sorry, this feature is not available yet!", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import java.io.Serializable;
|
||||||
* Created by karim on 23.11.14.
|
* Created by karim on 23.11.14.
|
||||||
*/
|
*/
|
||||||
public class Song implements Serializable, SearchEntry {
|
public class Song implements Serializable, SearchEntry {
|
||||||
|
|
||||||
public int id;
|
public int id;
|
||||||
public int albumId;
|
public int albumId;
|
||||||
public int artistId;
|
public int artistId;
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ public class ArtistJSONStore extends SQLiteOpenHelper {
|
||||||
|
|
||||||
public void removeItem(final String artistName) {
|
public void removeItem(final String artistName) {
|
||||||
final SQLiteDatabase database = getReadableDatabase();
|
final SQLiteDatabase database = getReadableDatabase();
|
||||||
database.delete(ArtistJSONColumns.NAME, ArtistJSONColumns.ARTIST_NAME + " = ?", new String[]{
|
database.delete(ArtistJSONColumns.NAME, ArtistJSONColumns.ARTIST_NAME + "=?", new String[]{
|
||||||
artistName.trim().toLowerCase()
|
artistName.trim().toLowerCase()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.service;
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.appwidget.AppWidgetManager;
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentUris;
|
import android.content.ContentUris;
|
||||||
|
|
@ -20,7 +19,6 @@ import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
|
@ -289,10 +287,11 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
registerEverything();
|
registerEverything();
|
||||||
isPlayerPrepared = false;
|
isPlayerPrepared = false;
|
||||||
player.reset();
|
player.reset();
|
||||||
|
player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
|
||||||
try {
|
try {
|
||||||
Uri trackUri = getCurrentPositionTrackUri();
|
Uri trackUri = getCurrentPositionTrackUri();
|
||||||
player.setDataSource(getApplicationContext(), trackUri);
|
player.setDataSource(getApplicationContext(), trackUri);
|
||||||
currentSongId = getPlayingQueue().get(getPosition()).id;
|
currentSongId = playingQueue.get(getPosition()).id;
|
||||||
updateNotification();
|
updateNotification();
|
||||||
MusicPlayerWidget.updateWidgets(this);
|
MusicPlayerWidget.updateWidgets(this);
|
||||||
updateRemoteControlClient();
|
updateRemoteControlClient();
|
||||||
|
|
@ -300,6 +299,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("MUSIC SERVICE", "Error setting data source", e);
|
Log.e("MUSIC SERVICE", "Error setting data source", e);
|
||||||
player.reset();
|
player.reset();
|
||||||
|
player = null;
|
||||||
Toast.makeText(getApplicationContext(), getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplicationContext(), getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show();
|
||||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||||
playingNotificationHelper.updatePlayState(false);
|
playingNotificationHelper.updatePlayState(false);
|
||||||
|
|
@ -397,7 +397,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REPEAT_MODE_THIS:
|
case REPEAT_MODE_THIS:
|
||||||
if(force){
|
if (force) {
|
||||||
position = getPosition() + 1;
|
position = getPosition() + 1;
|
||||||
if (isLastTrack()) {
|
if (isLastTrack()) {
|
||||||
position = 0;
|
position = 0;
|
||||||
|
|
@ -440,6 +440,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
public boolean onError(MediaPlayer mp, int what, int extra) {
|
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||||
isPlayerPrepared = false;
|
isPlayerPrepared = false;
|
||||||
player.reset();
|
player.reset();
|
||||||
|
player = null;
|
||||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -670,7 +671,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REPEAT_MODE_THIS:
|
case REPEAT_MODE_THIS:
|
||||||
if(force){
|
if (force) {
|
||||||
position = getPosition() - 1;
|
position = getPosition() - 1;
|
||||||
if (position < 0) {
|
if (position < 0) {
|
||||||
position = getPlayingQueue().size() - 1;
|
position = getPlayingQueue().size() - 1;
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.SubMenu;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.astuetz.PagerSlidingTabStrip;
|
import com.astuetz.PagerSlidingTabStrip;
|
||||||
|
|
@ -32,6 +33,10 @@ import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment;
|
import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumViewFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.ArtistViewFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.PlaylistViewFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.SongViewFragment;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||||
|
|
@ -226,13 +231,13 @@ public class MainActivity extends AbsFabActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
switch (currentPage) {
|
if (isAlbumPage()) {
|
||||||
case 3:
|
getMenuInflater().inflate(R.menu.menu_albums, menu);
|
||||||
getMenuInflater().inflate(R.menu.menu_playlists, menu);
|
setUpGridMenu(menu);
|
||||||
break;
|
} else if (isPlaylistPage()) {
|
||||||
default:
|
getMenuInflater().inflate(R.menu.menu_playlists, menu);
|
||||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
} else {
|
||||||
break;
|
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||||
}
|
}
|
||||||
restoreActionBar();
|
restoreActionBar();
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -250,6 +255,9 @@ public class MainActivity extends AbsFabActivity
|
||||||
if (drawerToggle.onOptionsItemSelected(item)) {
|
if (drawerToggle.onOptionsItemSelected(item)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (handleGridSize(item)) return true;
|
||||||
|
|
||||||
int id = item.getItemId();
|
int id = item.getItemId();
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case R.id.action_shuffle_all:
|
case R.id.action_shuffle_all:
|
||||||
|
|
@ -363,4 +371,87 @@ public class MainActivity extends AbsFabActivity
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isArtistPage() {
|
||||||
|
return viewPager.getCurrentItem() == PagerAdapter.MusicFragments.ARTIST.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArtistViewFragment getArtistFragment() {
|
||||||
|
return (ArtistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ARTIST.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAlbumPage() {
|
||||||
|
return viewPager.getCurrentItem() == PagerAdapter.MusicFragments.ALBUM.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AlbumViewFragment getAlbumFragment() {
|
||||||
|
return (AlbumViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ALBUM.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSongPage() {
|
||||||
|
return viewPager.getCurrentItem() == PagerAdapter.MusicFragments.SONG.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SongViewFragment getSongFragment() {
|
||||||
|
return (SongViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.SONG.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isPlaylistPage() {
|
||||||
|
return viewPager.getCurrentItem() == PagerAdapter.MusicFragments.PLAYLIST.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlaylistViewFragment getPlaylistFragment() {
|
||||||
|
return (PlaylistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.PLAYLIST.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUpGridMenu(Menu menu) {
|
||||||
|
boolean isPortrait = Util.isInPortraitMode(this);
|
||||||
|
int columns = isPortrait ? PreferenceUtils.getInstance(this).getAlbumGridColumns() : PreferenceUtils.getInstance(this).getAlbumGridColumnsLand();
|
||||||
|
String title = isPortrait ? getResources().getString(R.string.action_grid_columns) : getResources().getString(R.string.action_grid_columns_land);
|
||||||
|
|
||||||
|
MenuItem gridSizeItem = menu.findItem(R.id.action_grid_columns);
|
||||||
|
gridSizeItem.setTitle(title);
|
||||||
|
|
||||||
|
SubMenu gridSizeMenu = gridSizeItem.getSubMenu();
|
||||||
|
gridSizeMenu.getItem(columns - 1).setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleGridSize(MenuItem item) {
|
||||||
|
int size = -1;
|
||||||
|
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.gridSizeOne:
|
||||||
|
size = 1;
|
||||||
|
break;
|
||||||
|
case R.id.gridSizeTwo:
|
||||||
|
size = 2;
|
||||||
|
break;
|
||||||
|
case R.id.gridSizeThree:
|
||||||
|
size = 3;
|
||||||
|
break;
|
||||||
|
case R.id.gridSizeFour:
|
||||||
|
size = 4;
|
||||||
|
break;
|
||||||
|
case R.id.gridSizeFive:
|
||||||
|
size = 5;
|
||||||
|
break;
|
||||||
|
case R.id.gridSizeSix:
|
||||||
|
size = 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > 0) {
|
||||||
|
item.setChecked(true);
|
||||||
|
if (isAlbumPage()) {
|
||||||
|
getAlbumFragment().setColumns(size);
|
||||||
|
if (Util.isInPortraitMode(this)) {
|
||||||
|
PreferenceUtils.getInstance(this).setAlbumGridColumns(size);
|
||||||
|
} else {
|
||||||
|
PreferenceUtils.getInstance(this).setAlbumGridColumnsLand(size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.GestureDetector;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,12 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
|
||||||
|
|
||||||
import android.support.v7.widget.GridLayoutManager;
|
import android.support.v7.widget.GridLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
|
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
|
||||||
|
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||||
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by karim on 22.11.14.
|
* Created by karim on 22.11.14.
|
||||||
|
|
@ -12,6 +15,8 @@ import com.kabouzeid.gramophone.adapter.AlbumAdapter;
|
||||||
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
public static final String TAG = AlbumViewFragment.class.getSimpleName();
|
public static final String TAG = AlbumViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
private GridLayoutManager layoutManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getLayoutResId() {
|
protected int getLayoutResId() {
|
||||||
return R.layout.fragment_album_view;
|
return R.layout.fragment_album_view;
|
||||||
|
|
@ -19,11 +24,18 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.LayoutManager createLayoutManager() {
|
protected RecyclerView.LayoutManager createLayoutManager() {
|
||||||
return new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.grid_columns));
|
int columns = Util.isInPortraitMode(getActivity()) ? PreferenceUtils.getInstance(getActivity()).getAlbumGridColumns() : PreferenceUtils.getInstance(getActivity()).getAlbumGridColumnsLand();
|
||||||
|
layoutManager = new GridLayoutManager(getActivity(), columns);
|
||||||
|
return layoutManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter createAdapter() {
|
protected RecyclerView.Adapter createAdapter() {
|
||||||
return new AlbumAdapter(getActivity());
|
return new AlbumAdapter(getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setColumns(int columns) {
|
||||||
|
layoutManager.setSpanCount(columns);
|
||||||
|
layoutManager.requestLayout();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,58 +8,26 @@ import com.kabouzeid.gramophone.R;
|
||||||
|
|
||||||
public final class PreferenceUtils {
|
public final class PreferenceUtils {
|
||||||
|
|
||||||
/* Default start page (Album page) */
|
|
||||||
public static final int DEFAULT_PAGE = 1;
|
public static final int DEFAULT_PAGE = 1;
|
||||||
|
|
||||||
public static final String GENERAL_THEME = "general_theme";
|
public static final String GENERAL_THEME = "general_theme";
|
||||||
|
|
||||||
/* Saves the last page the pager was on in {@link MainActivity} */
|
|
||||||
public static final String DEFAULT_START_PAGE = "default_start_page";
|
public static final String DEFAULT_START_PAGE = "default_start_page";
|
||||||
|
|
||||||
/* Saves the last page the pager was on in {@link MainActivity} */
|
|
||||||
public static final String LAST_START_PAGE = "last_start_page";
|
public static final String LAST_START_PAGE = "last_start_page";
|
||||||
|
|
||||||
// Sort order for the artist list
|
|
||||||
public static final String ARTIST_SORT_ORDER = "artist_sort_order";
|
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";
|
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";
|
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";
|
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";
|
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";
|
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 = "auto_download_artist_images";
|
public static final String ONLY_ON_WIFI = "auto_download_artist_images";
|
||||||
|
|
||||||
// Key that gives permissions to download missing artist images
|
|
||||||
public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images";
|
public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images";
|
||||||
|
|
||||||
// Key used to en or disable palette
|
|
||||||
public static final String COLORED_ALBUM_FOOTERS = "colored_album_footers";
|
public static final String COLORED_ALBUM_FOOTERS = "colored_album_footers";
|
||||||
|
|
||||||
// Key used to en or disable the colored navigation bar
|
|
||||||
public static final String COLORED_NAVIGATION_BAR_ALBUM = "colored_navigation_bar_album";
|
public static final String COLORED_NAVIGATION_BAR_ALBUM = "colored_navigation_bar_album";
|
||||||
|
|
||||||
// Key used to en or disable the colored navigation bar
|
|
||||||
public static final String COLORED_NAVIGATION_BAR_ARTIST = "colored_navigation_bar_artist";
|
public static final String COLORED_NAVIGATION_BAR_ARTIST = "colored_navigation_bar_artist";
|
||||||
|
|
||||||
// Key used to en or disable the colored navigation bar
|
|
||||||
public static final String COLORED_NAVIGATION_BAR_CURRENT_PLAYING = "colored_navigation_bar_current_playing_enabled";
|
public static final String COLORED_NAVIGATION_BAR_CURRENT_PLAYING = "colored_navigation_bar_current_playing_enabled";
|
||||||
|
|
||||||
// Key used to en or disable the colored navigation bar
|
|
||||||
public static final String PLAYBACK_CONTROLLER_BOX = "playback_controller_card";
|
public static final String PLAYBACK_CONTROLLER_BOX = "playback_controller_card";
|
||||||
|
|
||||||
/* Saves the last page the pager was on in {@link MainActivity} */
|
|
||||||
public static final String TRANSPARENT_TOOLBAR = "transparent_toolbar";
|
public static final String TRANSPARENT_TOOLBAR = "transparent_toolbar";
|
||||||
|
public static final String ALBUM_GRID_COLUMNS = "album_grid_columns";
|
||||||
|
public static final String ALBUM_GRID_COLUMNS_LAND = "album_grid_columns_land";
|
||||||
|
|
||||||
private static PreferenceUtils sInstance;
|
private static PreferenceUtils sInstance;
|
||||||
|
|
||||||
|
|
@ -77,8 +45,8 @@ public final class PreferenceUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getGeneralTheme() {
|
public int getGeneralTheme() {
|
||||||
int value = Integer.parseInt(mPreferences.getString(GENERAL_THEME, "1"));
|
int value = Integer.parseInt(mPreferences.getString(GENERAL_THEME, "1"));
|
||||||
switch (value){
|
switch (value) {
|
||||||
case 0:
|
case 0:
|
||||||
return R.style.Theme_MaterialMusic_Light;
|
return R.style.Theme_MaterialMusic_Light;
|
||||||
case 1:
|
case 1:
|
||||||
|
|
@ -261,4 +229,24 @@ public final class PreferenceUtils {
|
||||||
public final String getSongSortOrder() {
|
public final String getSongSortOrder() {
|
||||||
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z);
|
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAlbumGridColumns(final int value) {
|
||||||
|
final SharedPreferences.Editor editor = mPreferences.edit();
|
||||||
|
editor.putInt(ALBUM_GRID_COLUMNS, value);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getAlbumGridColumns() {
|
||||||
|
return mPreferences.getInt(ALBUM_GRID_COLUMNS, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlbumGridColumnsLand(final int value) {
|
||||||
|
final SharedPreferences.Editor editor = mPreferences.edit();
|
||||||
|
editor.putInt(ALBUM_GRID_COLUMNS_LAND, value);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getAlbumGridColumnsLand() {
|
||||||
|
return mPreferences.getInt(ALBUM_GRID_COLUMNS_LAND, 3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,5 @@
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:dividerHeight="0px"
|
android:dividerHeight="0px"
|
||||||
android:divider="@null"
|
android:divider="@null"
|
||||||
android:numColumns="@integer/grid_columns"
|
|
||||||
android:scrollbars="vertical"/>
|
android:scrollbars="vertical"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
||||||
66
app/src/main/res/menu/menu_albums.xml
Normal file
66
app/src/main/res/menu/menu_albums.xml
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_current_playing"
|
||||||
|
android:icon="@drawable/ic_equalizer_white_24dp"
|
||||||
|
android:title="@string/action_current_playing"
|
||||||
|
app:showAsAction="always"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_search"
|
||||||
|
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
|
||||||
|
android:title="@string/action_search"
|
||||||
|
app:showAsAction="ifRoom"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle_all"
|
||||||
|
android:title="@string/shuffle_all"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_playing_queue"
|
||||||
|
android:title="@string/action_playing_queue"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_grid_columns"
|
||||||
|
android:title="@string/action_grid_columns">
|
||||||
|
<menu>
|
||||||
|
<group
|
||||||
|
android:id="@+id/gridSizeGroup"
|
||||||
|
android:checkableBehavior="single">
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeOne"
|
||||||
|
android:title="1"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeTwo"
|
||||||
|
android:title="2"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeThree"
|
||||||
|
android:title="3"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeFour"
|
||||||
|
android:title="4"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeFive"
|
||||||
|
android:title="5"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/gridSizeSix"
|
||||||
|
android:title="6"/>
|
||||||
|
</group>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_settings"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="@string/action_settings"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_about"
|
||||||
|
android:orderInCategory="101"
|
||||||
|
android:title="@string/action_about"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
</menu>
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<integer name="grid_columns">3</integer>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<integer name="grid_columns">6</integer>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<integer name="grid_columns">4</integer>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<integer name="grid_columns">2</integer>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<string name="inserted_titles_to_playlist_1">Inserted\u0020</string>
|
<string name="inserted_titles_to_playlist_1">Inserted\u0020</string>
|
||||||
<string name="inserted_titles_to_playlist_2">\u0020titles to playlist\u0020</string>
|
<string name="inserted_titles_to_playlist_2">\u0020titles to playlist\u0020</string>
|
||||||
<string name="action_new_playlist">New playlist</string>
|
<string name="action_new_playlist">New playlist</string>
|
||||||
|
<string name="action_grid_columns">Grid columns</string>
|
||||||
|
<string name="action_grid_columns_land">Grid columns (Land)</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancel</string>
|
||||||
<string name="created_playlist">Created playlist\u0020</string>
|
<string name="created_playlist">Created playlist\u0020</string>
|
||||||
<string name="deleted_playlist">Deleted playlist\u0020</string>
|
<string name="deleted_playlist">Deleted playlist\u0020</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue