diff --git a/app/build.gradle b/app/build.gradle index f43cd5a47..cfe2f3f61 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,8 +32,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 292 - versionName '3.1.100' + versionCode 295 + versionName '3.1.200' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 6f7edf820..4fc520a8a 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

Subscribe to PewDiePie 👊

v3.1.100

v3.0.570

If you see entire app white or dark or black select same theme in settings to fix

FAQ's

*If you face any UI related issues you clear app data and cache, if its not working try to uninstall and install again.

\ No newline at end of file +

Subscribe to PewDiePie 👊

v3.1.230

v3.1.200

v3.0.570

If you see entire app white or dark or black select same theme in settings to fix

FAQ's

*If you face any UI related issues you clear app data and cache, if its not working try to uninstall and install again.

\ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index ec6742abd..4329fea26 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -81,6 +81,7 @@ object Constants { val CAST_SERVER_PORT = 8080 const val BASE_SELECTION = MediaStore.Audio.AudioColumns.IS_MUSIC + "=1" + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + @JvmField val BASE_PROJECTION = arrayOf(BaseColumns._ID, // 0 MediaStore.Audio.AudioColumns.TITLE, // 1 @@ -92,7 +93,8 @@ object Constants { MediaStore.Audio.AudioColumns.ALBUM_ID, // 7 MediaStore.Audio.AudioColumns.ALBUM, // 8 MediaStore.Audio.AudioColumns.ARTIST_ID, // 9 - MediaStore.Audio.AudioColumns.ARTIST)// 10 + MediaStore.Audio.AudioColumns.ARTIST,// 10 + MediaStore.Audio.AudioColumns.COMPOSER)// 11 const val NUMBER_OF_TOP_TRACKS = 99 diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt new file mode 100644 index 000000000..86b612318 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -0,0 +1,22 @@ +package code.name.monkey.retromusic.extensions + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.annotation.LayoutRes + + +@Suppress("UNCHECKED_CAST") +fun ViewGroup.inflate(@LayoutRes layout: Int): T { + return LayoutInflater.from(context).inflate(layout, this, false) as T +} + +fun View.show() { + visibility = View.VISIBLE +} + +fun View.hide() { + visibility = View.GONE +} + +fun View.showOrHide(show: Boolean) = if (show) show() else hide() \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java index 338ed471e..7d0226edf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java @@ -1,7 +1,5 @@ package code.name.monkey.retromusic.glide; -import androidx.annotation.NonNull; - import com.bumptech.glide.GenericTransitionOptions; import com.bumptech.glide.Priority; import com.bumptech.glide.RequestBuilder; @@ -10,11 +8,11 @@ import com.bumptech.glide.annotation.GlideOption; import com.bumptech.glide.annotation.GlideType; import com.bumptech.glide.load.Key; import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.signature.MediaStoreSignature; +import androidx.annotation.NonNull; import code.name.monkey.retromusic.App; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.glide.artistimage.ArtistImage; diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt index e79a290f2..44baba09e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt @@ -92,6 +92,9 @@ class SortOrder { /* Song sort order date */ const val SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC" + + /* Song sort order composer*/ + const val COMPOSER = MediaStore.Audio.Media.COMPOSER } } diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/PlaylistSongsLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/PlaylistSongsLoader.kt index 9c69ffebd..e0b9a8027 100644 --- a/app/src/main/java/code/name/monkey/retromusic/loaders/PlaylistSongsLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/loaders/PlaylistSongsLoader.kt @@ -56,8 +56,9 @@ object PlaylistSongsLoader { val artistId = cursor.getInt(9) val artistName = cursor.getString(10) val idInPlaylist = cursor.getInt(11) + val composer = cursor.getString(12) - return PlaylistSong(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, playlistId, idInPlaylist) + return PlaylistSong(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, playlistId, idInPlaylist, composer) } private fun makePlaylistSongCursor(@NonNull context: Context, playlistId: Int): Cursor? { @@ -75,7 +76,8 @@ object PlaylistSongsLoader { AudioColumns.ALBUM, // 8 AudioColumns.ARTIST_ID, // 9 AudioColumns.ARTIST, // 10 - MediaStore.Audio.Playlists.Members._ID)// 11 + MediaStore.Audio.Playlists.Members._ID,//11 + AudioColumns.COMPOSER)// 12 , BASE_SELECTION, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER) } catch (e: SecurityException) { diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt index 346512320..3ea3ba717 100644 --- a/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt @@ -57,10 +57,10 @@ object SongLoader { val albumName = cursor.getString(8) val artistId = cursor.getInt(9) val artistName = cursor.getString(10) + val composer = cursor.getString(11) - return Song(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName - ?: "", - artistId, artistName) + return Song(id, title, trackNumber, year, duration, data, dateModified, albumId, + albumName ?: "", artistId, artistName, composer ?: "") } @JvmOverloads diff --git a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.java b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.java index c44f1f6ac..d603c684d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.java +++ b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.java @@ -3,17 +3,30 @@ package code.name.monkey.retromusic.model; import android.os.Parcel; public class PlaylistSong extends Song { - public static PlaylistSong EMPTY_PLAYLIST_SONG = new PlaylistSong(-1, "", -1, -1, -1, "", -1, -1, "", -1, "", -1, -1); + public static final Creator CREATOR = new Creator() { + public PlaylistSong createFromParcel(Parcel source) { + return new PlaylistSong(source); + } + public PlaylistSong[] newArray(int size) { + return new PlaylistSong[size]; + } + }; public final int playlistId; public final int idInPlayList; - public PlaylistSong(int id, String title, int trackNumber, int year, long duration, String data, int dateModified, int albumId, String albumName, int artistId, String artistName, final int playlistId, final int idInPlayList) { - super(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName); + public PlaylistSong(int id, String title, int trackNumber, int year, long duration, String data, int dateModified, int albumId, String albumName, int artistId, String artistName, final int playlistId, final int idInPlayList, String composer) { + super(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, composer); this.playlistId = playlistId; this.idInPlayList = idInPlayList; } + protected PlaylistSong(Parcel in) { + super(in); + this.playlistId = in.readInt(); + this.idInPlayList = in.readInt(); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -44,7 +57,6 @@ public class PlaylistSong extends Song { '}'; } - @Override public int describeContents() { return 0; @@ -56,20 +68,4 @@ public class PlaylistSong extends Song { dest.writeInt(this.playlistId); dest.writeInt(this.idInPlayList); } - - protected PlaylistSong(Parcel in) { - super(in); - this.playlistId = in.readInt(); - this.idInPlayList = in.readInt(); - } - - public static final Creator CREATOR = new Creator() { - public PlaylistSong createFromParcel(Parcel source) { - return new PlaylistSong(source); - } - - public PlaylistSong[] newArray(int size) { - return new PlaylistSong[size]; - } - }; } diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Song.java b/app/src/main/java/code/name/monkey/retromusic/model/Song.java index 05e33a237..186fb9d2d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Song.java +++ b/app/src/main/java/code/name/monkey/retromusic/model/Song.java @@ -7,8 +7,16 @@ import android.os.Parcelable; * @author Karim Abou Zeid (kabouzeid) */ public class Song implements Parcelable { - public static final Song EMPTY_SONG = new Song(-1, "", -1, -1, -1, "", -1, -1, "", -1, ""); + public static final Song EMPTY_SONG = new Song(-1, "", -1, -1, -1, "", -1, -1, "", -1, "", ""); + public static final Creator CREATOR = new Creator() { + public Song createFromParcel(Parcel source) { + return new Song(source); + } + public Song[] newArray(int size) { + return new Song[size]; + } + }; public final int id; public final String title; public final int trackNumber; @@ -20,8 +28,9 @@ public class Song implements Parcelable { public final String albumName; public final int artistId; public final String artistName; + public final String composer; - public Song(int id, String title, int trackNumber, int year, long duration, String data, long dateModified, int albumId, String albumName, int artistId, String artistName) { + public Song(int id, String title, int trackNumber, int year, long duration, String data, long dateModified, int albumId, String albumName, int artistId, String artistName, String composer) { this.id = id; this.title = title; this.trackNumber = trackNumber; @@ -33,61 +42,22 @@ public class Song implements Parcelable { this.albumName = albumName; this.artistId = artistId; this.artistName = artistName; + this.composer = composer; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Song song = (Song) o; - - if (id != song.id) return false; - if (trackNumber != song.trackNumber) return false; - if (year != song.year) return false; - if (duration != song.duration) return false; - if (dateModified != song.dateModified) return false; - if (albumId != song.albumId) return false; - if (artistId != song.artistId) return false; - if (title != null ? !title.equals(song.title) : song.title != null) return false; - if (data != null ? !data.equals(song.data) : song.data != null) return false; - if (albumName != null ? !albumName.equals(song.albumName) : song.albumName != null) - return false; - return artistName != null ? artistName.equals(song.artistName) : song.artistName == null; - - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (title != null ? title.hashCode() : 0); - result = 31 * result + trackNumber; - result = 31 * result + year; - result = 31 * result + (int) (duration ^ (duration >>> 32)); - result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (int) (dateModified ^ (dateModified >>> 32)); - result = 31 * result + albumId; - result = 31 * result + (albumName != null ? albumName.hashCode() : 0); - result = 31 * result + artistId; - result = 31 * result + (artistName != null ? artistName.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Song{" + - "id=" + id + - ", title='" + title + '\'' + - ", trackNumber=" + trackNumber + - ", year=" + year + - ", duration=" + duration + - ", data='" + data + '\'' + - ", dateModified=" + dateModified + - ", albumId=" + albumId + - ", albumName='" + albumName + '\'' + - ", artistId=" + artistId + - ", artistName='" + artistName + '\'' + - '}'; + protected Song(Parcel in) { + this.id = in.readInt(); + this.title = in.readString(); + this.trackNumber = in.readInt(); + this.year = in.readInt(); + this.duration = in.readLong(); + this.data = in.readString(); + this.dateModified = in.readLong(); + this.albumId = in.readInt(); + this.albumName = in.readString(); + this.artistId = in.readInt(); + this.artistName = in.readString(); + this.composer = in.readString(); } @@ -109,29 +79,6 @@ public class Song implements Parcelable { dest.writeString(this.albumName); dest.writeInt(this.artistId); dest.writeString(this.artistName); + dest.writeString(this.composer); } - - protected Song(Parcel in) { - this.id = in.readInt(); - this.title = in.readString(); - this.trackNumber = in.readInt(); - this.year = in.readInt(); - this.duration = in.readLong(); - this.data = in.readString(); - this.dateModified = in.readLong(); - this.albumId = in.readInt(); - this.albumName = in.readString(); - this.artistId = in.readInt(); - this.artistName = in.readString(); - } - - public static final Creator CREATOR = new Creator() { - public Song createFromParcel(Parcel source) { - return new Song(source); - } - - public Song[] newArray(int size) { - return new Song[size]; - } - }; } diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java index 1e7c652f8..36c055f8c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java @@ -41,7 +41,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { public static final String DATABASE_NAME = "music_playback_state.db"; public static final String PLAYING_QUEUE_TABLE_NAME = "playing_queue"; public static final String ORIGINAL_PLAYING_QUEUE_TABLE_NAME = "original_playing_queue"; - private static final int VERSION = 5; + private static final int VERSION = 7; @Nullable private static MusicPlaybackQueueStore sInstance = null; @@ -50,7 +50,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { * * @param context The {@link Context} to use */ - public MusicPlaybackQueueStore(final Context context) { + public MusicPlaybackQueueStore(final @NonNull Context context) { super(context, DATABASE_NAME, null, VERSION); } @@ -110,6 +110,9 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { builder.append(" INT NOT NULL,"); builder.append(AudioColumns.ARTIST); + builder.append(" STRING NOT NULL,"); + + builder.append(AudioColumns.COMPOSER); builder.append(" STRING NOT NULL);"); db.execSQL(builder.toString()); @@ -173,6 +176,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { values.put(AudioColumns.ALBUM, song.albumName); values.put(AudioColumns.ARTIST_ID, song.artistId); values.put(AudioColumns.ARTIST, song.artistName); + values.put(AudioColumns.COMPOSER, song.composer); database.insert(tableName, null, values); } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt index 741556977..36236f32a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt @@ -192,7 +192,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding NowPlayingScreen.SIMPLE -> SimplePlayerFragment() NowPlayingScreen.MATERIAL -> MaterialFragment() NowPlayingScreen.COLOR -> ColorFragment() - NowPlayingScreen.CLASSIC -> ClassicPlayerFragment() + //NowPlayingScreen.CLASSIC -> ClassicPlayerFragment() else -> PlayerFragment() } // must implement AbsPlayerFragment supportFragmentManager.beginTransaction().replace(R.id.playerFragmentContainer, fragment).commit() @@ -260,7 +260,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding super.setLightNavigationBar(true) super.setLightStatusbar(isColorLight) } else if (currentNowPlayingScreen == NowPlayingScreen.FULL || currentNowPlayingScreen == NowPlayingScreen.CARD || - currentNowPlayingScreen == NowPlayingScreen.FIT || currentNowPlayingScreen == NowPlayingScreen.CLASSIC || + currentNowPlayingScreen == NowPlayingScreen.FIT || /*currentNowPlayingScreen == NowPlayingScreen.CLASSIC ||*/ currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) { super.setLightStatusbar(false) super.setLightNavigationBar(true) diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.kt index 0a8208c52..2465420b9 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.kt @@ -67,6 +67,15 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { } } + protected val composer: String? + get() { + return try { + getAudioFile(songPaths!![0]).tagOrCreateAndSetDefault.getFirst(FieldKey.COMPOSER) + } catch (ignored: Exception) { + null + } + + } protected val albumTitle: String? get() { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt index f16aa2730..d7504337b 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt @@ -51,6 +51,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { yearText.addTextChangedListener(this) trackNumberText.addTextChangedListener(this) lyricsText.addTextChangedListener(this) + songComposerText.addTextChangedListener(this) } private fun fillViewsWithFileTags() { @@ -62,6 +63,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { yearText.setText(songYear) trackNumberText.setText(trackNumber) lyricsText.setText(lyrics) + songComposerText.setText(composer) } override fun loadCurrentImage() { @@ -90,6 +92,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { fieldKeyValueMap[FieldKey.TRACK] = trackNumberText.text.toString() fieldKeyValueMap[FieldKey.LYRICS] = lyricsText.text.toString() fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = albumArtistText.text.toString() + fieldKeyValueMap[FieldKey.COMPOSER] = songComposerText.text.toString() writeValuesToFiles(fieldKeyValueMap, null) } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/base/AbsMultiSelectAdapter.java b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/base/AbsMultiSelectAdapter.java index d557916f0..6718654ec 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/base/AbsMultiSelectAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/base/AbsMultiSelectAdapter.java @@ -2,6 +2,7 @@ package code.name.monkey.retromusic.ui.adapter.base; import android.content.Context; import androidx.annotation.MenuRes; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import android.view.Menu; @@ -23,7 +24,7 @@ public abstract class AbsMultiSelectAdapter checked; private int menuRes; - public AbsMultiSelectAdapter(Context context, @Nullable CabHolder cabHolder, @MenuRes int menuRes) { + public AbsMultiSelectAdapter(@NonNull Context context, @Nullable CabHolder cabHolder, @MenuRes int menuRes) { this.cabHolder = cabHolder; checked = new ArrayList<>(); this.menuRes = menuRes; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt index 84ed51606..a84eea0c3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt @@ -14,13 +14,13 @@ enum class NowPlayingScreen constructor(@param:StringRes @field:StringRes BLUR_CARD(R.string.blur_card, R.drawable.np_blur_card, 9), CARD(R.string.card, R.drawable.np_card, 6), COLOR(R.string.color, R.drawable.np_color, 5), - FIT(R.string.fit, R.drawable.np_adaptive, 12), + FIT(R.string.fit, R.drawable.np_fit, 12), FLAT(R.string.flat, R.drawable.np_flat, 1), FULL(R.string.full, R.drawable.np_full, 2), MATERIAL(R.string.material, R.drawable.np_material, 11), NORMAL(R.string.normal, R.drawable.np_normal, 0), PLAIN(R.string.plain, R.drawable.np_plain, 3), - CLASSIC(R.string.classic, R.drawable.np_normal, 7), + //CLASSIC(R.string.classic, R.drawable.np_normal, 7), SIMPLE(R.string.simple, R.drawable.np_simple, 8) } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt index 307f544cb..67c6d3938 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt @@ -107,9 +107,8 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum } - fun setTintable(color: Int) { - TintHelper.setTintAuto(volumeSeekBar, color, false) + TintHelper.setTintAuto(volumeSeekBar, color, true) } fun removeThumb() { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsPlayerFragment.kt index 78ae3e6d4..fbb9aeec9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsPlayerFragment.kt @@ -194,7 +194,7 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(), Toolbar.OnMenuItem else code.name.monkey.retromusic.R.drawable.ic_favorite_border_white_24dp val drawable = RetroUtil.getTintedVectorDrawable(activity, res, toolbarIconColor()) - toolbarGet().menu.findItem(R.id.action_toggle_favorite).setIcon(drawable).title = if (isFavorite) getString(R.string.action_remove_from_favorites) else getString(R.string.action_add_to_favorites) + toolbarGet().menu.findItem(R.id.action_toggle_favorite)?.setIcon(drawable)?.title = if (isFavorite) getString(R.string.action_remove_from_favorites) else getString(R.string.action_add_to_favorites) } } }.execute(MusicPlayerRemote.currentSong) diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java index bd5a9f0dc..9309c3594 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java @@ -44,7 +44,6 @@ import code.name.monkey.retromusic.loaders.SongLoader; import code.name.monkey.retromusic.ui.activities.SettingsActivity; import code.name.monkey.retromusic.ui.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment; import code.name.monkey.retromusic.ui.fragments.base.AbsMainActivityFragment; -import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFragment; import code.name.monkey.retromusic.util.Compressor; import code.name.monkey.retromusic.util.NavigationUtil; import code.name.monkey.retromusic.util.PreferenceUtil; @@ -69,13 +68,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private MaterialCab cab; private FragmentManager fragmentManager; private ImageView userImage; - private CompositeDisposable disposable ; - - @Override - public void onDestroyView() { - super.onDestroyView(); - disposable.dispose(); - } + private CompositeDisposable disposable; public static Fragment newInstance(int tab) { Bundle args = new Bundle(); @@ -89,6 +82,12 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return new LibraryFragment(); } + @Override + public void onDestroyView() { + super.onDestroyView(); + disposable.dispose(); + } + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @@ -295,9 +294,10 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde .setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_ALBUM)); sortOrderMenu.add(0, R.id.action_song_sort_order_year, 4, R.string.sort_order_year) .setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_YEAR)); - sortOrderMenu.add(0, R.id.action_song_sort_order_date, 4, R.string.sort_order_date) + sortOrderMenu.add(0, R.id.action_song_sort_order_date, 5, R.string.sort_order_date) .setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_DATE)); - + sortOrderMenu.add(0, R.id.action_song_sort_order_composer, 6, R.string.sort_order_composer) + .setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.COMPOSER)); } sortOrderMenu.setGroupCheckable(0, true, true); @@ -351,6 +351,9 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde case R.id.action_song_sort_order_date: sortOrder = SortOrder.SongSortOrder.SONG_DATE; break; + case R.id.action_song_sort_order_composer: + sortOrder = SortOrder.SongSortOrder.COMPOSER; + break; } } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt index 047b2bf87..497893399 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt @@ -173,7 +173,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private fun setupToolbar() { toolbar.navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_search_white_24dp), ThemeStore.textColorSecondary(context!!)) mainActivity.title = null - mainActivity.setSupportActionBar(toolbar) toolbar.setBackgroundColor(Color.TRANSPARENT) } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/blur/BlurPlaybackControlsFragment.kt index 95ed2a354..0fb2c5924 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/blur/BlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/blur/BlurPlaybackControlsFragment.kt @@ -27,7 +27,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.ViewUtil import kotlinx.android.synthetic.main.fragment_player_playback_controls.* import kotlinx.android.synthetic.main.media_button.* -import kotlinx.android.synthetic.main.player_time.* class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorPlaybackControlsFragment.kt index ba75e2f65..9e15c50fc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorPlaybackControlsFragment.kt @@ -25,7 +25,6 @@ import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.util.MusicUtil import kotlinx.android.synthetic.main.fragment_player_playback_controls.* import kotlinx.android.synthetic.main.media_button.* -import kotlinx.android.synthetic.main.player_time.* class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt index e836ee960..6ff2f6a85 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt @@ -27,7 +27,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.android.synthetic.main.fragment_player_playback_controls.* import kotlinx.android.synthetic.main.media_button.* -import kotlinx.android.synthetic.main.player_time.* class FitPlaybackControlsFragment : AbsPlayerControlsFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt index a32921739..b0c507700 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt @@ -27,7 +27,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import kotlinx.android.synthetic.main.fragment_flat_player_playback_controls.* -import kotlinx.android.synthetic.main.player_time.* class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.kt index 83908bb59..5e0bb6c3e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.kt @@ -1,22 +1,32 @@ package code.name.monkey.retromusic.ui.fragments.player.full import android.animation.ObjectAnimator +import android.annotation.SuppressLint +import android.app.AlertDialog +import android.content.res.ColorStateList import android.graphics.Color import android.graphics.PorterDuff +import android.os.AsyncTask import android.os.Bundle import android.view.LayoutInflater +import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator import android.view.animation.LinearInterpolator +import android.widget.PopupMenu import android.widget.SeekBar import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener +import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.ui.fragments.VolumeFragment import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment @@ -24,13 +34,12 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import kotlinx.android.synthetic.main.fragment_full_player_controls.* -import kotlinx.android.synthetic.main.player_time.* /** * Created by hemanths on 20/09/17. */ -class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { +class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), PopupMenu.OnMenuItemClickListener { private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 @@ -107,7 +116,11 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { } else { ThemeStore.accentColor(context!!) } - setProgressBarColor(colorFinal) + text.setTextColor(colorFinal) + ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) + + playPauseButton.backgroundTintList = ColorStateList.valueOf(colorFinal) + playPauseButton.imageTintList = ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal))) updateRepeatState() updateShuffleState() @@ -115,10 +128,6 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { } - private fun setProgressBarColor(dark: Int) { - ViewUtil.setProgressDrawable(progressSlider, dark) - } - override fun onServiceConnected() { updatePlayPauseDrawableState() updateRepeatState() @@ -130,6 +139,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { val song = MusicPlayerRemote.currentSong title.text = song.title text.text = song.artistName + updateIsFavorite() } override fun onPlayingMetaChanged() { @@ -166,6 +176,21 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { setUpRepeatButton() setUpShuffleButton() setUpProgressSlider() + setupFavourite() + setupMenu() + } + + private fun setupMenu() { + playerMenu.setOnClickListener { + val popupMenu = PopupMenu(context!!, it) + popupMenu.setOnMenuItemClickListener(this) + popupMenu.inflate(R.menu.menu_player) + popupMenu.show() + } + } + + override fun onMenuItemClick(item: MenuItem?): Boolean { + return (parentFragment as FullPlayerFragment).onMenuItemClick(item!!) } private fun setUpPrevNext() { @@ -231,4 +256,55 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() { } } } + + private fun setupFavourite() { + songFavourite?.setOnClickListener { + toggleFavorite(MusicPlayerRemote.currentSong) + } + } + + private fun toggleFavorite(song: Song) { + MusicUtil.toggleFavorite(activity!!, song) + if (song.id == MusicPlayerRemote.currentSong.id) { + updateIsFavorite() + } + } + + private var updateIsFavoriteTask: AsyncTask<*, *, *>? = null + + @SuppressLint("StaticFieldLeak") + fun updateIsFavorite() { + if (updateIsFavoriteTask != null) { + updateIsFavoriteTask!!.cancel(false) + } + updateIsFavoriteTask = object : AsyncTask() { + override fun doInBackground(vararg params: Song): Boolean? { + val activity = activity + return if (activity != null) { + MusicUtil.isFavorite(getActivity()!!, params[0]) + } else { + cancel(false) + null + } + } + + override fun onPostExecute(isFavorite: Boolean?) { + val activity = activity + if (activity != null) { + val res = if (isFavorite!!) + R.drawable.ic_favorite_white_24dp + else + R.drawable.ic_favorite_border_white_24dp + + val drawable = TintHelper.createTintedDrawable(activity, res, Color.WHITE) + songFavourite?.setImageDrawable(drawable) + } + } + }.execute(MusicPlayerRemote.currentSong) + } + + fun onFavoriteToggled() { + toggleFavorite(MusicPlayerRemote.currentSong) + } + } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlayerFragment.kt index d76f41fce..8d1c182b1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlayerFragment.kt @@ -8,10 +8,20 @@ import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.hide +import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension +import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.loaders.ArtistLoader import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.PlayerAlbumCoverFragment +import code.name.monkey.retromusic.util.NavigationUtil +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.fragment_full.* class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks { @@ -26,10 +36,8 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac private fun setUpPlayerToolbar() { playerToolbar.apply { - inflateMenu(R.menu.menu_player) setNavigationIcon(R.drawable.ic_close_white_24dp) setNavigationOnClickListener { activity!!.onBackPressed() } - setOnMenuItemClickListener(this@FullPlayerFragment) } } @@ -42,6 +50,13 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac super.onViewCreated(view, savedInstanceState) setUpSubFragments() setUpPlayerToolbar() + setupArtist() + } + + private fun setupArtist() { + artistImage.setOnClickListener { + NavigationUtil.goToArtist(activity!!, MusicPlayerRemote.currentSong.artistId) + } } private fun setUpSubFragments() { @@ -77,6 +92,7 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac override fun onFavoriteToggled() { toggleFavorite(MusicPlayerRemote.currentSong) + fullPlaybackControlsFragment.onFavoriteToggled() } override fun toggleFavorite(song: Song) { @@ -85,4 +101,64 @@ class FullPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac updateIsFavorite() } } + + override fun onServiceConnected() { + super.onServiceConnected() + updateArtistImage() + updateLabel() + } + + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + updateArtistImage() + updateLabel() + } + + override fun onDestroyView() { + super.onDestroyView() + compositeDisposable.dispose() + } + + private val compositeDisposable = CompositeDisposable() + + private fun updateArtistImage() { + compositeDisposable.addAll(ArtistLoader.getArtist(context!!, MusicPlayerRemote.currentSong.artistId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + GlideApp.with(activity!!) + .asBitmapPalette() + .load(RetroGlideExtension.getArtistModel(it)) + .transition(RetroGlideExtension.getDefaultTransition()) + .artistOptions(it) + .dontAnimate() + .into(object : RetroMusicColoredTarget(artistImage) { + override fun onColorReady(color: Int) { + + } + }) + }) + } + + override fun onQueueChanged() { + super.onQueueChanged() + if (MusicPlayerRemote.playingQueue.isNotEmpty()) updateLabel() + } + + private fun updateLabel() { + (MusicPlayerRemote.playingQueue.size - 1).apply { + println("Log Position $this ${MusicPlayerRemote.position}") + if (this == (MusicPlayerRemote.position)) { + nextSongLabel.setText(R.string.last_song) + nextSong.hide() + } else { + val title = MusicPlayerRemote.playingQueue[MusicPlayerRemote.position + 1].title + nextSongLabel.setText(R.string.next_song) + nextSong.apply { + text = title + show() + } + } + } + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt index 92f513808..d40c98c14 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt @@ -24,7 +24,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import kotlinx.android.synthetic.main.fragment_material_playback_controls.* -import kotlinx.android.synthetic.main.player_time.* /** * @author Hemanth S (h4h13). @@ -114,6 +113,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { } text.setTextColor(colorFinal) ViewUtil.setProgressDrawable(progressSlider, ColorUtil.stripAlpha(colorFinal), true) + volumeFragment.setTintable(colorFinal) updatePlayPauseColor() diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt index 85ad5fb92..d58d9eecd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt @@ -76,18 +76,19 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks { } - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { - val display = activity?.windowManager?.defaultDisplay - val outMetrics = DisplayMetrics() - display?.getMetrics(outMetrics) + val display = activity?.windowManager?.defaultDisplay + val outMetrics = DisplayMetrics() + display?.getMetrics(outMetrics) - val density = resources.displayMetrics.density - val dpHeight = outMetrics.heightPixels / density - val dpWidth = outMetrics.widthPixels / density + val density = resources.displayMetrics.density + val dpHeight = outMetrics.heightPixels / density + val dpWidth = outMetrics.widthPixels / density - playerAlbumCoverContainer?.layoutParams?.width = RetroUtil.convertDpToPixel(dpWidth - 20, context!!).toInt() - } + playerAlbumCoverContainer?.layoutParams?.height = RetroUtil.convertDpToPixel((dpWidth - getCutOff()), context!!).toInt() + } + private fun getCutOff(): Int { + return if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) 20 else 0 } override fun toggleFavorite(song: Song) { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerPlaybackControlsFragment.kt index fe620d52b..eab3babd6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerPlaybackControlsFragment.kt @@ -27,7 +27,6 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import kotlinx.android.synthetic.main.fragment_player_playback_controls.* import kotlinx.android.synthetic.main.media_button.* -import kotlinx.android.synthetic.main.player_time.* class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { @@ -79,11 +78,14 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { ThemeStore.accentColor(context!!) } - volumeFragment.setTintable(colorFinal) + TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(colorFinal)), false) TintHelper.setTintAuto(playPauseButton, colorFinal, true) ViewUtil.setProgressDrawable(progressSlider, colorFinal) + volumeFragment.setTintable(colorFinal) + + updateRepeatState() updateShuffleState() updatePrevNextColor() diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java index 74736484f..1ee837206 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java @@ -12,7 +12,6 @@ import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityOptionsCompat; import androidx.core.util.Pair; - import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.model.Genre; @@ -57,6 +56,14 @@ public class NavigationUtil { ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } + public static void goToArtist(@NonNull Activity activity, int i) { + Intent intent = new Intent(activity, ArtistDetailActivity.class); + intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, i); + //noinspection unchecked + ActivityCompat.startActivity(activity, intent, + ActivityOptionsCompat.makeSceneTransitionAnimation(activity, null).toBundle()); + } + public static void goToPlaylistNew(@NonNull Activity activity, Playlist playlist) { Intent intent = new Intent(activity, PlaylistDetailActivity.class); intent.putExtra(PlaylistDetailActivity.Companion.getEXTRA_PLAYLIST(), playlist); diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt index 532ef480f..5781c63f9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt @@ -40,7 +40,7 @@ class ColorIconsImageView : AppCompatImageView { 0.12f } val filterColor = if (ATHUtil.isWindowBackgroundDark(context)) { - ThemeStore.textColorPrimary(context) + ThemeStore.primaryColor(context) } else { color } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java b/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java index 07e967cec..548a7b33a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/RoundedBottomSheetDialogFragment.java @@ -56,7 +56,7 @@ public class RoundedBottomSheetDialogFragment extends AppCompatDialogFragment { @NonNull @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { + public Dialog onCreateDialog(@NonNull Bundle savedInstanceState) { //noinspection ConstantConditions return new CustomWidthBottomSheetDialog(getContext(), getTheme()); } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java index 05e83dd84..00508ebea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java @@ -6,23 +6,26 @@ import android.util.AttributeSet; import android.view.WindowInsets; import android.widget.FrameLayout; +import androidx.annotation.NonNull; + public class StatusBarMarginFrameLayout extends FrameLayout { - public StatusBarMarginFrameLayout(Context context) { + public StatusBarMarginFrameLayout(@NonNull Context context) { super(context); } - public StatusBarMarginFrameLayout(Context context, AttributeSet attrs) { + public StatusBarMarginFrameLayout(@NonNull Context context, @NonNull AttributeSet attrs) { super(context, attrs); } - public StatusBarMarginFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { + public StatusBarMarginFrameLayout(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } + @NonNull @Override - public WindowInsets onApplyWindowInsets(WindowInsets insets) { + public WindowInsets onApplyWindowInsets(@NonNull WindowInsets insets) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); lp.topMargin = insets.getSystemWindowInsetTop(); diff --git a/app/src/main/res/drawable-xxxhdpi/np_adaptive.png b/app/src/main/res/drawable-xxxhdpi/np_adaptive.png new file mode 100644 index 000000000..774bb5ca2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_adaptive.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_adaptive.webp b/app/src/main/res/drawable-xxxhdpi/np_adaptive.webp deleted file mode 100644 index 4cd9c432c..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_adaptive.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_blur.png b/app/src/main/res/drawable-xxxhdpi/np_blur.png new file mode 100644 index 000000000..1a1be0503 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_blur.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_blur.webp b/app/src/main/res/drawable-xxxhdpi/np_blur.webp deleted file mode 100644 index 5baaa5e4c..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_blur.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_blur_card.png b/app/src/main/res/drawable-xxxhdpi/np_blur_card.png new file mode 100644 index 000000000..50977cfa4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_blur_card.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_blur_card.webp b/app/src/main/res/drawable-xxxhdpi/np_blur_card.webp deleted file mode 100644 index 876064dfb..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_blur_card.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_card.png b/app/src/main/res/drawable-xxxhdpi/np_card.png new file mode 100644 index 000000000..2ca270628 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_card.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_card.webp b/app/src/main/res/drawable-xxxhdpi/np_card.webp deleted file mode 100644 index a55044c54..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_card.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_color.png b/app/src/main/res/drawable-xxxhdpi/np_color.png new file mode 100644 index 000000000..409ed46b0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_color.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_color.webp b/app/src/main/res/drawable-xxxhdpi/np_color.webp deleted file mode 100644 index c662015c0..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_color.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_fit.png b/app/src/main/res/drawable-xxxhdpi/np_fit.png new file mode 100644 index 000000000..2d3470f63 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_fit.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_flat.png b/app/src/main/res/drawable-xxxhdpi/np_flat.png new file mode 100644 index 000000000..7f6a1b47b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_flat.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_flat.webp b/app/src/main/res/drawable-xxxhdpi/np_flat.webp deleted file mode 100644 index f479144b6..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_flat.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_full.png b/app/src/main/res/drawable-xxxhdpi/np_full.png new file mode 100644 index 000000000..3e5171693 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_full.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_full.webp b/app/src/main/res/drawable-xxxhdpi/np_full.webp deleted file mode 100644 index 96f66d300..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_full.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_material.png b/app/src/main/res/drawable-xxxhdpi/np_material.png new file mode 100644 index 000000000..03f50f8c9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_material.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_material.webp b/app/src/main/res/drawable-xxxhdpi/np_material.webp deleted file mode 100644 index e2006f78d..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_material.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_normal.png b/app/src/main/res/drawable-xxxhdpi/np_normal.png new file mode 100644 index 000000000..0b4c0a93a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_normal.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_normal.webp b/app/src/main/res/drawable-xxxhdpi/np_normal.webp deleted file mode 100644 index e943b35cd..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_normal.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_plain.png b/app/src/main/res/drawable-xxxhdpi/np_plain.png new file mode 100644 index 000000000..04c3d19d7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_plain.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_plain.webp b/app/src/main/res/drawable-xxxhdpi/np_plain.webp deleted file mode 100644 index 711c56b47..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_plain.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_simple.png b/app/src/main/res/drawable-xxxhdpi/np_simple.png new file mode 100644 index 000000000..f9b1fe442 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_simple.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/np_simple.webp b/app/src/main/res/drawable-xxxhdpi/np_simple.webp deleted file mode 100644 index 3a53aa96e..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/np_simple.webp and /dev/null differ diff --git a/app/src/main/res/layout-v21/fragment_player.xml b/app/src/main/res/layout-v21/fragment_player.xml deleted file mode 100644 index eecebf7c2..000000000 --- a/app/src/main/res/layout-v21/fragment_player.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/abs_playlists.xml b/app/src/main/res/layout/abs_playlists.xml index cc0be0c07..4ff42f354 100644 --- a/app/src/main/res/layout/abs_playlists.xml +++ b/app/src/main/res/layout/abs_playlists.xml @@ -22,7 +22,7 @@ android:id="@+id/sectionTitle" style="@style/SubTitleTextAppearance" android:text="@string/for_you" - android:textStyle="bold" /> + /> diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml index 3e09afd36..02d96da76 100755 --- a/app/src/main/res/layout/activity_song_tag_editor.xml +++ b/app/src/main/res/layout/activity_song_tag_editor.xml @@ -143,6 +143,23 @@ + + + + + + - - - - - + android:layout_height="@dimen/progress_container_height" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:paddingStart="12dp" + android:paddingEnd="12dp"> - + tools:ignore="RtlHardcoded,RtlSymmetry" /> - + tools:ignore="RtlHardcoded,RtlSymmetry" /> + + + + - + android:layout_height="@dimen/progress_container_height" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:paddingStart="12dp" + android:paddingEnd="12dp"> + - + + + + android:background="#90000000" /> - + + + + + + + + + + + + - - - - + + + + + + + + diff --git a/app/src/main/res/layout/fragment_full_player_controls.xml b/app/src/main/res/layout/fragment_full_player_controls.xml index c2d6260b6..468cb2885 100644 --- a/app/src/main/res/layout/fragment_full_player_controls.xml +++ b/app/src/main/res/layout/fragment_full_player_controls.xml @@ -5,50 +5,127 @@ android:id="@+id/player_footer_frame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical"> + android:orientation="vertical" + tools:background="@color/md_grey_800"> - + android:layout_height="wrap_content"> - + + + + + + + + + + + + android:layout_height="28dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:paddingStart="12dp" + android:paddingEnd="12dp"> - + - + + + + - diff --git a/app/src/main/res/layout/fragment_material_playback_controls.xml b/app/src/main/res/layout/fragment_material_playback_controls.xml index 6dd093d8d..3afd2e791 100644 --- a/app/src/main/res/layout/fragment_material_playback_controls.xml +++ b/app/src/main/res/layout/fragment_material_playback_controls.xml @@ -9,17 +9,54 @@ android:orientation="vertical" tools:ignore="MissingPrefix"> - + android:layout_height="28dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:paddingStart="12dp" + android:paddingEnd="12dp"> - + + + + + + - + android:layout_height="wrap_content" + android:layout_weight="0"> - + diff --git a/app/src/main/res/layout/fragment_player_playback_controls.xml b/app/src/main/res/layout/fragment_player_playback_controls.xml index d13b0280e..841f66266 100755 --- a/app/src/main/res/layout/fragment_player_playback_controls.xml +++ b/app/src/main/res/layout/fragment_player_playback_controls.xml @@ -8,19 +8,53 @@ android:orientation="vertical" tools:ignore="MissingPrefix"> - + android:layout_height="28dp"> - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/metal_section_recycler_view.xml b/app/src/main/res/layout/metal_section_recycler_view.xml index c3e631598..a83957357 100644 --- a/app/src/main/res/layout/metal_section_recycler_view.xml +++ b/app/src/main/res/layout/metal_section_recycler_view.xml @@ -20,8 +20,7 @@ + style="@style/SubTitleTextAppearance" /> diff --git a/app/src/main/res/layout/section_item_collage.xml b/app/src/main/res/layout/section_item_collage.xml index 1fc9d62d9..d834215be 100644 --- a/app/src/main/res/layout/section_item_collage.xml +++ b/app/src/main/res/layout/section_item_collage.xml @@ -20,8 +20,7 @@ + style="@style/SubTitleTextAppearance" /> diff --git a/app/src/main/res/layout/section_recycler_view.xml b/app/src/main/res/layout/section_recycler_view.xml index 888894e29..138af94ed 100644 --- a/app/src/main/res/layout/section_recycler_view.xml +++ b/app/src/main/res/layout/section_recycler_view.xml @@ -22,8 +22,7 @@ + style="@style/SubTitleTextAppearance" /> diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml index afd6e3858..a5b9b02db 100644 --- a/app/src/main/res/values/ids.xml +++ b/app/src/main/res/values/ids.xml @@ -16,6 +16,7 @@ + \ 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 a387b8273..0edcd2650 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -598,5 +598,9 @@ Error Permission error Classic + Composer + Composer + Next Song + Last song diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d046f6907..d09d10497 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jan 18 19:55:16 IST 2019 +#Sun Feb 24 22:42:48 IST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl = https\://services.gradle.org/distributions/gradle-4.10.1-all.zip \ No newline at end of file +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip \ No newline at end of file