diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java index 09514a52..89ce7f7d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java @@ -59,6 +59,9 @@ public class GenreAdapter extends RecyclerView.Adapter if (holder.title != null) { holder.title.setText(genre.name); } + if (holder.text != null) { + holder.text.setText(MusicUtil.getGenreInfoString(activity, genre)); + } } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java index 6477c399..932afa9c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/GenreLoader.java @@ -8,7 +8,6 @@ import android.provider.MediaStore.Audio.Genres; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Genre; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtil; @@ -24,27 +23,16 @@ public class GenreLoader { @NonNull public static ArrayList getSongs(@NonNull final Context context, final int genreId) { - // The genres table only stores songs that have a genre specified, - // so we need to get songs without a genre a different way. - if (genreId == -1) { - return getSongsWithNoGenre(context); - } - return SongLoader.getSongs(makeGenreSongCursor(context, genreId)); } @NonNull private static ArrayList getGenresFromCursor(@NonNull final Context context, @Nullable final Cursor cursor) { final ArrayList genres = new ArrayList<>(); - - if (hasSongsWithNoGenre(context)) { - genres.add(new Genre(context.getResources().getString(R.string.unknown_genre))); - } - if (cursor != null) { if (cursor.moveToFirst()) { do { - genres.add(getGenreFromCursor(cursor)); + genres.add(getGenreFromCursor(context, cursor)); } while (cursor.moveToNext()); } cursor.close(); @@ -53,10 +41,11 @@ public class GenreLoader { } @NonNull - private static Genre getGenreFromCursor(@NonNull final Cursor cursor) { + private static Genre getGenreFromCursor(@NonNull final Context context, @NonNull final Cursor cursor) { final int id = cursor.getInt(0); final String name = cursor.getString(1); - return new Genre(id, name); + final int songs = getSongs(context, id).size(); + return new Genre(id, name, songs); } @NonNull @@ -108,15 +97,11 @@ public class GenreLoader { Genres._ID, Genres.NAME }; - // Genres that actually have songs - final String selection = Genres._ID + " IN" + - " (SELECT " + Genres.Members.GENRE_ID + " FROM audio_genres_map WHERE " + Genres.Members.AUDIO_ID + " IN" + - " (SELECT " + Genres._ID + " FROM audio_meta WHERE " + SongLoader.BASE_SELECTION + "))"; try { return context.getContentResolver().query( Genres.EXTERNAL_CONTENT_URI, - projection, selection, null, PreferenceUtil.getInstance(context).getGenreSortOrder()); + projection, null, null, PreferenceUtil.getInstance(context).getGenreSortOrder()); } catch (SecurityException e) { return null; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Genre.java b/app/src/main/java/com/kabouzeid/gramophone/model/Genre.java index 10b177c1..b0b6c90c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Genre.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Genre.java @@ -6,16 +6,12 @@ import android.os.Parcelable; public class Genre implements Parcelable { public final int id; public final String name; + public final int songCount; - public Genre(final int id, final String name) { + public Genre(final int id, final String name, final int songCount) { this.id = id; this.name = name; - } - - // For unknown genre - public Genre(final String name) { - this.id = -1; - this.name = name; + this.songCount = songCount; } @Override @@ -26,13 +22,15 @@ public class Genre implements Parcelable { Genre genre = (Genre) o; if (id != genre.id) return false; - return name != null ? name.equals(genre.name) : genre.name == null; + if (!name.equals(genre.name)) return false; + return songCount == genre.songCount; } @Override public int hashCode() { int result = id; - result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + name.hashCode(); + result = 31 * result + songCount; return result; } @@ -41,6 +39,7 @@ public class Genre implements Parcelable { return "Genre{" + "id=" + id + ", name='" + name + '\'' + + ", songCount=" + songCount + '\'' + '}'; } @@ -53,11 +52,13 @@ public class Genre implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeString(this.name); + dest.writeInt(this.songCount); } protected Genre(Parcel in) { this.id = in.readInt(); this.name = in.readString(); + this.songCount = in.readInt(); } public static final Creator CREATOR = new Creator() { 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 608b4486..710284b3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -23,6 +23,7 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.loader.PlaylistLoader; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.Artist; +import com.kabouzeid.gramophone.model.Genre; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.lyrics.AbsSynchronizedLyrics; @@ -114,6 +115,13 @@ public class MusicUtil { return albumCount + " " + albumString + " • " + songCount + " " + songString; } + @NonNull + public static String getGenreInfoString(@NonNull final Context context, @NonNull final Genre genre) { + int songCount = genre.songCount; + String songString = songCount == 1 ? context.getResources().getString(R.string.song) : context.getResources().getString(R.string.songs); + return songCount + " " + songString; + } + @NonNull public static String getPlaylistInfoString(@NonNull final Context context, @NonNull List songs) { final int songCount = songs.size(); diff --git a/app/src/main/res/layout/item_list_simple.xml b/app/src/main/res/layout/item_list_simple.xml index 68d972de..237a9d86 100644 --- a/app/src/main/res/layout/item_list_simple.xml +++ b/app/src/main/res/layout/item_list_simple.xml @@ -6,18 +6,34 @@ android:foreground="?attr/rectSelector" tools:ignore="UnusedAttribute"> - + android:paddingEnd="16dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingStart="16dp" + android:orientation="vertical"> + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 627d371b..0a05e391 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,7 +42,6 @@ Album Artist Genre - Unknown genre Album artist Year "Track (2 for track 2 or 3004 for CD3 track 4)"