diff --git a/app/build.gradle b/app/build.gradle index ac79d316..016c7ca0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 324 - versionName '3.1.700' + versionCode 333 + versionName '3.1.900' multiDexEnabled true @@ -127,38 +127,47 @@ dependencies { implementation "androidx.palette:palette:1.0.0" implementation 'androidx.annotation:annotation:1.1.0' implementation 'androidx.preference:preference:1.1.0-beta01' - implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'androidx.palette:palette-ktx:1.0.0' + + implementation 'com.google.android.material:material:1.1.0-alpha07' + implementation 'com.google.android.material:material:1.1.0-alpha07' + implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0' + implementation 'com.afollestad.material-dialogs:core:3.0.0-alpha1' implementation 'com.afollestad.material-dialogs:input:3.0.0-alpha1' implementation 'com.afollestad.material-dialogs:color:3.0.0-alpha1' implementation 'com.afollestad.material-dialogs:bottomsheets:3.0.0-alpha1' implementation 'com.afollestad:material-cab:0.1.12' + implementation 'com.github.bumptech.glide:glide:4.8.0' kapt 'com.github.bumptech.glide:compiler:4.8.0' implementation 'com.github.bumptech.glide:okhttp3-integration:4.8.0' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.8' + implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') { transitive = true } - implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0' - implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod' + implementation 'com.anjlab.android.iab.v3:library:1.0.44' /*UI Library*/ implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1' implementation 'com.r0adkll:slidableactivity:2.0.6' - /*Backend all*/ - implementation 'com.github.kabouzeid:AndroidSlidingUpPanel:3.3.0-kmod3' - implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3' - implementation 'org.nanohttpd:nanohttpd:2.3.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:3.4.0.201406110918-r' + implementation 'com.github.jetradarmobile:android-snowfall:1.2.0' implementation 'com.github.takahirom.downloadable.calligraphy:downloadable-calligraphy:0.1.3' + implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0' + implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod' + implementation 'com.github.kabouzeid:AndroidSlidingUpPanel:3.3.0-kmod3' + implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2' implementation project(':appthemehelper') } diff --git a/app/src/main/assets/contributors.json b/app/src/main/assets/contributors.json index 4c0ee556..b2b6baab 100644 --- a/app/src/main/assets/contributors.json +++ b/app/src/main/assets/contributors.json @@ -19,9 +19,9 @@ }, { "name": "Gaming Inc.", - "summary": "Discord server maintainer", - "link": "https://discord.gg/qTecXXn", - "profile_image": "https://i.imgur.com/FMqPDSS.png" + "summary": "Telegram & Discord server maintainer", + "link": "https://t.me/Gaming_Inc", + "profile_image": "https://i.imgur.com/pfvN7d9.png" }, { "name": "Marko Ivanović", @@ -34,5 +34,11 @@ "summary": "Telegram and Design contributor", "link": "https://t.me/Allstargaurav", "profile_image": "https://i.imgur.com/EertxDu.jpg" + }, + { + "name": "Abilas Sathiya", + "summary": "Design & Suggestions", + "link": "https://t.me/@abs2606", + "profile_image": "https://i.imgur.com/MUyEWlx.jpg" } ] \ No newline at end of file diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index be9b331b..3e8ac797 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

v3.1.700

v3.1.400

v3.1.300

v3.1.240

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.900

v3.1.850

v3.1.800

v3.1.700

v3.1.400

v3.1.300

v3.1.240

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/Injection.kt b/app/src/main/java/code/name/monkey/retromusic/Injection.kt index 55857020..8023706e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Injection.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Injection.kt @@ -16,8 +16,6 @@ package code.name.monkey.retromusic import code.name.monkey.retromusic.providers.RepositoryImpl import code.name.monkey.retromusic.providers.interfaces.Repository -import code.name.monkey.retromusic.rest.KogouClient -import code.name.monkey.retromusic.rest.service.KuGouApiService import code.name.monkey.retromusic.util.schedulers.BaseSchedulerProvider import code.name.monkey.retromusic.util.schedulers.SchedulerProvider @@ -30,8 +28,4 @@ object Injection { fun provideSchedulerProvider(): BaseSchedulerProvider { return SchedulerProvider.getInstance() } - - fun provideKuGouApiService(): KuGouApiService { - return KogouClient().apiService - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt index e195b77a..37a7f0d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt @@ -10,7 +10,6 @@ import android.view.animation.AnimationUtils import android.widget.ImageView import androidx.core.app.ActivityCompat import androidx.core.util.Pair -import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -20,6 +19,11 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity +import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity +import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.DeleteSongsDialog import code.name.monkey.retromusic.glide.GlideApp @@ -32,11 +36,6 @@ import code.name.monkey.retromusic.misc.AppBarStateChangeListener import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.mvp.contract.AlbumDetailsContract import code.name.monkey.retromusic.mvp.presenter.AlbumDetailsPresenter -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity -import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil @@ -55,8 +54,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac private lateinit var simpleSongAdapter: SimpleSongAdapter private var disposable = CompositeDisposable() - var album: Album? = null - private set + private lateinit var album: Album private val savedSortOrder: String get() = PreferenceUtil.getInstance().albumDetailSongSortOrder @@ -80,7 +78,6 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac setLightNavigationBar(true) setNavigationbarColorAuto() - ActivityCompat.postponeEnterTransition(this) val albumId = intent.getIntExtra(EXTRA_ALBUM_ID, -1) @@ -90,23 +87,16 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac setupRecyclerView() setupToolbarMarginHeight() - contentContainer.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, oldScrollY: Int -> - run { - if (scrollY > oldScrollY) { - actionShuffleAll.shrink(true) - } - if (scrollY < oldScrollY) { - actionShuffleAll.extend(true) - } - } - } - - actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(album!!.songs!!, true) } - artistImage = findViewById(R.id.artistImage) artistImage.setOnClickListener { val artistPairs = arrayOf>(Pair.create(image, resources.getString(R.string.transition_artist_image))) - NavigationUtil.goToArtist(this, album!!.artistId, *artistPairs) + NavigationUtil.goToArtist(this, album.artistId, *artistPairs) + } + playAction.apply { + setOnClickListener { MusicPlayerRemote.openQueue(album.songs!!, 0, true) } + } + shuffleAction.apply { + setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(album.songs!!, true) } } } @@ -144,13 +134,13 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac appBarLayout?.apply { addOnOffsetChangedListener(object : AppBarStateChangeListener() { - override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) { + override fun onStateChanged(appBarLayout: AppBarLayout, state: State) { val color: Int = when (state) { - AppBarStateChangeListener.State.COLLAPSED -> { + State.COLLAPSED -> { setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this@AlbumDetailsActivity))) ThemeStore.primaryColor(this@AlbumDetailsActivity) } - AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> { + State.EXPANDED, State.IDLE -> { setLightStatusbar(false) Color.TRANSPARENT } @@ -242,9 +232,9 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac private fun loadAlbumCover() { GlideApp.with(this) .asBitmapPalette() - .load(RetroGlideExtension.getSongModel(album!!.safeGetFirstSong())) + .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) .transition(RetroGlideExtension.getDefaultTransition()) - .songOptions(album!!.safeGetFirstSong()) + .songOptions(album.safeGetFirstSong()) .dontAnimate() .into(object : RetroMusicColoredTarget(image as ImageView) { override fun onColorReady(color: Int) { @@ -259,10 +249,14 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac songTitle.setTextColor(themeColor) moreTitle.setTextColor(themeColor) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(themeColor) + playAction.backgroundTintList = ColorStateList.valueOf(themeColor) + shuffleAction.backgroundTintList = ColorStateList.valueOf(themeColor) ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(themeColor))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this + playAction.setTextColor(this) + playAction.iconTint = this + + shuffleAction.setTextColor(this) + shuffleAction.iconTint = this } } @@ -304,12 +298,12 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac } R.id.action_tag_editor -> { val intent = Intent(this, AlbumTagEditorActivity::class.java) - intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album!!.id) + intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id) startActivityForResult(intent, TAG_EDITOR_REQUEST) return true } R.id.action_go_to_artist -> { - NavigationUtil.goToArtist(this, album!!.artistId) + NavigationUtil.goToArtist(this, album.artistId) return true } /*Sort*/ diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt index ded4bf05..9c0dc629 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color +import android.graphics.drawable.Drawable import android.os.Build import android.os.Bundle import android.text.Html @@ -13,7 +14,6 @@ import android.view.* import android.view.animation.AnimationUtils import android.widget.Toast import androidx.core.app.ActivityCompat -import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -23,6 +23,10 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.album.AlbumAdapter +import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension @@ -34,10 +38,6 @@ import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract import code.name.monkey.retromusic.mvp.presenter.ArtistDetailsPresenter import code.name.monkey.retromusic.rest.LastFMRestClient import code.name.monkey.retromusic.rest.model.LastFmArtist -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.album.AlbumAdapter -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.util.* import com.google.android.material.appbar.AppBarLayout import kotlinx.android.synthetic.main.activity_artist_content.* @@ -53,7 +53,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac private var biography: Spanned? = null private lateinit var artist: Artist private var lastFMRestClient: LastFMRestClient? = null - private var artistDetailsPresenter: ArtistDetailsPresenter? = null + private lateinit var artistDetailsPresenter: ArtistDetailsPresenter private lateinit var songAdapter: SimpleSongAdapter private lateinit var albumAdapter: AlbumAdapter private var forceDownload: Boolean = false @@ -64,7 +64,6 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac window.enterTransition = slide } - override fun createContentView(): View { return wrapSlidingMusicPanel(R.layout.activity_artist_details) } @@ -85,17 +84,13 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac setUpViews() artistDetailsPresenter = ArtistDetailsPresenter(this, intent.extras!!) - artistDetailsPresenter!!.subscribe() + artistDetailsPresenter.subscribe() - contentContainer.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, oldScrollY: Int -> - run { - if (scrollY > oldScrollY) { - actionShuffleAll.shrink(true) - } - if (scrollY < oldScrollY) { - actionShuffleAll.extend(true) - } - } + playAction.apply { + setOnClickListener { MusicPlayerRemote.openQueue(artist.songs, 0, true) } + } + shuffleAction.apply { + setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(artist.songs, true) } } biographyText.setOnClickListener { @@ -105,7 +100,6 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac biographyText.maxLines = 4 } } - actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(getArtist().songs, true) } } private fun setUpViews() { @@ -125,17 +119,16 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac private fun setupToolbarMarginHeight() { val primaryColor = ThemeStore.primaryColor(this) TintHelper.setTintAuto(contentContainer!!, primaryColor, true) - if (collapsingToolbarLayout != null) { - collapsingToolbarLayout!!.setContentScrimColor(primaryColor) - collapsingToolbarLayout!!.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor)) + collapsingToolbarLayout?.let { + it.setContentScrimColor(primaryColor) + it.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor)) } - toolbar!!.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp) + toolbar?.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp) setSupportActionBar(toolbar) supportActionBar!!.title = null - if (toolbar != null && !PreferenceUtil.getInstance().fullScreenMode) { val params = toolbar!!.layoutParams as ViewGroup.MarginLayoutParams params.topMargin = RetroUtil.getStatusBarHeight() @@ -143,13 +136,13 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } appBarLayout?.addOnOffsetChangedListener(object : AppBarStateChangeListener() { - override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) { + override fun onStateChanged(appBarLayout: AppBarLayout, state: State) { val color: Int = when (state) { - AppBarStateChangeListener.State.COLLAPSED -> { + State.COLLAPSED -> { setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(appBarLayout.context))) ThemeStore.primaryColor(appBarLayout.context) } - AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> { + State.EXPANDED, State.IDLE -> { setLightStatusbar(false) Color.TRANSPARENT } @@ -158,6 +151,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(appBarLayout.context, toolbar, color) } }) + setColors(ThemeStore.accentColor(this)) } private fun setupRecyclerView() { @@ -190,7 +184,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac override fun onPause() { super.onPause() - artistDetailsPresenter!!.unsubscribe() + artistDetailsPresenter.unsubscribe() } override fun loading() {} @@ -208,10 +202,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } private fun getArtist(): Artist { - if (artist == null) { - artist = Artist() - } - return this.artist!! + return this.artist; } private fun setArtist(artist: Artist) { @@ -283,6 +274,11 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac override fun onColorReady(color: Int) { setColors(color) } + + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + setColors(defaultFooterColor) + } }) forceDownload = false; } @@ -295,10 +291,14 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac songTitle.setTextColor(textColor) biographyTitle.setTextColor(textColor) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(textColor) + playAction.backgroundTintList = ColorStateList.valueOf(textColor) + shuffleAction.backgroundTintList = ColorStateList.valueOf(textColor) ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(textColor))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this + playAction.setTextColor(this) + playAction.iconTint = this + + shuffleAction.setTextColor(this) + shuffleAction.iconTint = this } findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this)) @@ -356,8 +356,8 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } private fun reload() { - artistDetailsPresenter!!.unsubscribe() - artistDetailsPresenter!!.subscribe() + artistDetailsPresenter.unsubscribe() + artistDetailsPresenter.subscribe() } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt index 5a440efa..eba3df0d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt @@ -1,6 +1,5 @@ package code.name.monkey.retromusic.activities -import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.view.Menu @@ -11,13 +10,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView 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.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.GenreMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Genre @@ -27,12 +24,7 @@ import code.name.monkey.retromusic.mvp.presenter.GenreDetailsPresenter import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.ViewUtil import com.afollestad.materialcab.MaterialCab -import kotlinx.android.synthetic.main.activity_playing_queue.* import kotlinx.android.synthetic.main.activity_playlist_detail.* -import kotlinx.android.synthetic.main.activity_playlist_detail.appBarLayout -import kotlinx.android.synthetic.main.activity_playlist_detail.empty -import kotlinx.android.synthetic.main.activity_playlist_detail.recyclerView -import kotlinx.android.synthetic.main.activity_playlist_detail.toolbar import java.util.* /** @@ -43,18 +35,17 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac private var genre: Genre? = null private var presenter: GenreDetailsPresenter? = null - private var songAdapter: SongAdapter? = null + private lateinit var songAdapter: ShuffleButtonSongAdapter private var cab: MaterialCab? = null private fun checkIsEmpty() { - empty!!.visibility = if (songAdapter!!.itemCount == 0) View.VISIBLE else View.GONE + empty?.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE } override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setStatusbarColor(Color.TRANSPARENT) setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -62,34 +53,30 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this))) toggleBottomNavigationView(true) - genre = intent.extras!!.getParcelable(EXTRA_GENRE_ID) - presenter = GenreDetailsPresenter(this, genre!!.id) + genre = intent?.extras?.getParcelable(EXTRA_GENRE_ID) + presenter = genre?.id?.let { GenreDetailsPresenter(this, it) } setUpToolBar() setupRecyclerView() - actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(songAdapter!!.dataSet, true) } + } private fun setUpToolBar() { val primaryColor = ThemeStore.primaryColor(this) appBarLayout.setBackgroundColor(primaryColor) applyToolbar(toolbar) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this - } - title = genre!!.name + + title = genre?.name } override fun onResume() { super.onResume() - presenter!!.subscribe() + presenter?.subscribe() } override fun onPause() { super.onPause() - presenter!!.unsubscribe() + presenter?.unsubscribe() } override fun createContentView(): View { @@ -123,22 +110,13 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac private fun setupRecyclerView() { ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView, ThemeStore.accentColor(this)) - songAdapter = SongAdapter(this, ArrayList(), R.layout.item_list, false, this) + songAdapter = ShuffleButtonSongAdapter(this, ArrayList(), R.layout.item_list, false, this) recyclerView.apply { itemAnimator = DefaultItemAnimator() layoutManager = LinearLayoutManager(this@GenreDetailsActivity) adapter = songAdapter - }.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - actionShuffleAll.shrink(true) - } else if (dy < 0) { - actionShuffleAll.extend(true) - } - } - }) - songAdapter!!.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + } + songAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() checkIsEmpty() @@ -147,7 +125,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac } override fun showData(list: ArrayList) { - songAdapter!!.swapDataSet(list) + songAdapter.swapDataSet(list) } override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { @@ -171,7 +149,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac override fun onMediaStoreChanged() { super.onMediaStoreChanged() - presenter!!.subscribe() + presenter?.subscribe() } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 07d306db..0e3add24 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -13,6 +13,7 @@ import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment import code.name.monkey.retromusic.fragments.mainactivity.LibraryFragment import code.name.monkey.retromusic.fragments.mainactivity.folders.FoldersFragment import code.name.monkey.retromusic.fragments.mainactivity.home.BannerHomeFragment @@ -116,7 +117,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this) } - fun setCurrentFragment(fragment: Fragment, b: Boolean) { + private fun setCurrentFragment(fragment: Fragment, b: Boolean) { val trans = supportFragmentManager.beginTransaction() trans.replace(R.id.fragment_container, fragment, null) if (b) { @@ -288,8 +289,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { - NavigationUtil.goToSearch(this); - return true + OptionsSheetDialogFragment.newInstance().show(supportFragmentManager, "Main_Menu") } return super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt index 002db50a..790bffa6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt @@ -2,6 +2,7 @@ package code.name.monkey.retromusic.activities import android.content.res.ColorStateList import android.os.Bundle +import android.view.MenuItem import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore @@ -46,6 +47,16 @@ class PlayingQueueActivity : AbsMusicServiceActivity() { } } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + android.R.id.home -> { + onBackPressed() + true + } + else -> super.onOptionsItemSelected(item) + } + } + private fun setUpRecyclerView() { recyclerViewDragDropManager = RecyclerViewDragDropManager() val animator = RefactoredDefaultItemAnimator() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt index a45f0aba..4c31048d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt @@ -1,6 +1,5 @@ package code.name.monkey.retromusic.activities -import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.view.Menu @@ -10,14 +9,12 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter import code.name.monkey.retromusic.adapter.song.PlaylistSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.loaders.PlaylistLoader @@ -25,6 +22,7 @@ import code.name.monkey.retromusic.model.AbsCustomPlaylist import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.mvp.contract.PlaylistSongsContract +import code.name.monkey.retromusic.mvp.contract.PlaylistSongsContract.* import code.name.monkey.retromusic.mvp.presenter.PlaylistSongsPresenter import code.name.monkey.retromusic.util.PlaylistsUtil import code.name.monkey.retromusic.util.RetroColorUtil @@ -36,7 +34,7 @@ import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils import kotlinx.android.synthetic.main.activity_playlist_detail.* import java.util.* -class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsContract.PlaylistSongsView { +class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsView { private var playlist: Playlist? = null private var cab: MaterialCab? = null @@ -54,6 +52,7 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli setTaskDescriptionColorAuto() setLightNavigationBar(true) setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this))) + toggleBottomNavigationView(true) playlist = intent.extras!!.getParcelable(EXTRA_PLAYLIST) @@ -99,22 +98,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli checkIsEmpty() } }) - recyclerView!!.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - actionShuffleAll.shrink(true) - } else if (dy < 0) { - actionShuffleAll.extend(true) - } - } - }) - actionShuffleAll.setOnClickListener { - if (adapter.dataSet.isEmpty()) { - return@setOnClickListener - } - MusicPlayerRemote.openAndShuffleQueue(adapter.dataSet, true) - } } override fun onResume() { @@ -123,13 +106,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli } private fun setUpToolBar() { - - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this - } - applyToolbar(toolbar) title = playlist!!.name } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt index 66bf5195..066e1146 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt @@ -22,10 +22,10 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.mvp.contract.SearchContract -import code.name.monkey.retromusic.mvp.presenter.SearchPresenter import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.adapter.SearchAdapter +import code.name.monkey.retromusic.mvp.contract.SearchContract +import code.name.monkey.retromusic.mvp.presenter.SearchPresenter import code.name.monkey.retromusic.util.RetroUtil import kotlinx.android.synthetic.main.activity_search.* import java.util.* @@ -52,17 +52,18 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon setUpToolBar() setupSearchView() - if (intent.getBooleanExtra("mic_search", false)) { + if (intent.getBooleanExtra(EXTRA_SHOW_MIC, false)) { startMicSearch() } + back.setOnClickListener { onBackPressed() } voiceSearch.setOnClickListener { startMicSearch() } - searchContainer.setCardBackgroundColor(ColorStateList.valueOf(ColorUtil.darkenColor(ThemeStore.primaryColor(this)))) + searchContainer.setCardBackgroundColor(RetroUtil.toolbarColor(this)) keyboardPopup.setOnClickListener { val inputManager = getSystemService(Service.INPUT_METHOD_SERVICE) as InputMethodManager - inputManager.showSoftInput(searchView,0) + inputManager.showSoftInput(searchView, 0) } keyboardPopup.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) @@ -215,9 +216,11 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon } companion object { - val TAG: String = SearchActivity::class.java.simpleName + + const val EXTRA_SHOW_MIC = "extra_show_mic" const val QUERY: String = "query" + private const val REQ_CODE_SPEECH_INPUT = 9002 } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index 8c36a911..1b4dc5dd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -82,14 +82,14 @@ class UserInfoActivity : AbsBaseActivity() { Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() return@setOnClickListener } - val bioString = bio.text.toString().trim() { it <= ' ' } + /*val bioString = bio.text.toString().trim() { it <= ' ' } if (TextUtils.isEmpty(bioString)) { Toast.makeText(this, "Umm bio is empty", Toast.LENGTH_SHORT).show() return@setOnClickListener - } + }*/ PreferenceUtil.getInstance().userName = nameString - PreferenceUtil.getInstance().userBio = bioString + //PreferenceUtil.getInstance().userBio = bioString setResult(Activity.RESULT_OK) finish() } @@ -128,7 +128,7 @@ class UserInfoActivity : AbsBaseActivity() { private fun selectBannerImage() { - if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { + if (TextUtils.isEmpty(PreferenceUtil.getInstance().bannerImage)) { val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) pickImageIntent.type = "image/*" //pickImageIntent.putExtra("crop", "true") @@ -138,8 +138,7 @@ class UserInfoActivity : AbsBaseActivity() { pickImageIntent.putExtra("aspectY", 9) pickImageIntent.putExtra("scale", true) //intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(pickImageIntent, - "Select Picture"), PICK_BANNER_REQUEST) + startActivityForResult(Intent.createChooser(pickImageIntent, "Select Picture"), PICK_BANNER_REQUEST) } else { PreferenceUtil.getInstance().setBannerImagePath("") bannerImage.setImageResource(android.R.color.transparent) @@ -193,11 +192,12 @@ class UserInfoActivity : AbsBaseActivity() { } } CROP_BANNER_REQUEST -> { - val extras: Bundle = data.extras!! - val selectedBitmap: Bitmap = extras.getParcelable("data") - val profileImagePath = saveToInternalStorage(selectedBitmap, USER_BANNER) - PreferenceUtil.getInstance().saveProfileImage(profileImagePath) - loadImageFromStorage(profileImagePath) + val selectedBitmap: Bitmap? = data.extras?.getParcelable("date") + val profileImagePath = selectedBitmap?.let { saveToInternalStorage(it, USER_BANNER) } + profileImagePath?.let { + PreferenceUtil.getInstance().saveProfileImage(it) + loadImageFromStorage(it) + } } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index c9778a40..bd843394 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -70,7 +70,6 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private val disposable = CompositeDisposable() private fun setupToolbar() { - bannerTitle.setTextColor(Color.WHITE) toolbar.setNavigationOnClickListener { onBackPressed() } ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this, toolbar, Color.TRANSPARENT) title = null diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt index 65075528..f42faca7 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt @@ -29,7 +29,6 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { setSupportActionBar(toolbar) } title = null - bannerTitle.setTextColor(ThemeStore.textColorPrimary(this)) } override fun onCreate(savedInstanceState: Bundle?) { @@ -44,7 +43,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private fun setUpViews() { fillViewsWithFileTags() - MaterialUtil.setTint(songTextContainer,false) + MaterialUtil.setTint(songTextContainer, false) MaterialUtil.setTint(composerContainer, false) MaterialUtil.setTint(albumTextContainer, false) MaterialUtil.setTint(artistContainer, false) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt deleted file mode 100644 index ef2dac03..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt +++ /dev/null @@ -1,75 +0,0 @@ -package code.name.monkey.retromusic.adapter - -import android.app.Activity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.MaterialValueHelper -import code.name.monkey.retromusic.R -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.model.Song -import code.name.monkey.retromusic.adapter.CollageSongAdapter.CollageSongViewHolder -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder -import java.util.* - -/** - * @author Hemanth S (h4h13). - */ -class CollageSongAdapter(private val activity: Activity, private val dataSet: ArrayList) : RecyclerView.Adapter() { - - override fun onBindViewHolder(holder: CollageSongViewHolder, position: Int) { - holder.bindSongs() - if (dataSet.size > 8) { - for (i in 0 until dataSet.subList(0, 8).size) { - GlideApp.with(activity) - .asBitmapPalette() - .load(RetroGlideExtension.getSongModel(dataSet[i])) - .transition(RetroGlideExtension.getDefaultTransition()) - .songOptions(dataSet[i]) - .into(object : RetroMusicColoredTarget(holder.itemView.findViewById(holder.ids[i]) as ImageView) { - override fun onColorReady(color: Int) { - - } - }) - } - } - } - - override fun getItemCount(): Int { - return 1 - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollageSongViewHolder { - return CollageSongViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_collage, parent, false)) - } - - inner class CollageSongViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { - - val ids = arrayListOf(R.id.image_2, R.id.image_3, R.id.image_4, R.id.image_5, R.id.image_6, R.id.image_7, R.id.image_8, R.id.image_9) - private var textView: TextView = itemView.findViewById(R.id.image_1) - - fun bindSongs() { - for (i in ids) { - val imageView = itemView.findViewById(i) - imageView.setOnClickListener { - textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } - } - } - - val context = itemView.context - val color = ThemeStore.accentColor(context); - - textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } - textView.setBackgroundColor(color); - textView.setTextColor(MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color))) - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt index 60839503..1e70dc29 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt @@ -25,11 +25,11 @@ class GenreAdapter(private val mActivity: Activity, dataSet: ArrayList, p this.dataSet = dataSet } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreAdapter.ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false)) } - override fun onBindViewHolder(holder: GenreAdapter.ViewHolder, position: Int) { + override fun onBindViewHolder(holder: ViewHolder, position: Int) { val genre = dataSet[position] if (holder.title != null) { holder.title!!.text = genre.name diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt deleted file mode 100644 index 313f65c2..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt +++ /dev/null @@ -1,20 +0,0 @@ -package code.name.monkey.retromusic.adapter - -import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.StaggeredGridLayoutManager -import code.name.monkey.retromusic.interfaces.CabHolder -import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.adapter.song.SongAdapter -import java.util.* - -class SpanSongsAdapter(activity: AppCompatActivity, dataSet: ArrayList, itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?) : SongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder) { - - override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { - super.onBindViewHolder(holder, position) - if (position == 0) { - val params = StaggeredGridLayoutManager.LayoutParams(StaggeredGridLayoutManager.LayoutParams.WRAP_CONTENT, StaggeredGridLayoutManager.LayoutParams.MATCH_PARENT) - params.isFullSpan = true - holder.itemView.layoutParams = params - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index 3bf36fdd..ab204ef3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -12,6 +12,8 @@ import androidx.core.util.Pair import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget @@ -21,13 +23,10 @@ import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView -import java.util.* open class AlbumAdapter(protected val activity: AppCompatActivity, @@ -200,7 +199,10 @@ open class AlbumAdapter(protected val activity: AppCompatActivity, if (isInQuickSelectMode) { toggleChecked(adapterPosition) } else { - val albumPairs = arrayOf>(Pair.create(image, activity.resources.getString(R.string.transition_album_art))) + val pairImageView = Pair.create(image, activity.resources.getString(R.string.transition_album_art)) + val pairs = ArrayList>() + pairs.add(pairImageView) + val albumPairs: Array> = pairs.toTypedArray() NavigationUtil.goToAlbum(activity, dataSet[adapterPosition].id, *albumPairs) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index e8465c09..d2e1c873 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -12,6 +12,8 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.dialogs.ClearSmartPlaylistDialog import code.name.monkey.retromusic.dialogs.DeletePlaylistDialog import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper @@ -23,8 +25,6 @@ import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist -import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import java.util.* @@ -61,17 +61,7 @@ class PlaylistAdapter(protected val activity: AppCompatActivity, dataSet: ArrayL } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - /* if (getItemViewType(position) == SMART_PLAYLIST) { - if (holder.viewList != null) { - holder.viewList.get(0).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new HistoryPlaylist(activity))); - holder.viewList.get(1).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new LastAddedPlaylist(activity))); - holder.viewList.get(2).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new MyTopTracksPlaylist(activity))); - } - return; - }*/ + val playlist = dataSet[position] val songs = getSongs(playlist) holder.itemView.isActivated = isChecked(playlist) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt index 98a0f5ae..53b3d2e2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt @@ -20,7 +20,7 @@ abstract class AbsOffsetSongAdapter : SongAdapter { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongAdapter.ViewHolder { if (viewType == OFFSET_ITEM) { - val view = LayoutInflater.from(activity).inflate(R.layout.item_list_single_row, parent, false) + val view = LayoutInflater.from(activity).inflate(R.layout.item_list_quick_actions, parent, false) return createViewHolder(view) } return super.onCreateViewHolder(parent, viewType) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt index b39a0823..7f8d5355 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt @@ -1,20 +1,29 @@ package code.name.monkey.retromusic.adapter.song +import android.content.res.ColorStateList import android.view.MenuItem import android.view.View import androidx.annotation.LayoutRes import androidx.appcompat.app.AppCompatActivity import androidx.core.util.Pair -import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.material.button.MaterialButton import java.util.* -open class PlaylistSongAdapter(activity: AppCompatActivity, dataSet: ArrayList, @LayoutRes itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false) { +open class PlaylistSongAdapter(activity: AppCompatActivity, + dataSet: ArrayList, + @LayoutRes itemLayoutRes: Int, + usePalette: Boolean, + cabHolder: CabHolder?) : + AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false) { init { this.setMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection) @@ -25,35 +34,30 @@ open class PlaylistSongAdapter(activity: AppCompatActivity, dataSet: ArrayList message = getString(R.string.title_good_night) - in 6..11 -> message = getString(R.string.title_good_morning) - in 12..15 -> message = getString(R.string.title_good_afternoon) - in 16..19 -> message = getString(R.string.title_good_evening) - in 20..23 -> message = getString(R.string.title_good_night) - } - return message - } - - override fun onDestroyView() { - super.onDestroyView() - disposable.dispose() - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_main_options, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - text.setTextColor(ThemeStore.textColorSecondary(context!!)) - text.text = PreferenceUtil.getInstance().userBio - titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) - titleWelcome.text = String.format("%s %s!", timeOfTheDay, PreferenceUtil.getInstance().userName) - - loadImageFromStorage() - - actionSettings.setOnClickListener(this) - - actionSleepTimer.setOnClickListener(this) - actionLibrary.setOnClickListener(this) - userInfoContainer.setOnClickListener(this) - actionEqualizer.setOnClickListener(this) - actionFolders.setOnClickListener(this) - actionRate.setOnClickListener(this) - actionShare.setOnClickListener(this) - actionBugReport.setOnClickListener(this) - buyProContainer.apply { - setCardBackgroundColor(ThemeStore.accentColor(context!!)) - visibility = if (!App.isProVersion) View.VISIBLE else View.GONE - setOnClickListener { - NavigationUtil.goToProVersion(context) - } - } - } +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.bottomsheets.BottomSheet +import com.afollestad.materialdialogs.customview.customView +import kotlinx.android.synthetic.main.fragment_main_settings.* +class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { override fun onClick(view: View) { val mainActivity = activity as MainActivity? ?: return @@ -103,18 +42,16 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl R.id.actionFolders -> mainActivity.selectedFragment(R.id.action_folder) R.id.actionLibrary -> mainActivity.selectedFragment(PreferenceUtil.getInstance().lastPage) R.id.actionSettings -> NavigationUtil.goToSettings(mainActivity) - R.id.actionSleepTimer -> if (fragmentManager != null) { SleepTimerDialog().show(fragmentManager!!, TAG) } - R.id.userInfoContainer -> NavigationUtil.goToUserInfo(mainActivity) R.id.actionRate -> NavigationUtil.goToPlayStore(mainActivity) R.id.actionShare -> shareApp() R.id.actionBugReport -> prepareBugReport() R.id.actionEqualizer -> NavigationUtil.openEqualizer(mainActivity) } - dismiss() + materialDialog.dismiss() } private fun prepareBugReport() { @@ -122,33 +59,48 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl } private fun shareApp() { - val shareIntent = ShareCompat.IntentBuilder.from(activity) - .setType("songText/plain") + ShareCompat.IntentBuilder.from(activity) + .setType("text/plain") + .setChooserTitle(R.string.action_share) .setText(String.format(getString(R.string.app_share), activity!!.packageName)) - .intent - if (shareIntent.resolveActivity(activity!!.packageManager) != null) { - startActivity( - Intent.createChooser(shareIntent, resources.getText(R.string.action_share))) - } + .startChooser() } - private fun loadImageFromStorage() { + private lateinit var actionSettings: View + private lateinit var actionSleepTimer: View + private lateinit var actionLibrary: View + private lateinit var actionEqualizer: View + private lateinit var actionFolders: View + private lateinit var actionRate: View + private lateinit var actionShare: View + private lateinit var actionBugReport: View + private lateinit var materialDialog: MaterialDialog - disposable.add(Compressor(context!!) - .setMaxHeight(300) - .setMaxWidth(300) - .setQuality(75) - .setCompressFormat(Bitmap.CompressFormat.WEBP) - .compressToBitmapAsFlowable( - File(PreferenceUtil.getInstance().profileImage, USER_PROFILE)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ userImage!!.setImageBitmap(it) }, { - userImage!!.setImageDrawable(ContextCompat - .getDrawable(context!!, R.drawable.ic_account_white_24dp)) - }, { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val layout = LayoutInflater.from(context).inflate(R.layout.fragment_main_options, null) + actionSettings = layout.findViewById(R.id.actionSettings) + actionSleepTimer = layout.findViewById(R.id.actionSleepTimer) + actionLibrary = layout.findViewById(R.id.actionLibrary) + actionEqualizer = layout.findViewById(R.id.actionEqualizer) + actionFolders = layout.findViewById(R.id.actionFolders) + actionRate = layout.findViewById(R.id.actionRate) + actionShare = layout.findViewById(R.id.actionShare) + actionBugReport = layout.findViewById(R.id.actionBugReport) - })) + actionSettings.setOnClickListener(this) + actionSleepTimer.setOnClickListener(this) + actionLibrary.setOnClickListener(this) + actionEqualizer.setOnClickListener(this) + actionFolders.setOnClickListener(this) + actionRate.setOnClickListener(this) + actionShare.setOnClickListener(this) + actionBugReport.setOnClickListener(this) + + materialDialog = MaterialDialog(activity!!, BottomSheet()) + .show { + customView(view = layout, scrollable = true) + } + return materialDialog } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt index 99183767..b2636d4e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt @@ -27,47 +27,6 @@ import com.afollestad.materialdialogs.bottomsheets.BottomSheet class RemoveFromPlaylistDialog : DialogFragment() { - /*override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(code.name.monkey.retromusic.R.layout.dialog_delete, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val songs = arguments!!.getParcelableArrayList("songs") - val content: CharSequence - if (songs!!.size > 1) { - content = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Html.fromHtml(getString(code.name.monkey.retromusic.R.string.remove_x_songs_from_playlist, songs.size), Html.FROM_HTML_MODE_LEGACY) - } else { - Html.fromHtml(getString(code.name.monkey.retromusic.R.string.remove_x_songs_from_playlist, songs.size)) - } - } else { - content = Html.fromHtml(getString(code.name.monkey.retromusic.R.string.remove_song_x_from_playlist, songs[0].title)) - } - bannerTitle.setTextColor(ThemeStore.textColorPrimary(context!!)) - bannerTitle.text = content; - actionDelete.apply { - setIconResource(code.name.monkey.retromusic.R.drawable.ic_delete_white_24dp) - setText(code.name.monkey.retromusic.R.string.remove_action) - setTextColor(ThemeStore.textColorSecondary(context)) - setOnClickListener { - val playlistSongs = ArrayList() - playlistSongs.addAll(songs as ArrayList) - PlaylistsUtil.removeFromPlaylist(activity!!, playlistSongs) - dismiss() - } - MaterialUtil.setTint(this) - } - - - actionCancel.apply { - setIconResource(code.name.monkey.retromusic.R.drawable.ic_close_white_24dp) - setTextColor(ThemeStore.textColorSecondary(context)) - setOnClickListener { dismiss() } - MaterialUtil.setTint(this, false) - } - } -*/ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val songs = arguments!!.getParcelableArrayList("songs") @@ -82,16 +41,17 @@ class RemoveFromPlaylistDialog : DialogFragment() { } - return MaterialDialog(activity!!, BottomSheet()).show { - title(title) - message(text = content) - negativeButton(android.R.string.cancel) - positiveButton(R.string.remove_action) { - if (activity == null) - return@positiveButton - PlaylistsUtil.removeFromPlaylist(activity!!, songs as MutableList) - } - } + return MaterialDialog(activity!!, BottomSheet()) + .show { + title(title) + message(text = content) + negativeButton(android.R.string.cancel) + positiveButton(R.string.remove_action) { + if (activity == null) + return@positiveButton + PlaylistsUtil.removeFromPlaylist(activity!!, songs as MutableList) + } + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java deleted file mode 100644 index 5b4acea7..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java +++ /dev/null @@ -1 +0,0 @@ -/* * Copyright (c) 2019 Hemanth Savarala. * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by * the Free Software Foundation either version 3 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package code.name.monkey.retromusic.dialogs; import android.app.Activity; import android.content.Context; import android.media.MediaScannerConnection; import android.os.Bundle; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener; import code.name.monkey.retromusic.util.PreferenceUtil; public class ScanMediaFolderChooserDialog extends DialogFragment /*implements MaterialDialog.ListCallback*/ { String initialPath = PreferenceUtil.getInstance().getStartDirectory().getAbsolutePath(); private File parentFolder; private File[] parentContents; private boolean canGoUp = false; public static ScanMediaFolderChooserDialog create() { return new ScanMediaFolderChooserDialog(); } private static void scanPaths(@NonNull WeakReference activityWeakReference, @NonNull Context applicationContext, @Nullable String[] toBeScanned) { Activity activity = activityWeakReference.get(); if (toBeScanned == null || toBeScanned.length < 1) { Toast.makeText(applicationContext, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show(); } else { MediaScannerConnection.scanFile(applicationContext, toBeScanned, null, activity != null ? new UpdateToastMediaScannerCompletionListener(activity, toBeScanned) : null); } } private String[] getContentsArray() { if (parentContents == null) { if (canGoUp) { return new String[]{".."}; } return new String[]{}; } String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)]; if (canGoUp) { results[0] = ".."; } for (int i = 0; i < parentContents.length; i++) { results[canGoUp ? i + 1 : i] = parentContents[i].getName(); } return results; } private File[] listFiles() { File[] contents = parentFolder.listFiles(); List results = new ArrayList<>(); if (contents != null) { for (File fi : contents) { if (fi.isDirectory()) { results.add(fi); } } Collections.sort(results, new FolderSorter()); return results.toArray(new File[results.size()]); } return null; } /*@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission( getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { return new MaterialDialog.Builder(getActivity()) .title(R.string.md_error_label) .content(R.string.md_storage_perm_error) .positiveText(android.R.string.ok) .build(); } if (savedInstanceState == null) { savedInstanceState = new Bundle(); } if (!savedInstanceState.containsKey("current_path")) { savedInstanceState.putString("current_path", initialPath); } parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator)); checkIfCanGoUp(); parentContents = listFiles(); MaterialDialog.Builder builder = new MaterialDialog.Builder(getActivity()) .title(parentFolder.getAbsolutePath()) .items((CharSequence[]) getContentsArray()) .itemsCallback(this) .autoDismiss(false) .onPositive((dialog, which) -> { final Context applicationContext = getActivity().getApplicationContext(); final WeakReference activityWeakReference = new WeakReference<>(getActivity()); dismiss(); new FoldersFragment.ListPathsAsyncTask(getActivity(), paths -> scanPaths(activityWeakReference, applicationContext, paths)).execute(new FoldersFragment.ListPathsAsyncTask.LoadingInfo(parentFolder, FoldersFragment.AUDIO_FILE_FILTER)); }) .onNegative((materialDialog, dialogAction) -> dismiss()) .positiveText(R.string.action_scan_directory) .negativeText(android.R.string.cancel); return builder.build(); } @Override public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) { if (canGoUp && i == 0) { parentFolder = parentFolder.getParentFile(); if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { parentFolder = parentFolder.getParentFile(); } checkIfCanGoUp(); } else { parentFolder = parentContents[canGoUp ? i - 1 : i]; canGoUp = true; if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { parentFolder = Environment.getExternalStorageDirectory(); } } reload(); }*/ private void checkIfCanGoUp() { canGoUp = parentFolder.getParent() != null; } private void reload() { parentContents = listFiles(); MaterialDialog dialog = (MaterialDialog) getDialog(); dialog.setTitle(parentFolder.getAbsolutePath()); //dialog.setItems((CharSequence[]) getContentsArray()); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("current_path", parentFolder.getAbsolutePath()); } private static class FolderSorter implements Comparator { @Override public int compare(File lhs, File rhs) { return lhs.getName().compareTo(rhs.getName()); } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt index e7ace8b6..777d0b79 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt @@ -124,7 +124,7 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda if (MusicPlayerRemote.isPlaying) { miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_pause_white_24dp) } else { - miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_play_arrow_white_24dp) + miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt index d5d46d2e..4daa88b1 100755 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt @@ -79,7 +79,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum val audioManager = audioManager audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0) setPauseWhenZeroVolume(i < 1) - volumeDown!!.setImageResource(if (i == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) + volumeDown?.setImageResource(if (i == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) } @@ -118,8 +118,8 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum } private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) { - if (PreferenceUtil.getInstance().pauseOnZeroVolume() && pauseWhenZeroVolume) - if (MusicPlayerRemote.isPlaying) { + if (PreferenceUtil.getInstance().pauseOnZeroVolume()) + if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt index 168f418f..0765d7bd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt @@ -3,13 +3,12 @@ package code.name.monkey.retromusic.fragments.base import android.os.Build import android.os.Bundle import android.view.View - import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment import code.name.monkey.retromusic.activities.MainActivity +import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment abstract class AbsMainActivityFragment : AbsMusicServiceFragment() { @@ -50,6 +49,6 @@ abstract class AbsMainActivityFragment : AbsMusicServiceFragment() { } protected fun showMainMenu() { - OptionsSheetDialogFragment.newInstance().show(childFragmentManager, "Main Menu") + OptionsSheetDialogFragment.newInstance().show(childFragmentManager, "Main_Menu") } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt deleted file mode 100644 index eb5989bd..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt +++ /dev/null @@ -1,91 +0,0 @@ -package code.name.monkey.retromusic.fragments.mainactivity - -import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater -import androidx.recyclerview.widget.LinearLayoutManager -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.model.Genre -import code.name.monkey.retromusic.mvp.contract.GenreContract -import code.name.monkey.retromusic.mvp.presenter.GenrePresenter -import code.name.monkey.retromusic.adapter.GenreAdapter -import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewFragment -import code.name.monkey.retromusic.util.PreferenceUtil -import java.util.* - -class GenreFragment : AbsLibraryPagerRecyclerViewFragment(), GenreContract.GenreView { - - private var mPresenter: GenrePresenter? = null - - override val emptyMessage: Int - get() = R.string.no_genres - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - mPresenter = GenrePresenter(this) - } - - override fun setMenuVisibility(menuVisible: Boolean) { - super.setMenuVisibility(menuVisible) - if (menuVisible) { - libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) - } - } - - override fun onResume() { - super.onResume() - libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) - if (adapter!!.dataSet.isEmpty()) { - mPresenter!!.subscribe() - } - } - - - override fun onDestroy() { - super.onDestroy() - mPresenter!!.unsubscribe() - } - - override fun createLayoutManager(): LinearLayoutManager { - return LinearLayoutManager(activity) - } - - override fun createAdapter(): GenreAdapter { - val dataSet = adapter!!.dataSet - return GenreAdapter(libraryFragment.mainActivity, dataSet, R.layout.item_list) - } - - override fun loading() { - - } - - override fun showData(list: ArrayList) { - adapter!!.swapDataSet(list) - } - - override fun showEmptyView() { - adapter!!.swapDataSet(ArrayList()) - } - - override fun completed() { - - } - - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - super.onCreateOptionsMenu(menu, inflater) - menu.removeItem(R.id.action_sort_order) - menu.removeItem(R.id.action_grid_size) - menu.removeItem(R.id.action_new_playlist) - } - - companion object { - - fun newInstance(): GenreFragment { - val args = Bundle() - val fragment = GenreFragment() - fragment.arguments = args - return fragment - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 5cd05650..f422220d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.fragments.mainactivity; import android.app.Activity; +import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -9,25 +10,26 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; +import androidx.core.util.Pair; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.afollestad.materialcab.MaterialCab; import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.card.MaterialCardView; import org.jetbrains.annotations.NotNull; import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.common.ATHToolbarActivity; import code.name.monkey.appthemehelper.util.ATHUtil; +import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; @@ -50,12 +52,12 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private Toolbar toolbar; private AppBarLayout appBarLayout; private View contentContainer; + private MaterialCardView toolbarContainer; private MaterialCab cab; private FragmentManager fragmentManager; - private ImageView userImage; private CompositeDisposable disposable; - private TextView bannerTitle; + @NonNull public static Fragment newInstance(int tab) { @@ -84,16 +86,15 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde View view = inflater.inflate(R.layout.fragment_library, container, false); disposable = new CompositeDisposable(); contentContainer = view.findViewById(R.id.fragmentContainer); - bannerTitle = view.findViewById(R.id.bannerTitle); + toolbarContainer = view.findViewById(R.id.toolbarContainer); appBarLayout = view.findViewById(R.id.appBarLayout); toolbar = view.findViewById(R.id.toolbar); - userImage = view.findViewById(R.id.userImage); - userImage.setOnClickListener(v -> showMainMenu()); + return view; } - + public void setTitle(@StringRes int name) { - bannerTitle.setText(getString(name)); + toolbar.setTitle(getString(name)); } public void addOnAppBarOffsetChangedListener(@NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { @@ -143,17 +144,16 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private void setupToolbar() { int primaryColor = ThemeStore.Companion.primaryColor(getContext()); TintHelper.setTintAuto(contentContainer, primaryColor, true); - bannerTitle.setTextColor(ThemeStore.Companion.textColorPrimary(getContext())); - - toolbar.setBackgroundColor(primaryColor); - toolbar.setNavigationIcon(null); + toolbar.setBackgroundColor(RetroUtil.toolbarColor(getMainActivity())); + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); + toolbar.setOnClickListener(v -> { + Pair pair = new Pair<>(toolbarContainer, getString(R.string.transition_toolbar)); + NavigationUtil.goToSearch(getMainActivity(), pair); + }); appBarLayout.setBackgroundColor(primaryColor); appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> getMainActivity().setLightStatusbar(!ATHUtil.INSTANCE.isWindowBackgroundDark(getContext()))); - getMainActivity().setTitle(null); getMainActivity().setSupportActionBar(toolbar); - - } private Fragment getCurrentFragment() { @@ -359,7 +359,8 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde int id = item.getItemId(); switch (id) { case R.id.action_search: - NavigationUtil.goToSearch(getMainActivity()); + Pair pair = new Pair<>(toolbarContainer, getString(R.string.transition_toolbar)); + NavigationUtil.goToSearch(getMainActivity(), pair); break; case R.id.action_new_playlist: CreatePlaylistDialog.Companion.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java index b6951fc7..d2123907 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java @@ -1,8 +1,8 @@ package code.name.monkey.retromusic.fragments.mainactivity.folders; import android.app.Dialog; +import android.app.ProgressDialog; import android.content.Context; -import android.graphics.drawable.Drawable; import android.media.MediaScannerConnection; import android.os.Bundle; import android.os.Environment; @@ -14,10 +14,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.MimeTypeMap; -import android.widget.ImageView; import android.widget.PopupMenu; -import android.widget.ProgressBar; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -29,12 +26,6 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.afollestad.materialcab.MaterialCab; -import com.afollestad.materialdialogs.MaterialDialog; -import com.afollestad.materialdialogs.bottomsheets.BottomSheet; -import com.bumptech.glide.request.Request; -import com.bumptech.glide.request.target.SizeReadyCallback; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.request.transition.Transition; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.snackbar.Snackbar; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; @@ -59,7 +50,6 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.adapter.SongFileAdapter; import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment; -import code.name.monkey.retromusic.glide.GlideApp; import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.menu.SongMenuHelper; import code.name.monkey.retromusic.helper.menu.SongsMenuHelper; @@ -73,11 +63,10 @@ import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.util.FileUtil; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroColorUtil; +import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.ViewUtil; import code.name.monkey.retromusic.views.BreadCrumbLayout; -import static code.name.monkey.retromusic.Constants.USER_PROFILE; - public class FoldersFragment extends AbsMainActivityFragment implements MainActivityFragmentCallbacks, CabHolder, BreadCrumbLayout.SelectionCallback, SongFileAdapter.Callbacks, @@ -95,16 +84,12 @@ public class FoldersFragment extends AbsMainActivityFragment implements private View coordinatorLayout, container, empty; - private TextView title; - private Toolbar toolbar; private BreadCrumbLayout breadCrumbs; private AppBarLayout appBarLayout; - private ImageView userImage; - private FastScrollRecyclerView recyclerView; private Comparator fileComparator = (lhs, rhs) -> { @@ -162,14 +147,12 @@ public class FoldersFragment extends AbsMainActivityFragment implements private void initViews(View view) { coordinatorLayout = view.findViewById(R.id.coordinatorLayout); - userImage = view.findViewById(R.id.userImage); - userImage.setOnClickListener(v -> showMainMenu()); + recyclerView = view.findViewById(R.id.recyclerView); appBarLayout = view.findViewById(R.id.appBarLayout); breadCrumbs = view.findViewById(R.id.breadCrumbs); toolbar = view.findViewById(R.id.toolbar); empty = view.findViewById(android.R.id.empty); - title = view.findViewById(R.id.bannerTitle); container = view.findViewById(R.id.container); } @@ -242,19 +225,15 @@ public class FoldersFragment extends AbsMainActivityFragment implements } private void setUpAppbarColor() { - title.setTextColor(ThemeStore.Companion.textColorPrimary(getContext())); - int primaryColor = ThemeStore.Companion.primaryColor(getContext()); - - getActivity().setTitle(null); getMainActivity().setSupportActionBar(toolbar); TintHelper.setTintAuto(container, primaryColor, true); appBarLayout.setBackgroundColor(primaryColor); - toolbar.setBackgroundColor(primaryColor); - toolbar.setNavigationOnClickListener(v -> { - getActivity().onBackPressed(); + toolbar.setBackgroundColor(RetroUtil.toolbarColor(getMainActivity())); + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); + toolbar.setOnClickListener(v -> { + showMainMenu(); }); - breadCrumbs.setActivatedContentColor(ToolbarContentTintHelper.toolbarTitleColor(getActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor))); breadCrumbs.setDeactivatedContentColor(ToolbarContentTintHelper.toolbarSubtitleColor(getActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor))); @@ -348,10 +327,6 @@ public class FoldersFragment extends AbsMainActivityFragment implements @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { - case android.R.id.home: - //noinspection ConstantConditions - getActivity().onBackPressed(); - break; case R.id.action_go_to_start_directory: setCrumb(new BreadCrumbLayout.Crumb(tryGetCanonicalFile(PreferenceUtil.getInstance().getStartDirectory())), true); return true; @@ -489,8 +464,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements private void checkIsEmpty() { if (empty != null) { - empty - .setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); + empty.setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } } @@ -754,21 +728,13 @@ public class FoldersFragment extends AbsMainActivityFragment implements @Override protected Dialog createDialog(@NonNull Context context) { - View view = LayoutInflater.from(context).inflate(R.layout.progress_bar, null); - view.setBackgroundColor(ThemeStore.Companion.primaryColor(context)); - ProgressBar progressBar = view.findViewById(R.id.progressBar); - TintHelper.setTintAuto(progressBar, ThemeStore.Companion.accentColor(context), false); - - MaterialDialog materialDialog = new MaterialDialog(context, new BottomSheet()); - materialDialog.setContentView(view); - materialDialog.title(R.string.listing_files, ""); - materialDialog.setOnCancelListener(dialog -> cancel(false)); - materialDialog.setOnDismissListener(dialog -> cancel(false)); - materialDialog.negativeButton(android.R.string.cancel, "", materialDialog1 -> { - cancel(false); - return null; - }); - return materialDialog; + ProgressDialog dialog = new ProgressDialog(context); + dialog.setIndeterminate(true); + dialog.setTitle(R.string.listing_files); + dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + dialog.setOnCancelListener(dialog1 -> cancel(false)); + dialog.setOnDismissListener(dialog1 -> cancel(false)); + return dialog; } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 57b87883..a583a67e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -2,18 +2,19 @@ package code.name.monkey.retromusic.fragments.mainactivity.home import android.graphics.Bitmap import android.graphics.Color -import android.graphics.drawable.Drawable import android.os.Bundle import android.util.DisplayMetrics import android.view.* -import android.widget.ImageView import androidx.appcompat.widget.Toolbar +import androidx.core.content.ContextCompat +import androidx.core.util.Pair import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity +import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.Constants.USER_BANNER -import code.name.monkey.retromusic.Constants.USER_PROFILE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.HomeAdapter import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment @@ -32,14 +33,12 @@ import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.Request -import com.bumptech.glide.request.target.SizeReadyCallback -import com.bumptech.glide.request.target.Target -import com.bumptech.glide.request.transition.Transition import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers +import kotlinx.android.synthetic.main.abs_playlists.* import kotlinx.android.synthetic.main.fragment_banner_home.* +import kotlinx.android.synthetic.main.fragment_home.recyclerView import java.io.File import java.util.* import kotlin.collections.ArrayList @@ -56,13 +55,32 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private lateinit var topPlayed: View private lateinit var actionShuffle: View private lateinit var history: View - private lateinit var userImage: ImageView private lateinit var toolbar: Toolbar override fun onCreateView(inflater: LayoutInflater, viewGroup: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(if (PreferenceUtil.getInstance().isHomeBanner) R.layout.fragment_banner_home else R.layout.fragment_home, viewGroup, false) } + private fun loadImageFromStorage() { + disposable.add(Compressor(context!!) + .setMaxHeight(300) + .setMaxWidth(300) + .setQuality(75) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().profileImage, Constants.USER_PROFILE)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it != null) { + userImage.setImageBitmap(it) + } else { + userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat)) + } + }) { + userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat)) + }) + } + private val displayMetrics: DisplayMetrics get() { val display = mainActivity.windowManager.defaultDisplay @@ -71,44 +89,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba return metrics } - private fun getTimeOfTheDay() { - val c = Calendar.getInstance() - val timeOfDay = c.get(Calendar.HOUR_OF_DAY) - - var images = arrayOf() - when (timeOfDay) { - in 0..5 -> images = resources.getStringArray(R.array.night) - in 6..11 -> images = resources.getStringArray(R.array.morning) - in 12..15 -> images = resources.getStringArray(R.array.after_noon) - in 16..19 -> images = resources.getStringArray(R.array.evening) - in 20..23 -> images = resources.getStringArray(R.array.night) - } - - val day = images[Random().nextInt(images.size)] - loadTimeImage(day) - } - - - private fun loadTimeImage(day: String) { - if (bannerImage != null) { - if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { - GlideApp.with(activity!!) - .load(day) - .placeholder(R.drawable.material_design_default) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(bannerImage!!) - } else { - disposable.add(Compressor(context!!) - .setQuality(100) - .setCompressFormat(Bitmap.CompressFormat.WEBP) - .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { bannerImage!!.setImageBitmap(it) }) - } - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) homePresenter = HomePresenter(this) @@ -118,7 +98,9 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) toolbar = view.findViewById(R.id.toolbar) - + bannerImage?.setOnClickListener { + NavigationUtil.goToUserInfo(activity!!) + } if (!PreferenceUtil.getInstance().isHomeBanner) setStatusbarColorAuto(view) @@ -142,9 +124,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba NavigationUtil.goToPlaylistNew(mainActivity, HistoryPlaylist(mainActivity)) } - userImage = view.findViewById(R.id.userImage) - userImage.setOnClickListener { showMainMenu() } - homePresenter = HomePresenter(this) contentContainerView = view.findViewById(R.id.contentContainer) @@ -156,6 +135,12 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba homePresenter.subscribe() checkPadding() + + userInfoContainer.setOnClickListener { + NavigationUtil.goToUserInfo(activity!!) + } + titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) + titleWelcome.text = String.format("%s", PreferenceUtil.getInstance().userName) } private fun checkPadding() { @@ -167,12 +152,22 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba (recyclerView.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = (marginSpan * 2.3f).toInt() } + private fun toolbarColor(): Int { + return if (PreferenceUtil.getInstance().isHomeBanner) { + toolbarContainer.setBackgroundColor(Color.TRANSPARENT) + ColorUtil.withAlpha(RetroUtil.toolbarColor(mainActivity), 0.85f) + } else { + RetroUtil.toolbarColor(mainActivity) + } + } + private fun setupToolbar() { - mainActivity.title = null toolbar.apply { - setBackgroundColor(if (PreferenceUtil.getInstance().isHomeBanner) Color.TRANSPARENT else ThemeStore.primaryColor(context)) - setNavigationOnClickListener { - NavigationUtil.goToSearch(activity) + setBackgroundColor(toolbarColor()) + setNavigationIcon(R.drawable.ic_menu_white_24dp) + setOnClickListener { + val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) + NavigationUtil.goToSearch(activity!!, pairImageView) } } mainActivity.setSupportActionBar(toolbar) @@ -243,11 +238,51 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == R.id.action_search) { - NavigationUtil.goToSearch(mainActivity) + val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) + NavigationUtil.goToSearch(mainActivity, true, pairImageView) } return super.onOptionsItemSelected(item) } + private fun getTimeOfTheDay() { + val c = Calendar.getInstance() + val timeOfDay = c.get(Calendar.HOUR_OF_DAY) + + var images = arrayOf() + when (timeOfDay) { + in 0..5 -> images = resources.getStringArray(R.array.night) + in 6..11 -> images = resources.getStringArray(R.array.morning) + in 12..15 -> images = resources.getStringArray(R.array.after_noon) + in 16..19 -> images = resources.getStringArray(R.array.evening) + in 20..23 -> images = resources.getStringArray(R.array.night) + } + + val day = images[Random().nextInt(images.size)] + loadTimeImage(day) + } + + + private fun loadTimeImage(day: String) { + if (bannerImage != null) { + if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { + GlideApp.with(activity!!) + .load(day) + .placeholder(R.drawable.material_design_default) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(bannerImage!!) + } else { + disposable.add(Compressor(context!!) + .setQuality(100) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { bannerImage!!.setImageBitmap(it) }) + } + } + loadImageFromStorage() + } + companion object { const val TAG: String = "BannerHomeFragment" diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt index 1998c6e4..1cd64bb9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt @@ -120,7 +120,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt index be8907a7..d465b5df 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt @@ -135,7 +135,7 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt index e75ed286..5954f6b2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt @@ -149,7 +149,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt index e6e441e4..e2a22642 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt @@ -75,7 +75,7 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() { private fun updatePlayPauseDrawableState() { when { MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt index 83930366..52f3524e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt @@ -97,7 +97,7 @@ class ClassicPlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playerPlayPauseFab.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playerPlayPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playerPlayPauseFab.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt index 013ae905..2be99a8d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt @@ -132,7 +132,7 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() { private fun updatePlayPauseDrawableState() { when { MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt index 9abbd3ec..2d24d31c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt @@ -137,7 +137,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt index 7fbcdc57..0eee0793 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt @@ -153,7 +153,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index ca2a19ba..9ca74482 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -154,7 +154,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), PopupMenu.OnMe if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt index 6c8e39dc..52511340 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt @@ -144,7 +144,7 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt index e40c82e6..96e66e28 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt @@ -129,7 +129,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_big); } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_big); + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_64dp); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt index 9dd78cef..3c445d7f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt @@ -134,7 +134,7 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt index 4a71afb7..ef5e6206 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt @@ -238,7 +238,7 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt index a6f8017b..ce27c5fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt @@ -213,7 +213,7 @@ class SimplePlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt deleted file mode 100644 index afe71387..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.fragments.player.slide - -import android.animation.ObjectAnimator -import android.graphics.Color -import android.graphics.PorterDuff -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.SeekBar -import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.LinearSmoothScroller -import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.R -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.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.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter -import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment -import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment -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_slide_player.* - -/** - * Created by hemanths on 3/15/19 - */ -class SlidePlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Callback { - private var lastColor: Int = 0 - override val paletteColor: Int - get() = lastColor - - override fun playerToolbar(): Toolbar { - return playerToolbar - } - - override fun onShow() { - - } - - override fun onHide() { - - } - - override fun onBackPressed(): Boolean { - return false - } - - override fun toolbarIconColor(): Int { - return Color.WHITE - } - - override fun onColorChanged(color: Int) { - - } - - override fun onFavoriteToggled() { - toggleFavorite(MusicPlayerRemote.currentSong) - } - - override fun toggleFavorite(song: Song) { - super.toggleFavorite(song) - if (song.id == MusicPlayerRemote.currentSong.id) { - updateIsFavorite() - } - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_slide_player, container, false) - } - - override fun onResume() { - super.onResume() - progressViewUpdateHelper.start() - } - - override fun onPause() { - super.onPause() - progressViewUpdateHelper.stop() - } - - - override fun onPlayingMetaChanged() { - super.onPlayingMetaChanged() - updateSong() - updateIsFavorite() - } - - override fun onQueueChanged() { - super.onQueueChanged() - updateQueue() - } - - override fun onServiceConnected() { - updatePlayPauseDrawableState() - updateRepeatState() - updateShuffleState() - updateSong() - updateIsFavorite() - updateQueue() - } - - private fun updateQueue() { - songAdapter.swapDataSet(MusicPlayerRemote.playingQueue) - } - - - - - private fun updatePlayPauseDrawableState() { - if (MusicPlayerRemote.isPlaying) { - albumCoverContainer.cardElevation = 24.0f - playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - } else { - albumCoverContainer.cardElevation = 0.0f - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) - } - } - - fun updateRepeatState() { - when (MusicPlayerRemote.repeatMode) { - MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) - repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - } - } - - fun updateShuffleState() { - when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - else -> shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - } - - - private fun updateSong() { - val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName - - GlideApp.with(activity!!).asBitmapPalette() - .load(RetroGlideExtension.getSongModel(song)) - .songOptions(song) - .transition(RetroGlideExtension.getDefaultTransition()) - .into(object : RetroMusicColoredTarget(playerImage) { - override fun onColorReady(color: Int) { - setColor(color) - } - }) - } - - private fun setColor(color: Int) { - lastColor = color - val colorBg = ATHUtil.resolveColor(context!!, android.R.attr.colorBackground) - if (ColorUtil.isColorLight(colorBg)) { - lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(context!!, true) - lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(context!!, true) - } else { - lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(context!!, false) - lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(context!!, false) - } - - val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) { - color - } else { - ThemeStore.accentColor(context!!) - } - - - text.setTextColor(colorFinal) - playerQueueSubHeader.setTextColor(colorFinal) - TintHelper.setTintAuto(playPauseButton, lastPlaybackControlsColor, false) - ViewUtil.setProgressDrawable(progressSlider, colorFinal) - - updateRepeatState() - updateShuffleState() - updatePrevNextColor() - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setUpMusicControllers() - setUpPlayerToolbar() - (activity as AbsSlidingMusicPanelActivity).setAntiDragView(recyclerView) - playerQueueSubHeader.setTextColor(ThemeStore.accentColor(context!!)) - } - - private fun setUpMusicControllers() { - setUpPlayPauseFab() - setUpPrevNext() - setUpRepeatButton() - setUpShuffleButton() - setUpProgressSlider() - setUpRecyclerView() - } - - private lateinit var songAdapter: SimpleSongAdapter - - private fun setUpRecyclerView() { - songAdapter = SimpleSongAdapter(context = activity as AppCompatActivity, - songs = ArrayList(), i = R.layout.item_song, useNumbers = true) - recyclerView.apply { - adapter = songAdapter - layoutManager = LinearLayoutManager(context) - } - } - - private fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - if (fromUser) { - MusicPlayerRemote.seekTo(progress) - onUpdateProgressViews(MusicPlayerRemote.songProgressMillis, MusicPlayerRemote.songDurationMillis) - } - } - }) - } - - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total - - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) - animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME - animator.interpolator = LinearInterpolator() - animator.start() - - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) - } - - private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) - } - - private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } - } - - private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } - } - - private fun setUpPrevNext() { - updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } - } - - private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - - private var lastPlaybackControlsColor: Int = 0 - private var lastDisabledPlaybackControlsColor: Int = 0 - private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper - - override fun onPlayStateChanged() { - updatePlayPauseDrawableState() - } - - override fun onRepeatModeChanged() { - updateRepeatState() - } - - override fun onShuffleModeChanged() { - updateShuffleState() - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) - } - - private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { activity!!.onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) - - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) - } - - fun RecyclerView.smoothSnapToPosition(position: Int, snapMode: Int = LinearSmoothScroller.SNAP_TO_START) { - val smoothScroller = object : LinearSmoothScroller(this.context) { - override fun getVerticalSnapPreference(): Int { - return snapMode - } - - override fun getHorizontalSnapPreference(): Int { - return snapMode - } - } - smoothScroller.targetPosition = position - this.layoutManager?.startSmoothScroll(smoothScroller) - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 3ac5206e..4e2c15ac 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -75,8 +75,7 @@ abstract class AbsSettingsFragment : PreferenceFragmentCompat() { dialogFragment = AlbumCoverStylePreferenceDialog.newInstance(preference.key); } if (preference is MaterialListPreference) { - val entries = preference.entries - + preference.entries dialogFragment = MaterialListPreferenceDialog.newInstance(preference) } if (preference is BlacklistPreference) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 0e9ca834..bb61c777 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -14,27 +14,24 @@ package code.name.monkey.retromusic.fragments.settings -import android.graphics.Bitmap +import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes -import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.retromusic.Constants.USER_PROFILE +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.SettingsActivity -import code.name.monkey.retromusic.util.Compressor +import code.name.monkey.retromusic.extensions.hide +import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.util.NavigationUtil -import code.name.monkey.retromusic.util.PreferenceUtil -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.fragment_main_settings.* -import java.io.File -import java.util.* class MainSettingsFragment : Fragment(), View.OnClickListener { @@ -70,30 +67,27 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { otherSettings.setOnClickListener(this) aboutSettings.setOnClickListener(this) - text.setTextColor(ThemeStore.textColorSecondary(context!!)) - text.text = PreferenceUtil.getInstance().userBio - titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) - titleWelcome.text = String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance().userName) - userInfoContainer.setOnClickListener { NavigationUtil.goToUserInfo(activity!!) } + buyProContainer.apply { + if (!App.isProVersion) show() else hide() + setOnClickListener { + NavigationUtil.goToProVersion(context) + } + } + buyPremium.setOnClickListener { + NavigationUtil.goToProVersion(context!!) + } + MaterialUtil.setTint(buyPremium) + val primaryColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(ThemeStore.primaryColor(context!!))) + text.setTextColor(ColorUtil.withAlpha(primaryColor, 0.75f)) + //title.setTextColor(primaryColor) + text2.setTextColor(primaryColor) + text3.imageTintList = ColorStateList.valueOf(primaryColor) + } + private fun inflateFragment(fragment: Fragment, @StringRes title: Int) { if (activity != null) { (activity as SettingsActivity).setupFragment(fragment, title) } } - - private fun getTimeOfTheDay(): String { - var message = getString(R.string.title_good_day) - val c = Calendar.getInstance() - val timeOfDay = c.get(Calendar.HOUR_OF_DAY) - - when (timeOfDay) { - in 0..5 -> message = getString(R.string.title_good_night) - in 6..11 -> message = getString(R.string.title_good_morning) - in 12..15 -> message = getString(R.string.title_good_afternoon) - in 16..19 -> message = getString(R.string.title_good_evening) - in 20..23 -> message = getString(R.string.title_good_night) - } - return message - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt index e497178d..ee8a997f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt @@ -36,8 +36,6 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh activity!!.recreate() return@setOnPreferenceChangeListener true } - - val toggleFullScreen: TwoStatePreference = findPreference("toggle_full_screen")!! toggleFullScreen.setOnPreferenceChangeListener { _, _ -> activity!!.recreate() diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index 3b65f126..5f1ade9c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -96,8 +96,7 @@ object MusicPlayerRemote { val isServiceConnected: Boolean get() = musicService != null - fun bindToService(context: Context, - callback: ServiceConnection): ServiceToken? { + fun bindToService(context: Context, callback: ServiceConnection): ServiceToken? { var realActivity: Activity? = (context as Activity).parent if (realActivity == null) { @@ -105,6 +104,7 @@ object MusicPlayerRemote { } val contextWrapper = ContextWrapper(realActivity) + contextWrapper.startService(Intent(contextWrapper, MusicService::class.java)) val binder = ServiceBinder(callback) @@ -129,24 +129,21 @@ object MusicPlayerRemote { } private fun getFilePathFromUri(context: Context, uri: Uri): String? { - + var cursor: Cursor? = null val column = "_data" val projection = arrayOf(column) - var cursor: Cursor? = null + try { cursor = context.contentResolver.query(uri, projection, null, null, null) - cursor.use { - if (it.moveToFirst()) { - val columnIndex = it.getColumnIndexOrThrow(column) - return it.getString(columnIndex) - } + if (cursor != null && cursor.moveToFirst()) { + val column_index = cursor.getColumnIndexOrThrow(column) + return cursor.getString(column_index) } } catch (e: Exception) { Log.e(TAG, e.message) } finally { - cursor!!.close() + cursor?.close() } - return null } diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt deleted file mode 100644 index 2102843e..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc - -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.disposables.Disposable - -object DisposableManager { - - private var compositeDisposable: CompositeDisposable? = null - - fun add(disposable: Disposable) { - getCompositeDisposable().add(disposable) - } - - fun dispose() { - getCompositeDisposable().dispose() - } - - private fun getCompositeDisposable(): CompositeDisposable { - if (compositeDisposable == null || compositeDisposable!!.isDisposed) { - compositeDisposable = CompositeDisposable() - } - return compositeDisposable!! - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt deleted file mode 100644 index dcb3c8ac..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc - -import androidx.annotation.CallSuper -import io.reactivex.Observer -import io.reactivex.disposables.Disposable - -class DisposingObserver : Observer { - @CallSuper - override fun onSubscribe(d: Disposable) { - DisposableManager.add(d) - } - - override fun onNext(next: T) {} - - override fun onError(e: Throwable) {} - - override fun onComplete() {} -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java b/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java deleted file mode 100644 index 7f416f69..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc; - -import android.content.Context; -import android.os.Handler; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; -import android.view.animation.LinearInterpolator; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; - -import androidx.annotation.NonNull; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.ViewCompat; - -/*Don't delete even if its not showing not using*/ -public class ScrollAwareFABBehavior extends CoordinatorLayout.Behavior { - private static final String TAG = "ScrollingFABBehavior"; - Handler mHandler; - - public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { - super(); - } - - @Override - public void onStopNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View target) { - super.onStopNestedScroll(coordinatorLayout, child, target); - - if (mHandler == null) - mHandler = new Handler(); - - - mHandler.postDelayed(() -> { - child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); - Log.d("FabAnim", "startHandler()"); - }, 1000); - - } - - @Override - public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View target, - int dxConsumed, - int dyConsumed, - int dxUnconsumed, - int dyUnconsumed) { - super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); - - //child -> Floating Action Button - if (dyConsumed > 0) { - Log.d("Scrolling", "Up"); - CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); - int fab_bottomMargin = layoutParams.bottomMargin; - child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start(); - } else if (dyConsumed < 0) { - Log.d("Scrolling", "down"); - child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); - } - } - - @Override - public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View directTargetChild, - @NonNull View target, - int nestedScrollAxes) { - if (mHandler != null) { - mHandler.removeMessages(0); - Log.d("Scrolling", "stopHandler()"); - } - return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java b/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java deleted file mode 100644 index 984bba15..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc; - -import android.graphics.Rect; -import android.view.View; - -import androidx.recyclerview.widget.RecyclerView; - -public class SpacesItemDecoration extends RecyclerView.ItemDecoration { - private int space; - - public SpacesItemDecoration(int space) { - this.space = space; - } - - @Override - public void getItemOffsets(Rect outRect, View view, - RecyclerView parent, RecyclerView.State state) { - outRect.right = space; - outRect.bottom = space; - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index a39cc086..59e5c8e3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -69,7 +69,7 @@ class AlbumCoverStylePreferenceDialog : PreferenceDialogFragmentCompat(), ViewPa viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt() viewPager.currentItem = PreferenceUtil.getInstance().albumCoverStyle.ordinal - return MaterialDialog(activity!!, BottomSheet()).show { + return MaterialDialog(activity!!).show { title(R.string.pref_title_album_cover_style) positiveButton(R.string.set) { val nowPlayingScreen = AlbumCoverStyle.values()[viewPagerPosition] diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt index 4e55139e..31bcd508 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt @@ -16,11 +16,13 @@ package code.name.monkey.retromusic.preferences import android.app.Dialog import android.content.Context +import android.graphics.PorterDuff import android.os.Bundle import android.text.Html import android.util.AttributeSet import androidx.fragment.app.DialogFragment -import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference +import androidx.preference.DialogPreference +import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import code.name.monkey.retromusic.dialogs.BlacklistFolderChooserDialog import code.name.monkey.retromusic.providers.BlacklistStore @@ -30,7 +32,7 @@ import com.afollestad.materialdialogs.list.listItems import java.io.File import java.util.* -class BlacklistPreference : ATEDialogPreference { +class BlacklistPreference : DialogPreference { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) @@ -38,6 +40,10 @@ class BlacklistPreference : ATEDialogPreference { constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + + init { + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) + } } class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog.FolderCallback { diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt index 31956372..cff272f2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt @@ -17,10 +17,12 @@ package code.name.monkey.retromusic.preferences import android.app.Dialog import android.content.Context import android.content.res.TypedArray +import android.graphics.PorterDuff import android.os.Bundle import android.util.AttributeSet import androidx.preference.ListPreference import androidx.preference.PreferenceDialogFragmentCompat +import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet @@ -30,13 +32,25 @@ import com.afollestad.materialdialogs.list.listItemsSingleChoice class MaterialListPreference : ListPreference { private val mLayoutRes = R.layout.ate_preference_list - constructor(context: Context) : super(context) + constructor(context: Context) : super(context) { + init(context) + } - constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + private fun init(context: Context) { + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) + } - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context) + } - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) { + init(context) + } override fun getDialogLayoutResource(): Int { return mLayoutRes @@ -64,7 +78,7 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { val entries = arguments?.getStringArrayList(EXTRA_ENTRIES) val entriesValues = arguments?.getStringArrayList(EXTRA_ENTRIES_VALUES) - return MaterialDialog(activity!!, BottomSheet()) + materialDialog = MaterialDialog(activity!!, BottomSheet()) .show { title(text = materialListPreference.title.toString()) positiveButton(R.string.set) @@ -75,11 +89,14 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { dismiss() } } + return materialDialog } + private lateinit var materialDialog: MaterialDialog + override fun onDialogClosed(positiveResult: Boolean) { if (positiveResult) { - dismiss() + materialDialog.dismiss() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index 6a05afec..25d6c398 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -84,10 +84,9 @@ class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(), ViewP viewPager.currentItem = PreferenceUtil.getInstance().nowPlayingScreen.ordinal - return MaterialDialog(activity!!, BottomSheet()).show { + return MaterialDialog(activity!!).show { title(R.string.pref_title_album_cover_style) positiveButton(R.string.set) { - val nowPlayingScreen = NowPlayingScreen.values()[viewPagerPosition] if (isNowPlayingThemes(nowPlayingScreen)) { val result = getString(nowPlayingScreen.titleRes) + " theme is Pro version feature." diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt b/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt deleted file mode 100644 index 7d96e075..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.providers - -import android.content.ContentValues -import android.content.Context -import android.database.sqlite.SQLiteDatabase -import android.database.sqlite.SQLiteOpenHelper -import code.name.monkey.retromusic.loaders.SongLoader -import code.name.monkey.retromusic.model.Song -import io.reactivex.schedulers.Schedulers - -class NotPlayedStore(val context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, VERSION) { - - private val dataBaseCreate = "CREATE TABLE IF NOT EXISTS $NAME ( $ID LONG PRIMARY KEY )" - - override fun onCreate(db: SQLiteDatabase) { - db.execSQL(dataBaseCreate) - } - - override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { - db.execSQL("DROP TABLE IF EXISTS $NAME") - } - - fun removeSong(id: Long) { - val db = writableDatabase - db.apply { - beginTransaction() - delete(NAME, "$ID = $id", null) - setTransactionSuccessful() - endTransaction() - close() - } - } - - fun addAllSongs(songs: ArrayList) { - SongLoader.getAllSongs(context) - .map { - val database = writableDatabase; - database.apply { - val contentValues = ContentValues() - for (song in songs) { - contentValues.put(ID, song.id) - insert(NAME, null, contentValues) - } - setTransactionSuccessful() - endTransaction() - } - return@map true - } - .subscribeOn(Schedulers.io()) - .subscribe() - } - - companion object { - const val NAME = "not_played_songs" - const val ID = "song_id" - const val DATABASE_NAME = "not_played.db" - private const val VERSION = 1 - private var sInstance: NotPlayedStore? = null - - @Synchronized - fun getInstance(context: Context): NotPlayedStore { - if (sInstance == null) { - sInstance = NotPlayedStore(context.applicationContext) - } - return sInstance!! - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java b/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java deleted file mode 100644 index c2ca1d63..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java +++ /dev/null @@ -1,89 +0,0 @@ - -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest; - -import android.content.Context; - -import java.io.File; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import code.name.monkey.retromusic.App; -import code.name.monkey.retromusic.rest.service.KuGouApiService; -import okhttp3.Cache; -import okhttp3.Call; -import okhttp3.Interceptor; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import retrofit2.Retrofit; -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; -import retrofit2.converter.gson.GsonConverterFactory; - -import static code.name.monkey.retromusic.Constants.BASE_API_URL_KUGOU; - -/** - * Created by hemanths on 23/08/17. - */ - -public class KogouClient { - - private static final String BASE_URL = BASE_API_URL_KUGOU; - - private KuGouApiService apiService; - - public KogouClient() { - this(createDefaultOkHttpClientBuilder().build()); - } - - private KogouClient(@NonNull Call.Factory client) { - Retrofit restAdapter = new Retrofit.Builder() - .baseUrl(BASE_URL) - .callFactory(client) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .build(); - - apiService = restAdapter.create(KuGouApiService.class); - } - - @Nullable - private static Cache createDefaultCache(Context context) { - File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/"); - if (cacheDir.mkdirs() || cacheDir.isDirectory()) { - return new Cache(cacheDir, 1024 * 1024 * 10); - } - return null; - } - - private static Interceptor createCacheControlInterceptor() { - return chain -> { - Request modifiedRequest = chain.request().newBuilder() - .addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000)) - .build(); - return chain.proceed(modifiedRequest); - }; - } - - private static OkHttpClient.Builder createDefaultOkHttpClientBuilder() { - return new OkHttpClient.Builder() - .cache(createDefaultCache(App.Companion.getInstance())) - .addInterceptor(createCacheControlInterceptor()); - } - - public KuGouApiService getApiService() { - return apiService; - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java deleted file mode 100644 index e4e491f5..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.model; - -import com.google.gson.annotations.SerializedName; - -/** - * Created by hefuyi on 2017/1/20. - */ - -public class KuGouRawLyric { - - private static final String CHARSET = "charset"; - private static final String CONTENT = "content"; - private static final String FMT = "fmt"; - private static final String INFO = "info"; - private static final String STATUS = "status"; - - @SerializedName(CHARSET) - public String charset; - - @SerializedName(CONTENT) - public String content; - - @SerializedName(FMT) - public String fmt; - @SerializedName(INFO) - public String info; - @SerializedName(STATUS) - public int status; - - @Override - public String toString() { - return "KuGouRawLyric{" + - "charset='" + charset + '\'' + - ", content='" + content + '\'' + - ", fmt='" + fmt + '\'' + - ", info='" + info + '\'' + - ", status=" + status + - '}'; - } - -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java deleted file mode 100644 index 3667ac05..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.model; - -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -import androidx.annotation.NonNull; - -/** - * Created by hefuyi on 2017/1/20. - */ - -public class KuGouSearchLyricResult { - - private static final String INFO = "info"; - private static final String STATUS = "status"; - private static final String PROPOSAL = "proposal"; - private static final String KEYWORD = "keyword"; - private static final String CANDIDATES = "candidates"; - - @NonNull - @SerializedName(INFO) - public String info; - - @SerializedName(STATUS) - public int status; - - @NonNull - @SerializedName(PROPOSAL) - public String proposal; - - @NonNull - @SerializedName(KEYWORD) - public String keyword; - - @NonNull - @SerializedName(CANDIDATES) - public List candidates; - - @Override - public String toString() { - return "KuGouSearchLyricResult{" + - "info='" + info + '\'' + - ", status=" + status + - ", proposal='" + proposal + '\'' + - ", keyword='" + keyword + '\'' + - ", candidates=" + candidates + - '}'; - } - - public static class Candidates { - private static final String NICKNAME = "nickname"; - private static final String ACCESSKEY = "accesskey"; - private static final String SCORE = "score"; - private static final String DURATION = "duration"; - private static final String UID = "uid"; - private static final String SONG = "song"; - private static final String ID = "id"; - private static final String SINGER = "singer"; - private static final String LANGUAGE = "language"; - @SerializedName(NICKNAME) - public String nickname; - @SerializedName(ACCESSKEY) - public String accesskey; - @SerializedName(SCORE) - public int score; - @SerializedName(DURATION) - public long duration; - @SerializedName(UID) - public String uid; - @SerializedName(SONG) - public String songName; - @SerializedName(ID) - public String id; - @SerializedName(SINGER) - public String singer; - @SerializedName(LANGUAGE) - public String language; - - @Override - public String toString() { - return "Candidates{" + - "nickname='" + nickname + '\'' + - ", accesskey='" + accesskey + '\'' + - ", score=" + score + - ", duration=" + duration + - ", uid='" + uid + '\'' + - ", songName='" + songName + '\'' + - ", id='" + id + '\'' + - ", singer='" + singer + '\'' + - ", language='" + language + '\'' + - '}'; - } - - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java b/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java deleted file mode 100644 index ff82ecaa..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.service; - -import androidx.annotation.NonNull; -import code.name.monkey.retromusic.rest.model.KuGouRawLyric; -import code.name.monkey.retromusic.rest.model.KuGouSearchLyricResult; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -/** - * Created by hemanths on 28/07/17. - */ - -public interface KuGouApiService { - - @NonNull - @GET("search?ver=1&man=yes&client=pc") - Observable searchLyric(@Query("keyword") @NonNull String songName, @Query("duration") @NonNull String duration); - - @NonNull - @GET("download?ver=1&client=pc&fmt=lrc&charset=utf8") - Observable getRawLyric(@Query("id") @NonNull String id, @Query("accesskey") @NonNull String accesskey); -} diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index 7d1e08a0..e6d612f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -173,7 +173,7 @@ class PlayingNotificationImpl : PlayingNotification() { if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp, primary)!!, 1.5f) + R.drawable.ic_play_arrow_white_32dp, primary)!!, 1.5f) notificationLayout.setTextColor(R.id.title, primary) notificationLayout.setTextColor(R.id.text, secondary) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt index 137d314a..3577b583 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt @@ -52,7 +52,7 @@ class PlayingNotificationImpl24 : PlayingNotification() { val playButtonResId = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp val action = Intent(service, MainActivity::class.java) action.putExtra("expand", true) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index 5d722e16..d57f5b44 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -163,7 +163,7 @@ class PlayingNotificationOreo : PlayingNotification() { if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp, primary)!!, PlayingNotification.NOTIFICATION_CONTROLS_SIZE_MULTIPLIER) + R.drawable.ic_play_arrow_white_32dp, primary)!!, PlayingNotification.NOTIFICATION_CONTROLS_SIZE_MULTIPLIER) notificationLayout.setTextColor(R.id.title, primary) notificationLayout.setTextColor(R.id.subtitle, secondary) diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java b/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java deleted file mode 100644 index abeb39e1..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.transform; - -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.viewpager.widget.ViewPager; - -/** - * Created by hemanths on 3/9/19 - */ -public class RoundStackTransformer implements ViewPager.PageTransformer { - @Override - public void transformPage(@NonNull View page, float position) { - - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt deleted file mode 100644 index 8215c423..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.transform - -import android.view.View -import androidx.viewpager.widget.ViewPager - -class StackPagerTransformer : ViewPager.PageTransformer { - - - override fun transformPage(view: View, position: Float) { - - if (position < -1f) { - view.translationX = view.width * position - } - - if (position < 0f) { - view.translationX = 0f - view.scaleX = 1f - view.scaleY = 1f - - } else if (position <= 1f) { - - val scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)) - view.pivotY = 0.5f * view.height - view.translationX = view.width * -position - view.scaleX = scaleFactor - view.scaleY = scaleFactor - } - } - - companion object { - private val MIN_SCALE = 0.75f - } -} 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 2c39e534..4a4a3bc3 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 @@ -26,10 +26,8 @@ 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; -import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.activities.AboutActivity; import code.name.monkey.retromusic.activities.AlbumDetailsActivity; import code.name.monkey.retromusic.activities.ArtistDetailActivity; @@ -45,6 +43,9 @@ import code.name.monkey.retromusic.activities.SettingsActivity; import code.name.monkey.retromusic.activities.SupportDevelopmentActivity; import code.name.monkey.retromusic.activities.UserInfoActivity; import code.name.monkey.retromusic.activities.WhatsNewActivity; +import code.name.monkey.retromusic.helper.MusicPlayerRemote; +import code.name.monkey.retromusic.model.Genre; +import code.name.monkey.retromusic.model.Playlist; import static code.name.monkey.retromusic.Constants.RATE_ON_GOOGLE_PLAY; import static code.name.monkey.retromusic.util.RetroUtil.openUrl; @@ -146,19 +147,28 @@ public class NavigationUtil { ActivityCompat.startActivity(activity, new Intent(activity, LicenseActivity.class), null); } - public static void goToSearch(Activity activity) { - ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class), null); + public static void goToSearch(@NonNull Activity activity, + @Nullable Pair... sharedElements) { + ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class), + ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } - public static void goToSupportDevelopment(Activity activity) { + public static void goToSearch(@NonNull Activity activity, boolean isMicOpen, + @Nullable Pair... sharedElements) { + ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class) + .putExtra(SearchActivity.EXTRA_SHOW_MIC, isMicOpen), + ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + } + + public static void goToSupportDevelopment(@NonNull Activity activity) { ActivityCompat.startActivity(activity, new Intent(activity, SupportDevelopmentActivity.class), null); } - public static void goToPlayStore(Activity activity) { + public static void goToPlayStore(@NonNull Activity activity) { openUrl(activity, RATE_ON_GOOGLE_PLAY); } - public static void gotoWhatNews(Activity activity) { + public static void gotoWhatNews(@NonNull Activity activity) { ActivityCompat.startActivity(activity, new Intent(activity, WhatsNewActivity.class), null); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index a292900e..c06c41a1 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -61,15 +61,26 @@ import java.util.Collections; import java.util.List; import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.retromusic.App; +import code.name.monkey.retromusic.R; public class RetroUtil { private static final int[] TEMP_ARRAY = new int[1]; private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; - public static int calculateNoOfColumns(Context context) { + public static int toolbarColor(@NonNull Context context) { + int color = ThemeStore.Companion.primaryColor(context); + if (ATHUtil.INSTANCE.isWindowBackgroundDark(context)) { + return ATHUtil.INSTANCE.resolveColor(context, R.attr.cardBackgroundColor); + } else { + return color; + } + } + + public static int calculateNoOfColumns(@NonNull Context context) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); float dpWidth = displayMetrics.widthPixels / displayMetrics.density; return (int) (dpWidth / 180); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java deleted file mode 100644 index ac7ebb68..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.util; - -import android.app.Activity; -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.util.DisplayMetrics; -import android.view.ViewGroup; - -import code.name.monkey.retromusic.App; - -public class SystemUtils { - - private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height"; - private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height"; - private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape"; - private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width"; - private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; - private final float mSmallestWidthDp; - private final boolean mInPortrait; - - private Activity activity; - - public SystemUtils(Activity activity) { - this.activity = activity; - Resources resources = activity.getResources(); - mSmallestWidthDp = getSmallestWidthDp(activity); - mInPortrait = (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); - } - - private static boolean hasNavBar(Resources resources) { - int id = resources.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android"); - if (id > 0) - return resources.getBoolean(id); - else - return false; - } - - public static int getNavigationBarHeight() { - int result = 0; - int resourceId = App.Companion.getContext().getResources().getIdentifier("navigation_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = App.Companion.getContext().getResources().getDimensionPixelSize(resourceId); - } - return result; - } - - public int getComboHeight() { - if (isNavigationAtBottom()) { - return getNavigationBarWidth(); - } else { - return getNavigationBarHeight(); - } - } - - public int getNavigationBarWidth() { - Resources res = activity.getResources(); - int result = 0; - if (hasNavBar(activity.getResources())) { - if (!isNavigationAtBottom()) - return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME); - } - return result; - } - - public void addPadding(ViewGroup viewGroup) { - Context context = viewGroup.getContext(); - Resources resources = context.getResources(); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewGroup.getLayoutParams(); - if (isNavigationAtBottom()) { - params.leftMargin = getNavigationBarWidth(); - params.rightMargin = getNavigationBarWidth(); - } else { - params.bottomMargin = getNavigationBarHeight(); - } - } - - private int getInternalDimensionSize(Resources res, String key) { - int result = 0; - int resourceId = res.getIdentifier(key, "dimen", "android"); - if (resourceId > 0) { - result = res.getDimensionPixelSize(resourceId); - } - return result; - } - - private float getSmallestWidthDp(Activity activity) { - DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); - float widthDp = metrics.widthPixels / metrics.density; - float heightDp = metrics.heightPixels / metrics.density; - return Math.min(widthDp, heightDp); - } - - boolean isNavigationAtBottom() { - return (mSmallestWidthDp >= 600 || mInPortrait); - } - -} 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 1d8ff139..5c7fe4e4 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 @@ -19,8 +19,6 @@ import android.content.res.ColorStateList import android.graphics.Color import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R @@ -47,20 +45,8 @@ class ColorIconsImageView : AppCompatImageView { private fun setIconBackgroundColor(color: Int) { setBackgroundResource(R.drawable.color_circle_gradient) - - val alpha = if (ATHUtil.isWindowBackgroundDark(context)) { - 1.0f - } else { - 0.12f - } - val filterColor = if (ATHUtil.isWindowBackgroundDark(context)) { - ThemeStore.primaryColor(context) - } else { - color - } - - backgroundTintList = ColorStateList.valueOf(ColorUtil.adjustAlpha(color, alpha)) - imageTintList = ColorStateList.valueOf(filterColor) + backgroundTintList = ColorStateList.valueOf(ColorUtil.adjustAlpha(color, 0.22f)) + imageTintList = ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.75f)) requestLayout() invalidate() } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt b/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt deleted file mode 100644 index 069b8b6c..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.views - -import android.content.Context -import android.content.res.ColorStateList -import android.util.AttributeSet -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ATHUtil -import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.MaterialValueHelper -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.util.RetroUtil -import com.google.android.material.button.MaterialButton - -class MaterialButtonTextColor @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = -1) : MaterialButton(context, attrs, defStyleAttr) { - - init { - setTextColor(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(ThemeStore.primaryColor(getContext())))) - iconTint = ColorStateList.valueOf(ATHUtil.resolveColor(context, R.attr.iconColor)) - rippleColor = ColorStateList.valueOf(ColorUtil.withAlpha(ThemeStore.accentColor(context), 0.4f)) - //minHeight = RetroUtil.convertDpToPixel(42f, context).toInt() - iconSize = RetroUtil.convertDpToPixel(20f, context).toInt() - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java b/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java deleted file mode 100644 index 863e615f..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.views; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PixelFormat; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import androidx.annotation.NonNull; -import android.util.Property; -import android.view.animation.DecelerateInterpolator; - -import code.name.monkey.retromusic.R; - - -public class PlayPauseDrawable extends Drawable { - private static final long PLAY_PAUSE_ANIMATION_DURATION = 250; - - private static final Property PROGRESS = - new Property(Float.class, "progress") { - @Override - public Float get(@NonNull PlayPauseDrawable d) { - return d.getProgress(); - } - - @Override - public void set(@NonNull PlayPauseDrawable d, Float value) { - d.setProgress(value); - } - }; - - private final Path leftPauseBar = new Path(); - private final Path rightPauseBar = new Path(); - private final Paint paint = new Paint(); - private final float pauseBarWidth; - private final float pauseBarHeight; - private final float pauseBarDistance; - - private float width; - private float height; - - private float progress; - private boolean isPlay; - private boolean isPlaySet; - - private Animator animator; - - public PlayPauseDrawable(@NonNull Context context) { - final Resources res = context.getResources(); - paint.setAntiAlias(true); - paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.WHITE); - - pauseBarWidth = res.getDimensionPixelSize(R.dimen.pause_bar_width); - pauseBarHeight = res.getDimensionPixelSize(R.dimen.pause_bar_height); - pauseBarDistance = res.getDimensionPixelSize(R.dimen.pause_bar_distance); - } - - /** - * Linear interpolate between a and b with parameter t. - */ - private static float lerp(float a, float b, float t) { - return a + (b - a) * t; - } - - @Override - protected void onBoundsChange(@NonNull final Rect bounds) { - super.onBoundsChange(bounds); - if (bounds.width() > 0 && bounds.height() > 0) { - width = bounds.width(); - height = bounds.height(); - } - } - - @Override - public void draw(@NonNull Canvas canvas) { - leftPauseBar.rewind(); - rightPauseBar.rewind(); - - // The current distance between the two pause bars. - final float barDist = lerp(pauseBarDistance, 0f, progress); - // The current width of each pause bar. - float rawBarWidth = lerp(pauseBarWidth, pauseBarHeight / 1.75f, progress); - // We have to round the bar width when finishing the progress to prevent the gap - // that might occur onDraw because of a pixel is lost when casting float to int instead of rounding it. - final float barWidth = progress == 1f ? Math.round(rawBarWidth) : rawBarWidth; - // The current position of the left pause bar's top left coordinate. - final float firstBarTopLeft = lerp(0f, barWidth, progress); - // The current position of the right pause bar's top right coordinate. - final float secondBarTopRight = lerp(2f * barWidth + barDist, barWidth + barDist, progress); - - // Draw the left pause bar. The left pause bar transforms into the - // top half of the play button triangle by animating the position of the - // rectangle's top left coordinate and expanding its bottom width. - leftPauseBar.moveTo(0f, 0f); - leftPauseBar.lineTo(firstBarTopLeft, -pauseBarHeight); - leftPauseBar.lineTo(barWidth, -pauseBarHeight); - leftPauseBar.lineTo(barWidth, 0f); - leftPauseBar.close(); - - // Draw the right pause bar. The right pause bar transforms into the - // bottom half of the play button triangle by animating the position of the - // rectangle's top right coordinate and expanding its bottom width. - rightPauseBar.moveTo(barWidth + barDist, 0f); - rightPauseBar.lineTo(barWidth + barDist, -pauseBarHeight); - rightPauseBar.lineTo(secondBarTopRight, -pauseBarHeight); - rightPauseBar.lineTo(2 * barWidth + barDist, 0f); - rightPauseBar.close(); - - final int saveCount = canvas.save(); - - // Translate the play button a tiny bit to the right so it looks more centered. - canvas.translate(lerp(0f, pauseBarHeight / 8f, progress), 0f); - - // (1) Pause --> Play: rotate 0 to 90 degrees clockwise. - // (2) Play --> Pause: rotate 90 to 180 degrees clockwise. - final float rotationProgress = isPlay ? 1f - progress : progress; - final float startingRotation = isPlay ? 90f : 0f; - canvas.rotate(lerp(startingRotation, startingRotation + 90f, rotationProgress), width / 2f, height / 2f); - - // Position the pause/play button in the center of the drawable's bounds. - canvas.translate(Math.round(width / 2f - ((2f * barWidth + barDist) / 2f)), Math.round(height / 2f + (pauseBarHeight / 2f))); - - // Draw the two bars that form the animated pause/play button. - canvas.drawPath(leftPauseBar, paint); - canvas.drawPath(rightPauseBar, paint); - - canvas.restoreToCount(saveCount); - } - - @NonNull - private Animator getPausePlayAnimator() { - isPlaySet = !isPlaySet; - final Animator anim = ObjectAnimator.ofFloat(this, PROGRESS, isPlay ? 1f : 0f, isPlay ? 0f : 1f); - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - isPlay = !isPlay; - } - }); - return anim; - } - - private float getProgress() { - return progress; - } - - private void setProgress(float progress) { - this.progress = progress; - invalidateSelf(); - } - - @Override - public void setAlpha(int alpha) { - paint.setAlpha(alpha); - invalidateSelf(); - } - - @Override - public void setColorFilter(ColorFilter cf) { - paint.setColorFilter(cf); - invalidateSelf(); - } - - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } - - public void setPlay(boolean animate) { - if (animate) { - if (!isPlaySet) { - togglePlayPause(); - } - } else { - isPlaySet = true; - isPlay = true; - setProgress(1f); - } - } - - public void setPause(boolean animate) { - if (animate) { - if (isPlaySet) { - togglePlayPause(); - } - } else { - isPlaySet = false; - isPlay = false; - setProgress(0f); - } - } - - public void togglePlayPause() { - if (animator != null) { - animator.cancel(); - } - - animator = getPausePlayAnimator(); - animator.setInterpolator(new DecelerateInterpolator()); - animator.setDuration(PLAY_PAUSE_ANIMATION_DURATION); - animator.start(); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt b/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt deleted file mode 100644 index 58f69863..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.views - -import android.content.Context -import android.graphics.PorterDuff -import android.graphics.drawable.Drawable -import android.util.AttributeSet -import androidx.appcompat.widget.Toolbar -import code.name.monkey.appthemehelper.ThemeStore - -class TintIconColorToolbar : Toolbar { - constructor(context: Context) : super(context) - - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) - - - override fun setNavigationIcon(icon: Drawable?) { - super.setNavigationIcon(icon) - icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) - } -} diff --git a/app/src/main/res/drawable/ic_blur_on_white_24dp.xml b/app/src/main/res/drawable/ic_blur_on_white_24dp.xml new file mode 100644 index 00000000..d7123060 --- /dev/null +++ b/app/src/main/res/drawable/ic_blur_on_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml b/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml new file mode 100644 index 00000000..727f837d --- /dev/null +++ b/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cellphone_white_24dp.xml b/app/src/main/res/drawable/ic_cellphone_white_24dp.xml new file mode 100644 index 00000000..af68ec02 --- /dev/null +++ b/app/src/main/res/drawable/ic_cellphone_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_color_lens_white_24dp.xml b/app/src/main/res/drawable/ic_color_lens_white_24dp.xml new file mode 100644 index 00000000..31e47f8f --- /dev/null +++ b/app/src/main/res/drawable/ic_color_lens_white_24dp.xml @@ -0,0 +1,36 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_colorize_white_24dp.xml b/app/src/main/res/drawable/ic_colorize_white_24dp.xml new file mode 100644 index 00000000..a2c2b5b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_colorize_white_24dp.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml b/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml new file mode 100644 index 00000000..7a27f671 --- /dev/null +++ b/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_file_music_white_24dp.xml b/app/src/main/res/drawable/ic_file_music_white_24dp.xml index efb25ba9..1cc66b8d 100644 --- a/app/src/main/res/drawable/ic_file_music_white_24dp.xml +++ b/app/src/main/res/drawable/ic_file_music_white_24dp.xml @@ -1,8 +1,22 @@ + + + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_filter_song_white_24dp.xml b/app/src/main/res/drawable/ic_filter_song_white_24dp.xml new file mode 100644 index 00000000..a967acba --- /dev/null +++ b/app/src/main/res/drawable/ic_filter_song_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home_selected_white_24dp.xml b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml index 832b5788..6f6136f0 100644 --- a/app/src/main/res/drawable/ic_home_selected_white_24dp.xml +++ b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml @@ -4,8 +4,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + android:pathData="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home_white_24dp.xml b/app/src/main/res/drawable/ic_home_white_24dp.xml index b78bab9d..76f069b7 100644 --- a/app/src/main/res/drawable/ic_home_white_24dp.xml +++ b/app/src/main/res/drawable/ic_home_white_24dp.xml @@ -6,5 +6,5 @@ android:viewportHeight="24"> + android:pathData="M12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81l5-4.5M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml b/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml new file mode 100644 index 00000000..7c7bf9bc --- /dev/null +++ b/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml b/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml index 646e0113..8cfcca6d 100644 --- a/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml +++ b/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml b/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml new file mode 100644 index 00000000..8ed511c7 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_play_arrow_white_big.xml b/app/src/main/res/drawable/ic_play_arrow_white_64dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_play_arrow_white_big.xml rename to app/src/main/res/drawable/ic_play_arrow_white_64dp.xml diff --git a/app/src/main/res/drawable/ic_rounded_corner.xml b/app/src/main/res/drawable/ic_rounded_corner.xml index 5c2c2437..aa36e0ce 100644 --- a/app/src/main/res/drawable/ic_rounded_corner.xml +++ b/app/src/main/res/drawable/ic_rounded_corner.xml @@ -2,8 +2,8 @@ + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_settings_brigntness_white_24dp.xml b/app/src/main/res/drawable/ic_settings_brigntness_white_24dp.xml new file mode 100644 index 00000000..013be8c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_brigntness_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/promotional.webp b/app/src/main/res/drawable/promotional.webp new file mode 100644 index 00000000..321f68d9 Binary files /dev/null and b/app/src/main/res/drawable/promotional.webp differ diff --git a/app/src/main/res/font/circular.xml b/app/src/main/res/font/circular.xml index a1f9df1a..d5fabd61 100644 --- a/app/src/main/res/font/circular.xml +++ b/app/src/main/res/font/circular.xml @@ -7,7 +7,7 @@ + android:fontWeight="600" /> - - - - diff --git a/app/src/main/res/layout-land/activity_album_tag_editor.xml b/app/src/main/res/layout-land/activity_album_tag_editor.xml index 7459c3ec..072738af 100644 --- a/app/src/main/res/layout-land/activity_album_tag_editor.xml +++ b/app/src/main/res/layout-land/activity_album_tag_editor.xml @@ -21,14 +21,8 @@ android:id="@+id/toolbar" style="@style/Toolbar" app:navigationIcon="@drawable/ic_keyboard_backspace_black_24dp" - tools:ignore="UnusedAttribute"> - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> - diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index 894f7bd0..3bd0cf62 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -56,35 +56,25 @@ - + - - - - - + + diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index 61b51fd7..3586ddc3 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -26,35 +26,23 @@ android:elevation="0dp" app:elevation="0dp"> - - + - - - - + + diff --git a/app/src/main/res/layout-land/fragment_slide_player.xml b/app/src/main/res/layout-land/fragment_slide_player.xml index bcf5c47f..2885e519 100644 --- a/app/src/main/res/layout-land/fragment_slide_player.xml +++ b/app/src/main/res/layout-land/fragment_slide_player.xml @@ -256,7 +256,7 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/previousButton" app:layout_constraintTop_toTopOf="parent" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" + app:srcCompat="@drawable/ic_play_arrow_white_32dp" tools:layout_editor_absoluteY="0dp" tools:tint="@color/md_black_1000" /> diff --git a/app/src/main/res/layout-land/pager_item.xml b/app/src/main/res/layout-land/pager_item.xml index 920de1e1..01ba6aa4 100644 --- a/app/src/main/res/layout-land/pager_item.xml +++ b/app/src/main/res/layout-land/pager_item.xml @@ -29,7 +29,7 @@ android:background="@drawable/color_circle_gradient" android:backgroundTint="@color/eighty_percent_black_overlay" android:padding="8dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> - - - - - - diff --git a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml index 65af5326..2955e154 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml @@ -12,7 +12,6 @@ android:layout_height="match_parent"> - + - - - - - - + + diff --git a/app/src/main/res/layout-xlarge-land/fragment_home.xml b/app/src/main/res/layout-xlarge-land/fragment_home.xml index c332b986..7da43fdf 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_home.xml @@ -27,36 +27,23 @@ android:elevation="0dp" app:elevation="0dp"> - - - - - - - + + + + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + android:layout_gravity="center_vertical" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingStart="24dp" + android:paddingTop="10dp" + android:paddingEnd="24dp" + android:paddingBottom="10dp"> - + + + android:orientation="vertical" + android:paddingStart="16dp" + android:paddingEnd="0dp"> - + + + + - - \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/activity_artist_content.xml b/app/src/main/res/layout-xlarge/activity_artist_content.xml index c56b8a3c..ed4a24ab 100644 --- a/app/src/main/res/layout-xlarge/activity_artist_content.xml +++ b/app/src/main/res/layout-xlarge/activity_artist_content.xml @@ -1,10 +1,50 @@ + + + + + + + + - - diff --git a/app/src/main/res/layout-xlarge/fragment_banner_home.xml b/app/src/main/res/layout-xlarge/fragment_banner_home.xml index b5812812..bf1489e4 100644 --- a/app/src/main/res/layout-xlarge/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge/fragment_banner_home.xml @@ -57,34 +57,23 @@ - - + - - - + + diff --git a/app/src/main/res/layout-xlarge/fragment_home.xml b/app/src/main/res/layout-xlarge/fragment_home.xml index 560c9f10..79d4afd1 100644 --- a/app/src/main/res/layout-xlarge/fragment_home.xml +++ b/app/src/main/res/layout-xlarge/fragment_home.xml @@ -28,35 +28,23 @@ android:elevation="0dp" app:elevation="0dp"> - + - - - - - + + + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + android:orientation="vertical" + android:paddingBottom="12dp"> + + + + + + + + + + + + + + android:text="@string/history" + app:fontFamily="@font/circular" /> @@ -76,8 +121,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:padding="12dp" - app:iconBackgroundColor="@color/md_red_A700" + android:padding="16dp" + app:iconBackgroundColor="@color/md_red_500" app:srcCompat="@drawable/ic_library_add_white_24dp" /> - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album_content.xml b/app/src/main/res/layout/activity_album_content.xml index 18700f8f..8d17a7be 100644 --- a/app/src/main/res/layout/activity_album_content.xml +++ b/app/src/main/res/layout/activity_album_content.xml @@ -1,9 +1,50 @@ + + + + + + + + - - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> @@ -102,9 +95,9 @@ - + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingStart="8dp" + android:paddingEnd="8dp"> - + + + + + diff --git a/app/src/main/res/layout/activity_artist_details.xml b/app/src/main/res/layout/activity_artist_details.xml index 17ba178a..98597a92 100755 --- a/app/src/main/res/layout/activity_artist_details.xml +++ b/app/src/main/res/layout/activity_artist_details.xml @@ -97,14 +97,4 @@ - - - diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml index 84cc05c9..f2426076 100644 --- a/app/src/main/res/layout/activity_playlist_detail.xml +++ b/app/src/main/res/layout/activity_playlist_detail.xml @@ -84,14 +84,5 @@ android:visibility="gone" tools:visibility="visible" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index f42abb7e..cb0e1a8a 100755 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -15,30 +15,32 @@ android:fitsSystemWindows="true" app:elevation="0dp"> - + app:cardCornerRadius="8dp" + app:cardElevation="6dp" + app:cardUseCompatPadding="true"> - - - + android:layout_height="50dp" + android:gravity="center_vertical"> + + + - - - - + + + - - - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/activity_user_info.xml b/app/src/main/res/layout/activity_user_info.xml index a3c164ff..708ed465 100644 --- a/app/src/main/res/layout/activity_user_info.xml +++ b/app/src/main/res/layout/activity_user_info.xml @@ -109,7 +109,9 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" + android:autofillHints="name" android:hint="@string/my_name" + android:importantForAutofill="yes" android:inputType="textPersonName|textCapWords|text" android:textAppearance="@style/TextAppearance.AppCompat.Subhead" tools:text="@string/song" /> @@ -123,6 +125,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" + android:visibility="gone" app:hintAnimationEnabled="true"> diff --git a/app/src/main/res/layout/app_widget_big.xml b/app/src/main/res/layout/app_widget_big.xml index 94c08d16..c20cfe96 100755 --- a/app/src/main/res/layout/app_widget_big.xml +++ b/app/src/main/res/layout/app_widget_big.xml @@ -41,7 +41,7 @@ android:padding="22dp" android:background="@drawable/widget_selector_dark" tools:ignore="ContentDescription" - tools:src="@drawable/ic_play_arrow_white_24dp" + tools:src="@drawable/ic_play_arrow_white_32dp" tools:tint="@color/ate_primary_text_dark"/> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index a34085c8..65a8a0ad 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -52,36 +52,23 @@ - + - - - - - - + + @@ -104,7 +91,8 @@ android:descendantFocusability="blocksDescendants" android:focusable="true" android:focusableInTouchMode="true" - android:orientation="vertical"> + android:orientation="vertical" + android:paddingTop="8dp"> diff --git a/app/src/main/res/layout/fragment_blur_playback_controls.xml b/app/src/main/res/layout/fragment_blur_playback_controls.xml index 1f676fc2..b32c4d30 100644 --- a/app/src/main/res/layout/fragment_blur_playback_controls.xml +++ b/app/src/main/res/layout/fragment_blur_playback_controls.xml @@ -171,7 +171,7 @@ android:background="@drawable/color_circle_gradient" android:elevation="4dp" android:padding="16dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml index 3ce0b73a..750b8076 100644 --- a/app/src/main/res/layout/fragment_folder.xml +++ b/app/src/main/res/layout/fragment_folder.xml @@ -30,46 +30,33 @@ android:elevation="0dp" app:elevation="0dp"> - + app:cardCornerRadius="8dp" + app:cardElevation="6dp" + app:cardUseCompatPadding="true"> - - - - - - - - - - + android:layout_height="wrap_content" + app:layout_scrollFlags="scroll|enterAlways"> + + + + + + - - - - - - - + + + - - - - - - - - - - - + android:layout_height="wrap_content"> + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + app:cardCornerRadius="8dp" + app:cardElevation="6dp" + app:cardUseCompatPadding="true"> - - - - + android:orientation="vertical"> - + + + + + + + + + + + - - - - - + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:text="@string/premium" + app:icon="@drawable/ic_diamond_stone_white_24dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/titleContainer" /> + + diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 1eda75c1..867d4377 100755 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -81,7 +81,6 @@ android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" - app:fontFamily="@font/circular_std_medium" android:textSize="16sp" /> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_single_row.xml b/app/src/main/res/layout/item_list_single_row.xml index 650a5938..3e86e5af 100644 --- a/app/src/main/res/layout/item_list_single_row.xml +++ b/app/src/main/res/layout/item_list_single_row.xml @@ -12,8 +12,8 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical|start" - android:layout_marginLeft="-8dp" android:layout_marginStart="-8dp" + android:layout_marginLeft="-8dp" android:visibility="gone" app:srcCompat="@drawable/ic_drag_vertical_white_24dp" tools:ignore="ContentDescription" /> @@ -28,10 +28,10 @@ android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="match_parent" - android:paddingEnd="0dp" + android:paddingStart="16dp" android:paddingLeft="16dp" - android:paddingRight="0dp" - android:paddingStart="16dp"> + android:paddingEnd="0dp" + android:paddingRight="0dp"> @@ -88,8 +88,8 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="bottom" - android:layout_marginLeft="72dp" android:layout_marginStart="72dp" + android:layout_marginLeft="72dp" android:background="?attr/dividerColor" /> \ No newline at end of file diff --git a/app/src/main/res/layout/media_button.xml b/app/src/main/res/layout/media_button.xml index 668414ea..e2907bfc 100644 --- a/app/src/main/res/layout/media_button.xml +++ b/app/src/main/res/layout/media_button.xml @@ -81,6 +81,6 @@ android:background="@drawable/color_circle_gradient" android:elevation="4dp" android:padding="16dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/pager_item.xml b/app/src/main/res/layout/pager_item.xml index 25f8719d..55184962 100644 --- a/app/src/main/res/layout/pager_item.xml +++ b/app/src/main/res/layout/pager_item.xml @@ -29,7 +29,7 @@ android:background="@drawable/color_circle_gradient" android:backgroundTint="@color/eighty_percent_black_overlay" android:padding="8dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> - - + app:showAsAction="never"> + app:showAsAction="never"> - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_search.xml b/app/src/main/res/menu/menu_search.xml index a1a3e0a0..a6855ef2 100644 --- a/app/src/main/res/menu/menu_search.xml +++ b/app/src/main/res/menu/menu_search.xml @@ -17,6 +17,6 @@ \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1df4872a..bca60909 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,5 +5,8 @@ #607d8b #f5f5f5 #3D5AFE - + #202124 + #2C2D30 + #121212 + #1E1E1E diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 96f6d738..995f1e83 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -244,7 +244,7 @@ Material - My Name + Name Most played Never @@ -548,7 +548,7 @@ Vertical flip Hinge Horizontal flip - Pause playing on zero and plays after raise volume. Warning when you increase the volume it starts playing even your outside the app + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero What\'s New @@ -621,4 +621,9 @@ Gradient image Stack + + Welcome, + Get Premium + Now playing themes, Carousel effect, Color theme and more.. + Play all diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7c84c5ac..7cd659e7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -28,7 +28,7 @@ diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index caf32804..3160afbd 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -65,27 +65,24 @@ @drawable/rect_selector_dark @drawable/rect_selector_strong_dark - @color/md_grey_800 + @color/card_dark_color + @color/dark_color + @color/dark_color - @color/md_grey_800 - - @color/md_grey_800 @color/ate_secondary_text_dark @style/ThemeOverlay.AppCompat - @color/md_grey_900 + @color/dark_color @android:color/white - @color/md_grey_900 + @color/dark_color @style/Widget.ActionButton.Overflow @style/PreferenceThemeOverlay.v14.Material - @style/BottomSheetDialog - true @transition/grid_exit @transition/grid_exit @@ -95,6 +92,8 @@ @font/circular @color/md_white_1000 + false + diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 28555eca..7c4640f9 100755 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -7,4 +7,5 @@ artist_image_transition artist_image_transition mini_player_transition + toolbar_transition \ No newline at end of file diff --git a/app/src/main/res/xml/pref_advanced.xml b/app/src/main/res/xml/pref_advanced.xml index 333163cd..57fbf59c 100755 --- a/app/src/main/res/xml/pref_advanced.xml +++ b/app/src/main/res/xml/pref_advanced.xml @@ -9,17 +9,16 @@ android:max="60" android:title="@string/pref_filter_song_title" app:enableCopying="true" - app:iconSpaceReserved="false" + app:icon="@drawable/ic_filter_song_white_24dp" app:showSeekBarValue="true" /> - + app:icon="@drawable/ic_pause_white_24dp" /> - - + app:icon="@drawable/ic_settings_brigntness_white_24dp" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_audio.xml b/app/src/main/res/xml/pref_audio.xml index 6595edac..a81f3d75 100755 --- a/app/src/main/res/xml/pref_audio.xml +++ b/app/src/main/res/xml/pref_audio.xml @@ -5,45 +5,48 @@ + android:title="@string/pref_title_audio_ducking" + app:enableCopying="true" + app:icon="@drawable/ic_volume_down_white_24dp" /> + android:title="@string/pref_title_gapless_playback" + app:enableCopying="true" /> + android:title="@string/pref_title_choose_equalizer" + app:enableCopying="true" + app:icon="@drawable/ic_equalizer_white_24dp" /> - + android:title="@string/equalizer" + app:enableCopying="true" /> + app:enableCopying="true" + app:icon="@drawable/ic_play_arrow_white_32dp" /> + app:enableCopying="true" + app:icon="@drawable/ic_shuffle_white_24dp" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_blacklist.xml b/app/src/main/res/xml/pref_blacklist.xml index 865ce948..09ed2298 100644 --- a/app/src/main/res/xml/pref_blacklist.xml +++ b/app/src/main/res/xml/pref_blacklist.xml @@ -7,7 +7,8 @@ android:key="blacklist" android:summary="@string/pref_summary_blacklist" android:title="@string/pref_title_blacklist" - app:iconSpaceReserved="false" /> + app:enableCopying="true" + app:icon="@drawable/ic_music_note_off_white_24dp" /> diff --git a/app/src/main/res/xml/pref_extras.xml b/app/src/main/res/xml/pref_extras.xml deleted file mode 100644 index 50612d1d..00000000 --- a/app/src/main/res/xml/pref_extras.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml index 373f5475..e0d667c9 100755 --- a/app/src/main/res/xml/pref_general.xml +++ b/app/src/main/res/xml/pref_general.xml @@ -10,7 +10,8 @@ android:negativeButtonText="@null" android:positiveButtonText="@null" android:title="@string/pref_title_general_theme" - app:iconSpaceReserved="false" /> + app:enableCopying="true" + app:icon="@drawable/ic_color_lens_white_24dp" /> @@ -19,35 +20,36 @@ android:persistent="false" android:summary="@string/primary_color_desc" android:title="@string/primary_color" - app:iconSpaceReserved="false" - app:isPreferenceVisible="false" /> + app:enableCopying="true" + app:icon="@drawable/ic_colorize_white_24dp" /> + app:enableCopying="true" + app:icon="@drawable/ic_colorize_white_24dp" /> + app:enableCopying="true" /> + app:enableCopying="true" /> + app:enableCopying="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_images.xml b/app/src/main/res/xml/pref_images.xml index fdd4ae37..75d025e9 100755 --- a/app/src/main/res/xml/pref_images.xml +++ b/app/src/main/res/xml/pref_images.xml @@ -4,16 +4,17 @@ + android:title="@string/pref_title_ignore_media_store_artwork" + app:enableCopying="true" /> + android:title="@string/pref_title_auto_download_artist_images" + app:enableCopying="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_lockscreen.xml b/app/src/main/res/xml/pref_lockscreen.xml index af17bee6..2d95e375 100755 --- a/app/src/main/res/xml/pref_lockscreen.xml +++ b/app/src/main/res/xml/pref_lockscreen.xml @@ -4,24 +4,24 @@ + android:title="@string/pref_title_album_art_on_lockscreen" + app:enableCopying="true" /> + android:title="@string/pref_title_blurred_album_art" + app:enableCopying="true" /> + android:title="@string/pref_title_lock_screen" + app:enableCopying="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_notification.xml b/app/src/main/res/xml/pref_notification.xml index 64e24946..438311b9 100755 --- a/app/src/main/res/xml/pref_notification.xml +++ b/app/src/main/res/xml/pref_notification.xml @@ -4,15 +4,16 @@ + android:title="@string/pref_title_colored_notification" + app:enableCopying="true" + app:icon="@drawable/ic_cellphone_lock_white_24dp" /> + android:title="@string/pref_title_classic_notification" + app:enableCopying="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_now_playing_screen.xml b/app/src/main/res/xml/pref_now_playing_screen.xml index 3f9ad320..15227f3b 100644 --- a/app/src/main/res/xml/pref_now_playing_screen.xml +++ b/app/src/main/res/xml/pref_now_playing_screen.xml @@ -5,12 +5,13 @@ + app:enableCopying="true" + app:icon="@drawable/ic_play_circle_filled_white_24dp" /> + app:enableCopying="true" /> + app:enableCopying="true" /> @@ -30,14 +32,16 @@ @@ -48,7 +52,8 @@ android:max="25" android:summary="@string/pref_blur_amount_summary" android:title="@string/pref_blur_amount_title" - app:iconSpaceReserved="false" + app:enableCopying="true" + app:icon="@drawable/ic_blur_on_white_24dp" app:showSeekBarValue="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/pref_playlists.xml b/app/src/main/res/xml/pref_playlists.xml index 84979a45..b94c67ce 100644 --- a/app/src/main/res/xml/pref_playlists.xml +++ b/app/src/main/res/xml/pref_playlists.xml @@ -8,10 +8,11 @@ android:entries="@array/pref_playlists_last_added_interval_titles" android:entryValues="@array/pref_playlists_last_added_interval_values" android:key="last_added_interval" - app:iconSpaceReserved="false" android:negativeButtonText="@null" android:positiveButtonText="@null" - android:title="@string/pref_title_last_added_interval" /> + android:title="@string/pref_title_last_added_interval" + app:enableCopying="true" + app:icon="@drawable/ic_playlist_add_white_24dp" /> diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index abe21437..11247eaf 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -2,69 +2,63 @@ - + + - + - - + - + - - - + + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_window.xml b/app/src/main/res/xml/pref_window.xml index 7f743ade..676d1046 100644 --- a/app/src/main/res/xml/pref_window.xml +++ b/app/src/main/res/xml/pref_window.xml @@ -1,19 +1,24 @@ - + + + app:enableCopying="true" + app:icon="@drawable/ic_rounded_corner" /> + app:icon="@drawable/ic_cellphone_white_24dp" /> \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEColorPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEColorPreference.kt index c30a6816..3909961b 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEColorPreference.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEColorPreference.kt @@ -1,12 +1,13 @@ package code.name.monkey.appthemehelper.common.prefs.supportv7 import android.content.Context -import androidx.preference.Preference -import androidx.preference.PreferenceViewHolder +import android.graphics.PorterDuff import android.util.AttributeSet import android.view.View - +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder import code.name.monkey.appthemehelper.R +import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.prefs.BorderCircleView /** @@ -35,6 +36,9 @@ class ATEColorPreference(context: Context, attrs: AttributeSet?, defStyleAttr: I layoutResource = R.layout.ate_preference_custom_support widgetLayoutResource = R.layout.ate_preference_color isPersistent = false + + + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) } override fun onBindViewHolder(holder: PreferenceViewHolder) { diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt index 34fa7cbb..3cd3db72 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt @@ -1,10 +1,9 @@ package code.name.monkey.appthemehelper.common.prefs.supportv7 import android.content.Context -import android.content.res.ColorStateList +import android.graphics.PorterDuff import android.util.AttributeSet import android.widget.SeekBar -import android.widget.TextView import androidx.preference.PreferenceViewHolder import androidx.preference.SeekBarPreference import code.name.monkey.appthemehelper.R @@ -29,7 +28,7 @@ class ATESeekBarPreference : SeekBarPreference { } private fun init() { - + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) } override fun onBindViewHolder(view: PreferenceViewHolder) { diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESwitchPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESwitchPreference.kt index 589d1cae..eda097f1 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESwitchPreference.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESwitchPreference.kt @@ -2,10 +2,12 @@ package code.name.monkey.appthemehelper.common.prefs.supportv7 import android.annotation.TargetApi import android.content.Context +import android.graphics.PorterDuff import android.os.Build import android.util.AttributeSet import androidx.preference.CheckBoxPreference import code.name.monkey.appthemehelper.R +import code.name.monkey.appthemehelper.ThemeStore /** * @author Aidan Follestad (afollestad) @@ -31,5 +33,6 @@ class ATESwitchPreference : CheckBoxPreference { private fun init() { widgetLayoutResource = R.layout.ate_preference_switch_support + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) } } \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java index 70d27ae2..fa73ab93 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java @@ -17,9 +17,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.RadioButton; - -import java.lang.reflect.Field; -import java.util.ArrayList; +import android.widget.TextView; import androidx.annotation.CheckResult; import androidx.annotation.ColorInt; @@ -39,6 +37,10 @@ import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.ToolbarWidgetWrapper; import androidx.core.graphics.drawable.DrawableCompat; + +import java.lang.reflect.Field; +import java.util.ArrayList; + import code.name.monkey.appthemehelper.R; import code.name.monkey.appthemehelper.ThemeStore; @@ -82,12 +84,14 @@ public final class ToolbarContentTintHelper { } } - public static void colorBackButton(Toolbar toolbar, @ColorInt int color) { + public static void colorBackButton(@NonNull Toolbar toolbar, @ColorInt int color) { final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY); for (int i = 0; i < toolbar.getChildCount(); i++) { final View backButton = toolbar.getChildAt(i); if (backButton instanceof ImageView) { ((ImageView) backButton).getDrawable().setColorFilter(colorFilter); + } else if (backButton instanceof TextView) { + // ((TextView) backButton).setTextColor(color); } } } diff --git a/appthemehelper/src/main/res/layout/ate_preference_category.xml b/appthemehelper/src/main/res/layout/ate_preference_category.xml index 5b55b1a6..4a1d894a 100755 --- a/appthemehelper/src/main/res/layout/ate_preference_category.xml +++ b/appthemehelper/src/main/res/layout/ate_preference_category.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" - android:paddingStart="16dp" + android:paddingStart="72dp" android:paddingLeft="16dp" android:paddingTop="16dp" android:textAppearance="@style/TextAppearance.MaterialComponents.Body2" diff --git a/appthemehelper/src/main/res/layout/ate_preference_custom_support.xml b/appthemehelper/src/main/res/layout/ate_preference_custom_support.xml index e53f3a08..0bd3d0e2 100755 --- a/appthemehelper/src/main/res/layout/ate_preference_custom_support.xml +++ b/appthemehelper/src/main/res/layout/ate_preference_custom_support.xml @@ -25,7 +25,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="start|center_vertical" - android:layout_marginStart="@dimen/ate_preference_inset" + android:layout_marginStart="32dp" android:layout_marginLeft="@dimen/ate_preference_inset" android:layout_marginTop="12dip" android:layout_marginEnd="6dip" diff --git a/appthemehelper/src/main/res/values/colors_material_design.xml b/appthemehelper/src/main/res/values/colors_material_design.xml index 4084a5e2..3fd119ce 100755 --- a/appthemehelper/src/main/res/values/colors_material_design.xml +++ b/appthemehelper/src/main/res/values/colors_material_design.xml @@ -21,6 +21,7 @@ #651FFF #30673AB7 + #673AB7 #6200EA @@ -36,6 +37,7 @@ #69F0AE #00C853 + #4CAF50 #304CAF50