From 9f1e6cb98eb67a5e38086b34065258e8a49b3fca Mon Sep 17 00:00:00 2001 From: h4h13 Date: Sun, 1 Dec 2019 20:57:01 +0530 Subject: [PATCH] WIP theme --- .../retromusic/activities/AboutActivity.kt | 19 +- .../activities/AlbumDetailsActivity.kt | 21 +- .../activities/ArtistDetailActivity.kt | 11 +- .../activities/GenreDetailsActivity.kt | 222 +++--- .../activities/LicenseActivity.java | 4 +- .../retromusic/activities/LyricsActivity.kt | 692 +++++++++--------- .../activities/PlayingQueueActivity.kt | 280 ++++--- .../activities/PlaylistDetailActivity.kt | 388 +++++----- .../retromusic/activities/PurchaseActivity.kt | 16 +- .../retromusic/activities/SearchActivity.kt | 2 - .../retromusic/activities/SettingsActivity.kt | 11 +- .../activities/SupportDevelopmentActivity.kt | 26 +- .../retromusic/activities/UserInfoActivity.kt | 493 ++++++------- .../activities/WhatsNewActivity.java | 7 +- .../base/AbsSlidingMusicPanelActivity.kt | 27 +- .../activities/base/AbsThemeActivity.kt | 15 +- .../activities/bugreport/BugReportActivity.kt | 29 +- .../monkey/retromusic/adapter/HomeAdapter.kt | 37 +- .../adapter/base/MediaEntryViewHolder.java | 2 +- .../adapter/playlist/PlaylistAdapter.kt | 360 +++++---- .../adapter/song/PlaylistSongAdapter.kt | 16 - .../retromusic/extensions/ActivityEx.kt | 5 +- .../monkey/retromusic/extensions/ColorExt.kt | 8 + .../mainactivity/LibraryFragment.java | 3 +- .../mainactivity/home/BannerHomeFragment.kt | 6 +- .../fragments/settings/AbsSettingsFragment.kt | 2 +- .../settings/MainSettingsFragment.kt | 2 +- .../settings/OtherSettingsFragment.kt | 2 - .../settings/PersonalizeSettingsFragment.kt | 1 - .../code/name/monkey/retromusic/model/Home.kt | 1 - .../retromusic/providers/RepositoryImpl.kt | 5 - .../retromusic/util/RetroColorUtil.java | 5 +- .../views/BottomNavigationBarTinted.kt | 4 +- .../retromusic/views/ColorIconsImageView.kt | 2 +- .../bg_bottom_sheet_dialog_fragment.xml | 8 - .../res/drawable/bg_circular_top_corners.xml | 9 - .../bottom_navigation_item_background.xml | 2 +- ...ttom_navigation_item_background_ripple.xml | 11 - .../res/drawable/option_menu_background.xml | 2 +- .../main/res/layout-land/activity_album.xml | 1 + .../layout-land/activity_artist_details.xml | 1 + .../res/layout-land/fragment_banner_home.xml | 9 +- .../main/res/layout-land/fragment_home.xml | 5 +- .../res/layout-xlarge-land/activity_album.xml | 2 +- .../activity_artist_details.xml | 6 +- .../fragment_banner_home.xml | 3 + .../res/layout-xlarge-land/fragment_home.xml | 5 +- .../main/res/layout-xlarge/activity_album.xml | 3 +- .../layout-xlarge/activity_artist_details.xml | 1 + .../res/layout-xlarge/activity_user_info.xml | 5 +- .../layout-xlarge/fragment_banner_home.xml | 7 +- .../main/res/layout-xlarge/fragment_home.xml | 5 +- .../layout-xlarge/fragment_mini_player.xml | 2 +- app/src/main/res/layout/abs_playlists.xml | 50 +- app/src/main/res/layout/activity_album.xml | 7 +- .../res/layout/activity_artist_details.xml | 3 +- .../main/res/layout/activity_bug_report.xml | 52 +- app/src/main/res/layout/activity_lyrics.xml | 7 +- .../res/layout/activity_playing_queue.xml | 1 + .../res/layout/activity_playlist_detail.xml | 7 +- .../main/res/layout/activity_pro_version.xml | 1 + app/src/main/res/layout/activity_search.xml | 5 +- .../main/res/layout/activity_user_info.xml | 1 + .../layout/bug_report_card_device_info.xml | 3 +- .../main/res/layout/fragment_banner_home.xml | 150 ++-- app/src/main/res/layout/fragment_home.xml | 3 +- app/src/main/res/layout/fragment_lyrics.xml | 4 +- .../res/layout/fragment_main_settings.xml | 3 +- app/src/main/res/layout/home_content.xml | 11 +- app/src/main/res/layout/item_album_card.xml | 2 +- app/src/main/res/layout/item_artist.xml | 2 +- app/src/main/res/layout/item_option_menu.xml | 2 +- app/src/main/res/layout/pager_item.xml | 4 +- .../res/layout/sliding_music_panel_layout.xml | 3 +- app/src/main/res/values-hu/strings.xml | 5 - app/src/main/res/values-it/strings.xml | 8 - app/src/main/res/values-tr/strings.xml | 5 - app/src/main/res/values-zh-rHK/strings.xml | 5 - app/src/main/res/values/strings.xml | 142 +++- app/src/main/res/values/styles.xml | 1 + app/src/main/res/values/styles_parents.xml | 1 + app/src/main/res/xml/pref_advanced.xml | 34 +- app/src/main/res/xml/pref_blacklist.xml | 16 - app/src/main/res/xml/pref_lockscreen.xml | 5 - app/src/main/res/xml/pref_playlists.xml | 22 - app/src/main/res/xml/pref_window.xml | 5 - .../common/ATHToolbarActivity.java | 10 +- 87 files changed, 1694 insertions(+), 1697 deletions(-) delete mode 100644 app/src/main/res/drawable/bg_bottom_sheet_dialog_fragment.xml delete mode 100644 app/src/main/res/drawable/bg_circular_top_corners.xml delete mode 100644 app/src/main/res/drawable/bottom_navigation_item_background_ripple.xml delete mode 100644 app/src/main/res/xml/pref_blacklist.xml delete mode 100755 app/src/main/res/xml/pref_lockscreen.xml delete mode 100644 app/src/main/res/xml/pref_playlists.xml delete mode 100644 app/src/main/res/xml/pref_window.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt index 77d133a6..88ed51c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt @@ -4,10 +4,12 @@ import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle -import android.view.* +import android.view.MenuItem +import android.view.View import androidx.core.app.ShareCompat -import androidx.recyclerview.widget.* -import code.name.monkey.appthemehelper.util.* +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.LinearLayoutManager +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.Constants.APP_INSTAGRAM_LINK import code.name.monkey.retromusic.Constants.APP_TELEGRAM_LINK import code.name.monkey.retromusic.Constants.APP_TWITTER_LINK @@ -20,9 +22,12 @@ import code.name.monkey.retromusic.Constants.TRANSLATE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.adapter.ContributorAdapter +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.model.Contributor -import code.name.monkey.retromusic.util.* -import com.afollestad.materialdialogs.* +import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import com.afollestad.materialdialogs.LayoutMode +import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.list.listItems import com.google.gson.Gson @@ -62,11 +67,11 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener { setNavigationBarColorPrimary() setLightNavigationBar(true) + loadContributors() setSupportActionBar(toolbar) toolbar.apply { - setTitleTextColor(ATHUtil.resolveColor(this@AboutActivity, R.attr.colorOnPrimary)) - setBackgroundColor(ATHUtil.resolveColor(this@AboutActivity, R.attr.colorPrimary)) + setBackgroundColor(surfaceColor(context)) setNavigationOnClickListener { onBackPressed() } ToolbarContentTintHelper.colorBackButton(toolbar) } 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 84c7178a..1c6530d7 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 @@ -2,7 +2,6 @@ package code.name.monkey.retromusic.activities import android.app.ActivityOptions import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -15,7 +14,7 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager 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.MaterialUtil import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity @@ -44,6 +43,7 @@ import com.afollestad.materialcab.MaterialCab import com.bumptech.glide.Glide import kotlinx.android.synthetic.main.activity_album.* import kotlinx.android.synthetic.main.activity_album_content.* +import kotlinx.android.synthetic.main.status_bar.* import java.util.* import javax.inject.Inject import android.util.Pair as UtilPair @@ -80,11 +80,10 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C setDrawUnderStatusBar() super.onCreate(savedInstanceState) toggleBottomNavigationView(true) - setStatusbarColor(Color.TRANSPARENT) + setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) - setLightStatusbar(ColorUtil.isColorLight(ATHUtil.resolveColor(this, R.attr.colorPrimary))) ActivityCompat.postponeEnterTransition(this) @@ -191,18 +190,20 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C val themeColor = if (PreferenceUtil.getInstance(this).adaptiveColor) color else ThemeStore.accentColor(this) - songTitle.setTextColor(ThemeStore.accentColor(this)) - moreTitle.setTextColor(ThemeStore.accentColor(this)) + songTitle.setTextColor(themeColor) + moreTitle.setTextColor(themeColor) val buttonColor = if (PreferenceUtil.getInstance(this).adaptiveColor) color else - ATHUtil.resolveColor(this, R.attr.cardBackgroundColor) + ATHUtil.resolveColor(this, R.attr.colorControlNormal) - //MaterialUtil.setTint(button = shuffleAction, color = buttonColor) - //MaterialUtil.setTint(button = playAction, color = buttonColor) + MaterialUtil.setTint(button = shuffleAction, color = buttonColor) + MaterialUtil.setTint(button = playAction, color = buttonColor) - toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorPrimary)) + val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface) + status_bar.setBackgroundColor(toolbarColor) + toolbar.setBackgroundColor(toolbarColor) setSupportActionBar(toolbar) supportActionBar?.title = null } 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 5f24d7c5..585ebe56 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 @@ -2,7 +2,6 @@ package code.name.monkey.retromusic.activities import android.app.Activity import android.content.Intent -import android.graphics.Color import android.os.Build import android.os.Bundle import android.text.Html @@ -17,7 +16,6 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager 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.MaterialUtil import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R @@ -39,6 +37,7 @@ import com.afollestad.materialcab.MaterialCab import com.bumptech.glide.Glide import kotlinx.android.synthetic.main.activity_artist_content.* import kotlinx.android.synthetic.main.activity_artist_details.* +import kotlinx.android.synthetic.main.status_bar.* import java.util.* import javax.inject.Inject import kotlin.collections.ArrayList @@ -74,11 +73,10 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailsView, setDrawUnderStatusBar() super.onCreate(savedInstanceState) toggleBottomNavigationView(true) - setStatusbarColor(Color.TRANSPARENT) + setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) - setLightStatusbar(ColorUtil.isColorLight(ATHUtil.resolveColor(this, R.attr.colorPrimary))) ActivityCompat.postponeEnterTransition(this) @@ -240,7 +238,10 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailsView, MaterialUtil.setTint(button = shuffleAction, color = buttonColor) MaterialUtil.setTint(button = playAction, color = buttonColor) - toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorPrimary)) + + val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface) + status_bar.setBackgroundColor(toolbarColor) + toolbar.setBackgroundColor(toolbarColor) setSupportActionBar(toolbar) supportActionBar?.title = null } 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 34673375..4497cc5e 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,19 +1,25 @@ package code.name.monkey.retromusic.activities -import android.graphics.Color import android.os.Bundle -import android.view.* -import androidx.recyclerview.widget.* -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +import android.view.Menu +import android.view.MenuItem +import android.view.View +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.retromusic.App +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.extensions.applyToolbar import code.name.monkey.retromusic.helper.menu.GenreMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder -import code.name.monkey.retromusic.model.* -import code.name.monkey.retromusic.mvp.presenter.* -import code.name.monkey.retromusic.util.* +import code.name.monkey.retromusic.model.Genre +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.mvp.presenter.GenreDetailsPresenter +import code.name.monkey.retromusic.mvp.presenter.GenreDetailsView +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_playlist_detail.* @@ -26,127 +32,123 @@ import javax.inject.Inject class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), CabHolder, GenreDetailsView { - @Inject - lateinit var genreDetailsPresenter: GenreDetailsPresenter + @Inject + lateinit var genreDetailsPresenter: GenreDetailsPresenter - private lateinit var genre: Genre - private lateinit var songAdapter: ShuffleButtonSongAdapter - private var cab: MaterialCab? = null + private lateinit var genre: Genre + private lateinit var songAdapter: ShuffleButtonSongAdapter + private var cab: MaterialCab? = null - private fun checkIsEmpty() { - empty?.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE - } + private fun checkIsEmpty() { + empty?.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE + } - override fun onCreate(savedInstanceState: Bundle?) { - setDrawUnderStatusBar() - super.onCreate(savedInstanceState) + override fun onCreate(savedInstanceState: Bundle?) { + setDrawUnderStatusBar() + super.onCreate(savedInstanceState) + setStatusbarColorAuto() + setNavigationbarColorAuto() + setTaskDescriptionColorAuto() + setLightNavigationBar(true) + toggleBottomNavigationView(true) - setStatusbarColor(Color.TRANSPARENT) - setNavigationbarColorAuto() - setTaskDescriptionColorAuto() - setLightNavigationBar(true) - setLightStatusbar(ColorUtil.isColorLight(ATHUtil.resolveColor(this, R.attr.colorPrimary))) - toggleBottomNavigationView(true) + if (intent.extras != null) { + genre = intent?.extras?.getParcelable(EXTRA_GENRE_ID)!! + } else { + finish() + } - if (intent.extras != null) { - genre = intent?.extras?.getParcelable(EXTRA_GENRE_ID)!! - } else { - finish() - } + setUpToolBar() + setupRecyclerView() - setUpToolBar() - setupRecyclerView() + App.musicComponent.inject(this) + genreDetailsPresenter.attachView(this) - App.musicComponent.inject(this) - genreDetailsPresenter.attachView(this) + } - } + private fun setUpToolBar() { + applyToolbar(toolbar) + title = genre.name + } - private fun setUpToolBar() { - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) - appBarLayout.setBackgroundColor(primaryColor) - applyToolbar(toolbar) - title = genre.name - } + override fun onResume() { + super.onResume() + genreDetailsPresenter.loadGenreSongs(genre.id) + } - override fun onResume() { - super.onResume() - genreDetailsPresenter.loadGenreSongs(genre.id) - } + override fun onDestroy() { + super.onDestroy() + genreDetailsPresenter.detachView() + } - override fun onDestroy() { - super.onDestroy() - genreDetailsPresenter.detachView() - } + override fun createContentView(): View { + return wrapSlidingMusicPanel(R.layout.activity_playlist_detail) + } - override fun createContentView(): View { - return wrapSlidingMusicPanel(R.layout.activity_playlist_detail) - } + override fun showEmptyView() { - override fun showEmptyView() { + } - } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_genre_detail, menu) + return super.onCreateOptionsMenu(menu) + } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_genre_detail, menu) - return super.onCreateOptionsMenu(menu) - } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() + } + return GenreMenuHelper.handleMenuClick(this, genre, item) + } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (item.itemId == android.R.id.home) { - onBackPressed() - } - return GenreMenuHelper.handleMenuClick(this, genre, item) - } + private fun setupRecyclerView() { + ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) + songAdapter = ShuffleButtonSongAdapter(this, ArrayList(), R.layout.item_list, false, this) + recyclerView.apply { + itemAnimator = DefaultItemAnimator() + layoutManager = LinearLayoutManager(this@GenreDetailsActivity) + adapter = songAdapter + } + songAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + super.onChanged() + checkIsEmpty() + } + }) + } - private fun setupRecyclerView() { - ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) - songAdapter = ShuffleButtonSongAdapter(this, ArrayList(), R.layout.item_list, false, this) - recyclerView.apply { - itemAnimator = DefaultItemAnimator() - layoutManager = LinearLayoutManager(this@GenreDetailsActivity) - adapter = songAdapter - } - songAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - super.onChanged() - checkIsEmpty() - } - }) - } + override fun songs(songs: ArrayList) { + songAdapter.swapDataSet(songs) + } - override fun songs(songs: ArrayList) { - songAdapter.swapDataSet(songs) - } + override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { + if (cab != null && cab!!.isActive) cab!!.finish() + cab = MaterialCab(this, R.id.cab_stub).setMenu(menuRes) + .setCloseDrawableRes(R.drawable.ic_close_white_24dp).setBackgroundColor( + RetroColorUtil.shiftBackgroundColorForLightText( + ATHUtil.resolveColor( + this, + R.attr.colorPrimary + ) + ) + ).start(callback) + return cab!! + } - override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { - if (cab != null && cab!!.isActive) cab!!.finish() - cab = MaterialCab(this, R.id.cab_stub).setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp).setBackgroundColor( - RetroColorUtil.shiftBackgroundColorForLightText( - ATHUtil.resolveColor( - this, - R.attr.colorPrimary - ) - ) - ).start(callback) - return cab!! - } + override fun onBackPressed() { + if (cab != null && cab!!.isActive) cab!!.finish() + else { + recyclerView!!.stopScroll() + super.onBackPressed() + } + } - override fun onBackPressed() { - if (cab != null && cab!!.isActive) cab!!.finish() - else { - recyclerView!!.stopScroll() - super.onBackPressed() - } - } + override fun onMediaStoreChanged() { + super.onMediaStoreChanged() + genreDetailsPresenter.loadGenreSongs(genre.id) + } - override fun onMediaStoreChanged() { - super.onMediaStoreChanged() - genreDetailsPresenter.loadGenreSongs(genre.id) - } - - companion object { - const val EXTRA_GENRE_ID = "extra_genre_id" - } + companion object { + const val EXTRA_GENRE_ID = "extra_genre_id" + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java index 89400965..39fb444b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java @@ -65,7 +65,7 @@ public class LicenseActivity extends AbsBaseActivity { Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); ToolbarContentTintHelper.colorBackButton(toolbar); - toolbar.setBackgroundColor(INSTANCE.resolveColor(this, R.attr.colorPrimary)); + toolbar.setBackgroundColor(INSTANCE.resolveColor(this, R.attr.colorSurface)); WebView webView = findViewById(R.id.license); try { StringBuilder buf = new StringBuilder(); @@ -78,7 +78,7 @@ public class LicenseActivity extends AbsBaseActivity { // Inject color values for WebView body background and links final boolean isDark = INSTANCE.isWindowBackgroundDark(this); - final String backgroundColor = colorToCSS(INSTANCE.resolveColor(this, R.attr.colorPrimary, Color.parseColor(isDark ? "#424242" : "#ffffff"))); + final String backgroundColor = colorToCSS(INSTANCE.resolveColor(this, android.R.attr.windowBackground, Color.parseColor(isDark ? "#424242" : "#ffffff"))); final String contentColor = colorToCSS(Color.parseColor(isDark ? "#ffffff" : "#000000")); final String changeLog = buf.toString() .replace("{style-placeholder}", diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt index 50c7f41e..2520171c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt @@ -2,28 +2,44 @@ package code.name.monkey.retromusic.activities import android.annotation.SuppressLint import android.content.res.ColorStateList -import android.os.* -import android.text.* +import android.os.AsyncTask +import android.os.Build +import android.os.Bundle +import android.text.InputType +import android.text.TextUtils import android.view.* import androidx.annotation.StringRes import androidx.core.content.ContextCompat -import androidx.fragment.app.* +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentStatePagerAdapter import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +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.appthemehelper.util.TintHelper +import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.activities.tageditor.WriteTagsAsyncTask +import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment -import code.name.monkey.retromusic.helper.* -import code.name.monkey.retromusic.lyrics.* +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper +import code.name.monkey.retromusic.lyrics.LrcHelper +import code.name.monkey.retromusic.lyrics.LrcView import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.lyrics.Lyrics -import code.name.monkey.retromusic.util.* -import com.afollestad.materialdialogs.* +import code.name.monkey.retromusic.util.LyricUtil +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil +import com.afollestad.materialdialogs.LayoutMode +import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet -import com.afollestad.materialdialogs.input.* +import com.afollestad.materialdialogs.input.getInputLayout +import com.afollestad.materialdialogs.input.input import kotlinx.android.synthetic.main.activity_lyrics.* import kotlinx.android.synthetic.main.fragment_lyrics.* import kotlinx.android.synthetic.main.fragment_synced.* @@ -33,393 +49,373 @@ import java.util.* import kotlin.collections.ArrayList class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPager.OnPageChangeListener { - override fun onPageScrollStateChanged(state: Int) { - when (state) { - ViewPager.SCROLL_STATE_IDLE -> fab.show() - ViewPager.SCROLL_STATE_DRAGGING, ViewPager.SCROLL_STATE_SETTLING -> fab.hide() - } - } + override fun onPageScrollStateChanged(state: Int) { + when (state) { + ViewPager.SCROLL_STATE_IDLE -> fab.show() + ViewPager.SCROLL_STATE_DRAGGING, ViewPager.SCROLL_STATE_SETTLING -> fab.hide() + } + } - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - } + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } - override fun onPageSelected(position: Int) { - PreferenceUtil.getInstance(this).lyricsOptions = position - if (position == 0) fab.text = getString(R.string.synced_lyrics) - else if (position == 1) fab.text = getString(R.string.lyrics) - } + override fun onPageSelected(position: Int) { + PreferenceUtil.getInstance(this).lyricsOptions = position + if (position == 0) fab.text = getString(R.string.synced_lyrics) + else if (position == 1) fab.text = getString(R.string.lyrics) + } - override fun onClick(v: View?) { - when (viewPager.currentItem) { - 0 -> showSyncedLyrics() - 1 -> showLyricsSaveDialog() - } - } + override fun onClick(v: View?) { + when (viewPager.currentItem) { + 0 -> showSyncedLyrics() + 1 -> showLyricsSaveDialog() + } + } - private lateinit var song: Song - private var lyricsString: String? = null + private lateinit var song: Song + private var lyricsString: String? = null - private val googleSearchLrcUrl: String - get() { - var baseUrl = "http://www.google.com/search?" - var query = song.title + "+" + song.artistName - query = "q=" + query.replace(" ", "+") + " .lrc" - baseUrl += query - return baseUrl - } + private val googleSearchLrcUrl: String + get() { + var baseUrl = "http://www.google.com/search?" + var query = song.title + "+" + song.artistName + query = "q=" + query.replace(" ", "+") + " .lrc" + baseUrl += query + return baseUrl + } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_lyrics) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_lyrics) + setStatusbarColorAuto() + setTaskDescriptionColorAuto() + setNavigationBarColorPrimary() - setStatusbarColorAuto() - setTaskDescriptionColorAuto() - setNavigationBarColorPrimary() + applyToolbar(toolbar) + fab.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))) + .apply { + fab.setTextColor(this) + fab.iconTint = this + } + setupWakelock() - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) - appBarLayout.setBackgroundColor(primaryColor) - toolbar.apply { - setBackgroundColor(primaryColor) - navigationIcon = TintHelper.createTintedDrawable( - ContextCompat.getDrawable( - this@LyricsActivity, R.drawable.ic_keyboard_backspace_black_24dp - ), ThemeStore.textColorSecondary(this@LyricsActivity) - ) - setSupportActionBar(toolbar) - } + viewPager.apply { + adapter = PagerAdapter(supportFragmentManager) + currentItem = PreferenceUtil.getInstance(this@LyricsActivity).lyricsOptions + addOnPageChangeListener(this@LyricsActivity) + } + tabs.apply { + setupWithViewPager(viewPager) + setSelectedTabIndicator( + TintHelper.createTintedDrawable( + ContextCompat.getDrawable( + this@LyricsActivity, R.drawable.tab_indicator + ), ThemeStore.accentColor(this@LyricsActivity) + ) + ) + setTabTextColors( + ThemeStore.textColorSecondary(this@LyricsActivity), + ThemeStore.accentColor(this@LyricsActivity) + ) + setSelectedTabIndicatorColor(ThemeStore.accentColor(context)) + } + fab.setOnClickListener(this) + } - fab.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf( - MaterialValueHelper.getPrimaryTextColor( - this, ColorUtil.isColorLight( - ThemeStore.accentColor( - this - ) - ) - ) - ).apply { - fab.setTextColor(this) - fab.iconTint = this - } - setupWakelock() + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + song = MusicPlayerRemote.currentSong + toolbar.title = song.title + toolbar.subtitle = song.artistName + } - viewPager.apply { - adapter = PagerAdapter(supportFragmentManager) - currentItem = PreferenceUtil.getInstance(this@LyricsActivity).lyricsOptions - addOnPageChangeListener(this@LyricsActivity) - } + override fun onServiceConnected() { + super.onServiceConnected() + song = MusicPlayerRemote.currentSong + toolbar.title = song.title + toolbar.subtitle = song.artistName + } - tabs.apply { - setupWithViewPager(viewPager) - setSelectedTabIndicator( - TintHelper.createTintedDrawable( - ContextCompat.getDrawable( - this@LyricsActivity, R.drawable.tab_indicator - ), ThemeStore.accentColor(this@LyricsActivity) - ) - ) - setTabTextColors( - ThemeStore.textColorSecondary(this@LyricsActivity), - ThemeStore.accentColor(this@LyricsActivity) - ) - setSelectedTabIndicatorColor(ThemeStore.accentColor(context)) - } - fab.setOnClickListener(this) - } + private fun setupWakelock() { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } - override fun onPlayingMetaChanged() { - super.onPlayingMetaChanged() - song = MusicPlayerRemote.currentSong - toolbar.title = song.title - toolbar.subtitle = song.artistName - } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() + } + return super.onOptionsItemSelected(item) + } - override fun onServiceConnected() { - super.onServiceConnected() - song = MusicPlayerRemote.currentSong - toolbar.title = song.title - toolbar.subtitle = song.artistName - } + private fun showSyncedLyrics() { + var content = "" + try { + content = LyricUtil.getStringFromFile(song.data, song.artistName) + } catch (e: Exception) { + try { + content = LyricUtil.getStringFromFile(song.title, song.artistName) + } catch (e2: Exception) { - private fun setupWakelock() { - window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) - } + } + e.printStackTrace() + } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (item.itemId == android.R.id.home) { - onBackPressed() - } - return super.onOptionsItemSelected(item) - } + val materialDialog = MaterialDialog( + this, BottomSheet(LayoutMode.WRAP_CONTENT) + ).show { + title(R.string.add_time_framed_lryics) + negativeButton(R.string.action_search) { + RetroUtil.openUrl( + this@LyricsActivity, googleSearchLrcUrl + ) + } + input( + hint = getString(R.string.paste_lyrics_here), + prefill = content, + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE + ) { _, input -> + LyricUtil.writeLrcToLoc(song.data, song.artistName, input.toString()) + } + positiveButton(android.R.string.ok) { + updateSong() + } + } + MaterialUtil.setTint(materialDialog.getInputLayout(), false) + } - private fun showSyncedLyrics() { - var content = "" - try { - content = LyricUtil.getStringFromFile(song.data, song.artistName) - } catch (e: Exception) { - try { - content = LyricUtil.getStringFromFile(song.title, song.artistName) - } catch (e2: Exception) { + private fun updateSong() { + val page = supportFragmentManager.findFragmentByTag("android:switcher:" + R.id.viewPager + ":" + viewPager.currentItem) + if (viewPager.currentItem == 0 && page != null) { + (page as BaseLyricsFragment).upDateSong() + } + } - } - e.printStackTrace() - } + private fun showLyricsSaveDialog() { + val content: String = if (lyricsString == null) { + "" + } else { + lyricsString!! + } - val materialDialog = MaterialDialog( - this, BottomSheet(LayoutMode.WRAP_CONTENT) - ).show { - title(R.string.add_time_framed_lryics) - negativeButton(R.string.action_search) { - RetroUtil.openUrl( - this@LyricsActivity, googleSearchLrcUrl - ) - } - input( - hint = getString(R.string.paste_lyrics_here), - prefill = content, - inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE - ) { _, input -> - LyricUtil.writeLrcToLoc(song.data, song.artistName, input.toString()) - } - positiveButton(android.R.string.ok) { - updateSong() - } - } - MaterialUtil.setTint(materialDialog.getInputLayout(), false) - } + val materialDialog = MaterialDialog( + this, BottomSheet(LayoutMode.WRAP_CONTENT) + ).show { + title(R.string.add_lyrics) + negativeButton(R.string.action_search) { + RetroUtil.openUrl( + this@LyricsActivity, getGoogleSearchUrl() + ) + } + input( + hint = getString(R.string.paste_lyrics_here), + prefill = content, + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE + ) { _, input -> + val fieldKeyValueMap = EnumMap(FieldKey::class.java) + fieldKeyValueMap[FieldKey.LYRICS] = input.toString() + WriteTagsAsyncTask(this@LyricsActivity).execute( + WriteTagsAsyncTask.LoadingInfo( + getSongPaths(song), fieldKeyValueMap, null + ) + ) + } + positiveButton(android.R.string.ok) { + updateSong() + } + } + MaterialUtil.setTint(materialDialog.getInputLayout(), false) + } - private fun updateSong() { - val page = supportFragmentManager.findFragmentByTag("android:switcher:" + R.id.viewPager + ":" + viewPager.currentItem) - if (viewPager.currentItem == 0 && page != null) { - (page as BaseLyricsFragment).upDateSong() - } - } + private fun getSongPaths(song: Song): ArrayList { + val paths = ArrayList(1) + paths.add(song.data) + return paths + } - private fun showLyricsSaveDialog() { - val content: String = if (lyricsString == null) { - "" - } else { - lyricsString!! - } + private fun getGoogleSearchUrl(): String { + var baseUrl = "http://www.google.com/search?" + var query = song.title + "+" + song.artistName + query = "q=" + query.replace(" ", "+") + " lyrics" + baseUrl += query + return baseUrl + } - val materialDialog = MaterialDialog( - this, BottomSheet(LayoutMode.WRAP_CONTENT) - ).show { - title(R.string.add_lyrics) - negativeButton(R.string.action_search) { - RetroUtil.openUrl( - this@LyricsActivity, getGoogleSearchUrl() - ) - } - input( - hint = getString(R.string.paste_lyrics_here), - prefill = content, - inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE - ) { _, input -> - val fieldKeyValueMap = EnumMap(FieldKey::class.java) - fieldKeyValueMap[FieldKey.LYRICS] = input.toString() - WriteTagsAsyncTask(this@LyricsActivity).execute( - WriteTagsAsyncTask.LoadingInfo( - getSongPaths(song), fieldKeyValueMap, null - ) - ) - } - positiveButton(android.R.string.ok) { - updateSong() - } - } - MaterialUtil.setTint(materialDialog.getInputLayout(), false) - } + class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter( + fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT + ) { + class Tabs( + @StringRes val title: Int, val fragment: Fragment + ) - private fun getSongPaths(song: Song): ArrayList { - val paths = ArrayList(1) - paths.add(song.data) - return paths - } + private var tabs = ArrayList() - private fun getGoogleSearchUrl(): String { - var baseUrl = "http://www.google.com/search?" - var query = song.title + "+" + song.artistName - query = "q=" + query.replace(" ", "+") + " lyrics" - baseUrl += query - return baseUrl - } + init { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + tabs.add(Tabs(R.string.synced_lyrics, SyncedLyricsFragment())) + } + tabs.add(Tabs(R.string.normal_lyrics, OfflineLyricsFragment())) + } - class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter( - fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT - ) { - class Tabs( - @StringRes val title: Int, val fragment: Fragment - ) + override fun getItem(position: Int): Fragment { + return tabs[position].fragment + } - private var tabs = ArrayList() + override fun getPageTitle(position: Int): CharSequence? { + return App.getContext().getString(tabs[position].title) + } - init { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { - tabs.add(Tabs(R.string.synced_lyrics, SyncedLyricsFragment())) - } - tabs.add(Tabs(R.string.normal_lyrics, OfflineLyricsFragment())) - } + override fun getCount(): Int { + return tabs.size + } - override fun getItem(position: Int): Fragment { - return tabs[position].fragment - } + } - override fun getPageTitle(position: Int): CharSequence? { - return App.getContext().getString(tabs[position].title) - } + abstract class BaseLyricsFragment : AbsMusicServiceFragment() { + abstract fun upDateSong() - override fun getCount(): Int { - return tabs.size - } + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + upDateSong() + } - } + override fun onServiceConnected() { + super.onServiceConnected() + upDateSong() + } - abstract class BaseLyricsFragment : AbsMusicServiceFragment() { - abstract fun upDateSong() + } - override fun onPlayingMetaChanged() { - super.onPlayingMetaChanged() - upDateSong() - } + class OfflineLyricsFragment : BaseLyricsFragment() { + override fun upDateSong() { + loadSongLyrics() + } - override fun onServiceConnected() { - super.onServiceConnected() - upDateSong() - } + private var updateLyricsAsyncTask: AsyncTask<*, *, *>? = null + private var lyrics: Lyrics? = null - } + @SuppressLint("StaticFieldLeak") + private fun loadSongLyrics() { + if (updateLyricsAsyncTask != null) { + updateLyricsAsyncTask!!.cancel(false) + } + val song = MusicPlayerRemote.currentSong + updateLyricsAsyncTask = object : AsyncTask() { + override fun doInBackground(vararg params: Void?): Lyrics? { + val data = MusicUtil.getLyrics(song) + return if (TextUtils.isEmpty(data)) { + null + } else Lyrics.parse(song, data!!) + } - class OfflineLyricsFragment : BaseLyricsFragment() { - override fun upDateSong() { - loadSongLyrics() - } + override fun onPreExecute() { + super.onPreExecute() + lyrics = null + } - private var updateLyricsAsyncTask: AsyncTask<*, *, *>? = null - private var lyrics: Lyrics? = null + override fun onPostExecute(l: Lyrics?) { + lyrics = l + offlineLyrics?.visibility = View.VISIBLE + if (l == null) { + offlineLyrics?.setText(R.string.no_lyrics_found) + return + } + (activity as LyricsActivity).lyricsString = l.text + offlineLyrics?.text = l.text + } - @SuppressLint("StaticFieldLeak") - private fun loadSongLyrics() { - if (updateLyricsAsyncTask != null) { - updateLyricsAsyncTask!!.cancel(false) - } - val song = MusicPlayerRemote.currentSong - updateLyricsAsyncTask = object : AsyncTask() { - override fun doInBackground(vararg params: Void?): Lyrics? { - val data = MusicUtil.getLyrics(song) - return if (TextUtils.isEmpty(data)) { - null - } else Lyrics.parse(song, data!!) - } + override fun onCancelled(s: Lyrics?) { + onPostExecute(null) + } + }.execute() + } - override fun onPreExecute() { - super.onPreExecute() - lyrics = null - } + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + loadSongLyrics() + } - override fun onPostExecute(l: Lyrics?) { - lyrics = l - offlineLyrics?.visibility = View.VISIBLE - if (l == null) { - offlineLyrics?.setText(R.string.no_lyrics_found) - return - } - (activity as LyricsActivity).lyricsString = l.text - offlineLyrics?.text = l.text - } + override fun onDestroyView() { + super.onDestroyView() + if (updateLyricsAsyncTask != null && !updateLyricsAsyncTask!!.isCancelled) { + updateLyricsAsyncTask?.cancel(true) + } + } - override fun onCancelled(s: Lyrics?) { - onPostExecute(null) - } - }.execute() - } + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_lyrics, container, false) + } + } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - loadSongLyrics() - } + class SyncedLyricsFragment : BaseLyricsFragment(), MusicProgressViewUpdateHelper.Callback { + override fun upDateSong() { + loadLRCLyrics() + } - override fun onDestroyView() { - super.onDestroyView() - if (updateLyricsAsyncTask != null && !updateLyricsAsyncTask!!.isCancelled) { - updateLyricsAsyncTask?.cancel(true) - } - } + private lateinit var updateHelper: MusicProgressViewUpdateHelper + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_synced, container, false) + } - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_lyrics, container, false) - } - } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) + } - class SyncedLyricsFragment : BaseLyricsFragment(), MusicProgressViewUpdateHelper.Callback { - override fun upDateSong() { - loadLRCLyrics() - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupLyricsView() + } - private lateinit var updateHelper: MusicProgressViewUpdateHelper - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_synced, container, false) - } + private fun setupLyricsView() { + lyricsView.apply { + val context = activity!! + setCurrentPlayLineColor(ThemeStore.accentColor(context)) + setIndicatorTextColor(ThemeStore.accentColor(context)) + setCurrentIndicateLineTextColor(ThemeStore.textColorPrimary(context)) + setNoLrcTextColor(ThemeStore.textColorPrimary(context)) + setOnPlayIndicatorLineListener(object : LrcView.OnPlayIndicatorLineListener { + override fun onPlay(time: Long, content: String) { + MusicPlayerRemote.seekTo(time.toInt()) + } + }) + } + } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) - } + override fun onResume() { + super.onResume() + updateHelper.start() + } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setupLyricsView() - } + override fun onPause() { + super.onPause() + updateHelper.stop() + } - private fun setupLyricsView() { - lyricsView.apply { - val context = activity!! - setCurrentPlayLineColor(ThemeStore.accentColor(context)) - setIndicatorTextColor(ThemeStore.accentColor(context)) - setCurrentIndicateLineTextColor(ThemeStore.textColorPrimary(context)) - setNoLrcTextColor(ThemeStore.textColorPrimary(context)) - setOnPlayIndicatorLineListener(object : LrcView.OnPlayIndicatorLineListener { - override fun onPlay(time: Long, content: String) { - MusicPlayerRemote.seekTo(time.toInt()) - } - }) - } - } + override fun onUpdateProgressViews(progress: Int, total: Int) { + lyricsView.updateTime(progress.toLong()) + } - override fun onResume() { - super.onResume() - updateHelper.start() - } + private fun loadLRCLyrics() { + val song = MusicPlayerRemote.currentSong + if (LyricUtil.isLrcFile2Exist(song.data, song.artistName)) { + showLyricsLocal(LyricUtil.getLocalLyricFile(song.data, song.artistName)) + } else { + if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { + showLyricsLocal(LyricUtil.getLocalLyricFile(song.title, song.artistName)) + } + } + } - override fun onPause() { - super.onPause() - updateHelper.stop() - } - - override fun onUpdateProgressViews(progress: Int, total: Int) { - lyricsView.updateTime(progress.toLong()) - } - - private fun loadLRCLyrics() { - val song = MusicPlayerRemote.currentSong - if (LyricUtil.isLrcFile2Exist(song.data, song.artistName)) { - showLyricsLocal(LyricUtil.getLocalLyricFile(song.data, song.artistName)) - } else { - if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { - showLyricsLocal(LyricUtil.getLocalLyricFile(song.title, song.artistName)) - } - } - } - - private fun showLyricsLocal(file: File?) { - if (file != null) { - lyricsView.setLrcData(LrcHelper.parseLrcFromFile(file)) - } - } - } + private fun showLyricsLocal(file: File?) { + if (file != null) { + lyricsView.setLrcData(LrcHelper.parseLrcFromFile(file)) + } + } + } } 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 013c7fc0..7e4774ad 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 @@ -3,15 +3,17 @@ package code.name.monkey.retromusic.activities import android.content.res.ColorStateList import android.os.Bundle import android.view.MenuItem -import androidx.recyclerview.widget.* +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* +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.AbsMusicServiceActivity import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.util.* +import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.ViewUtil import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager @@ -20,169 +22,161 @@ import kotlinx.android.synthetic.main.activity_playing_queue.* open class PlayingQueueActivity : AbsMusicServiceActivity() { - private var wrappedAdapter: RecyclerView.Adapter<*>? = null - private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null - private var playingQueueAdapter: PlayingQueueAdapter? = null - private lateinit var linearLayoutManager: LinearLayoutManager + private var wrappedAdapter: RecyclerView.Adapter<*>? = null + private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null + private var playingQueueAdapter: PlayingQueueAdapter? = null + private lateinit var linearLayoutManager: LinearLayoutManager - private fun getUpNextAndQueueTime(): String { - val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) + private fun getUpNextAndQueueTime(): String { + val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) + return MusicUtil.buildInfoString(resources.getString(R.string.up_next), MusicUtil.getReadableDurationString(duration)) + } - return MusicUtil.buildInfoString( - resources.getString(R.string.up_next), MusicUtil.getReadableDurationString(duration) - ) - } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_playing_queue) + setStatusbarColorAuto() + setNavigationBarColorPrimary() + setTaskDescriptionColorAuto() + setLightNavigationBar(true) - override fun onCreate( - savedInstanceState: Bundle? - ) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_playing_queue) + setupToolbar() + setUpRecyclerView() - setStatusbarColorAuto() - setNavigationBarColorPrimary() - setTaskDescriptionColorAuto() - setLightNavigationBar(true) + clearQueue.setOnClickListener { + MusicPlayerRemote.clearQueue() + } + checkForPadding() + } - setupToolbar() - setUpRecyclerView() + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + android.R.id.home -> { + onBackPressed() + true + } + else -> super.onOptionsItemSelected(item) + } + } - clearQueue.setOnClickListener { - MusicPlayerRemote.clearQueue() - } - checkForPadding() - } + private fun setUpRecyclerView() { + recyclerViewDragDropManager = RecyclerViewDragDropManager() + val animator = RefactoredDefaultItemAnimator() - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - android.R.id.home -> { - onBackPressed() - true - } - else -> super.onOptionsItemSelected(item) - } - } + playingQueueAdapter = PlayingQueueAdapter( + this, + MusicPlayerRemote.playingQueue, + MusicPlayerRemote.position, + R.layout.item_queue + ) + wrappedAdapter = recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) - private fun setUpRecyclerView() { - recyclerViewDragDropManager = RecyclerViewDragDropManager() - val animator = RefactoredDefaultItemAnimator() + linearLayoutManager = LinearLayoutManager(this) - playingQueueAdapter = PlayingQueueAdapter( - this, - MusicPlayerRemote.playingQueue, - MusicPlayerRemote.position, - R.layout.item_queue - ) - wrappedAdapter = recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) + recyclerView.apply { + layoutManager = linearLayoutManager + adapter = wrappedAdapter + itemAnimator = animator + recyclerViewDragDropManager?.attachRecyclerView(this) + } - linearLayoutManager = LinearLayoutManager(this) + linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - recyclerView.apply { - layoutManager = linearLayoutManager - adapter = wrappedAdapter - itemAnimator = animator - recyclerViewDragDropManager?.attachRecyclerView(this) - } + recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + if (dy > 0) { + clearQueue.shrink() + } else if (dy < 0) { + clearQueue.extend() + } + } + }) + ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) + } - linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + private fun checkForPadding() { - recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - clearQueue.shrink() - } else if (dy < 0) { - clearQueue.extend() - } - } - }) - ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) - } + } - private fun checkForPadding() { + override fun onQueueChanged() { + if (MusicPlayerRemote.playingQueue.isEmpty()) { + finish() + return + } + checkForPadding() + updateQueue() + updateCurrentSong() + } - } + override fun onMediaStoreChanged() { + updateQueue() + updateCurrentSong() + } - override fun onQueueChanged() { - if (MusicPlayerRemote.playingQueue.isEmpty()) { - finish() - return - } - checkForPadding() - updateQueue() - updateCurrentSong() - } + private fun updateCurrentSong() { + playerQueueSubHeader.text = getUpNextAndQueueTime() + } - override fun onMediaStoreChanged() { - updateQueue() - updateCurrentSong() - } + override fun onPlayingMetaChanged() { + updateQueuePosition() + } - private fun updateCurrentSong() { - playerQueueSubHeader.text = getUpNextAndQueueTime() - } + private fun updateQueuePosition() { + playingQueueAdapter?.setCurrent(MusicPlayerRemote.position) + resetToCurrentPosition() + playerQueueSubHeader.text = getUpNextAndQueueTime() + } - override fun onPlayingMetaChanged() { - updateQueuePosition() - } + private fun updateQueue() { + playingQueueAdapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) + resetToCurrentPosition() + } - private fun updateQueuePosition() { - playingQueueAdapter?.setCurrent(MusicPlayerRemote.position) - resetToCurrentPosition() - playerQueueSubHeader.text = getUpNextAndQueueTime() - } + private fun resetToCurrentPosition() { + recyclerView.stopScroll() + linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + } - private fun updateQueue() { - playingQueueAdapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) - resetToCurrentPosition() - } + override fun onPause() { + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager!!.cancelDrag() + } + super.onPause() + } - private fun resetToCurrentPosition() { - recyclerView.stopScroll() - linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - } + override fun onDestroy() { + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager!!.release() + recyclerViewDragDropManager = null + } - override fun onPause() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.cancelDrag() - } - super.onPause() - } + if (wrappedAdapter != null) { + WrapperAdapterUtils.releaseAll(wrappedAdapter) + wrappedAdapter = null + } + playingQueueAdapter = null + super.onDestroy() + } - override fun onDestroy() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.release() - recyclerViewDragDropManager = null - } + private fun setupToolbar() { + playerQueueSubHeader.text = getUpNextAndQueueTime() + playerQueueSubHeader.setTextColor(ThemeStore.accentColor(this)) - if (wrappedAdapter != null) { - WrapperAdapterUtils.releaseAll(wrappedAdapter) - wrappedAdapter = null - } - playingQueueAdapter = null - super.onDestroy() - } - - private fun setupToolbar() { - playerQueueSubHeader.text = getUpNextAndQueueTime() - playerQueueSubHeader.setTextColor(ThemeStore.accentColor(this)) - - applyToolbar(toolbar) - appBarLayout.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorPrimary)) - - clearQueue.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf( - MaterialValueHelper.getPrimaryTextColor( - this, - ColorUtil.isColorLight( - ThemeStore.accentColor( - this - ) - ) - ) - ).apply { - clearQueue.setTextColor(this) - clearQueue.iconTint = this - } - } + applyToolbar(toolbar) + clearQueue.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf( + MaterialValueHelper.getPrimaryTextColor( + this, + ColorUtil.isColorLight( + ThemeStore.accentColor( + this + ) + ) + ) + ).apply { + clearQueue.setTextColor(this) + clearQueue.iconTint = this + } + } } 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 ad259a6d..822ad499 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,20 +1,29 @@ package code.name.monkey.retromusic.activities -import android.graphics.Color import android.os.Bundle -import android.view.* -import androidx.recyclerview.widget.* -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +import android.view.Menu +import android.view.MenuItem +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.retromusic.App +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.song.* -import code.name.monkey.retromusic.extensions.applyToolbar +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.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.loaders.PlaylistLoader -import code.name.monkey.retromusic.model.* -import code.name.monkey.retromusic.mvp.presenter.* -import code.name.monkey.retromusic.util.* +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.presenter.PlaylistSongsPresenter +import code.name.monkey.retromusic.mvp.presenter.PlaylistSongsView +import code.name.monkey.retromusic.util.DensityUtil +import code.name.monkey.retromusic.util.PlaylistsUtil +import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.ViewUtil import com.afollestad.materialcab.MaterialCab import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator @@ -25,217 +34,202 @@ import javax.inject.Inject class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsView { - @Inject - lateinit var playlistSongsPresenter: PlaylistSongsPresenter + @Inject + lateinit var playlistSongsPresenter: PlaylistSongsPresenter - private lateinit var playlist: Playlist - private var cab: MaterialCab? = null - private lateinit var adapter: SongAdapter - private var wrappedAdapter: RecyclerView.Adapter<*>? = null - private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null + private lateinit var playlist: Playlist + private var cab: MaterialCab? = null + private lateinit var adapter: SongAdapter + private var wrappedAdapter: RecyclerView.Adapter<*>? = null + private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null - override fun onCreate(savedInstanceState: Bundle?) { - setDrawUnderStatusBar() - super.onCreate(savedInstanceState) - App.musicComponent.inject(this) + override fun onCreate(savedInstanceState: Bundle?) { + setDrawUnderStatusBar() + super.onCreate(savedInstanceState) + setStatusbarColorAuto() + setNavigationbarColorAuto() + setTaskDescriptionColorAuto() + setLightNavigationBar(true) + toggleBottomNavigationView(true) - playlistSongsPresenter.attachView(this) + App.musicComponent.inject(this) + playlistSongsPresenter.attachView(this) - setStatusbarColor(Color.TRANSPARENT) - setNavigationbarColorAuto() - setTaskDescriptionColorAuto() - setLightNavigationBar(true) - setLightStatusbar(ColorUtil.isColorLight(ATHUtil.resolveColor(this, R.attr.colorPrimary))) + if (intent.extras != null) { + playlist = intent.extras!!.getParcelable(EXTRA_PLAYLIST)!! + } else { + finish() + } - toggleBottomNavigationView(true) + setUpToolBar() + setUpRecyclerView() + } - if (intent.extras != null) { - playlist = intent.extras!!.getParcelable(EXTRA_PLAYLIST)!! - } else { - finish() - } + override fun createContentView(): View { + return wrapSlidingMusicPanel(R.layout.activity_playlist_detail) + } - setUpToolBar() - setUpRecyclerView() - } + private fun setUpRecyclerView() { + ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) + recyclerView.layoutManager = LinearLayoutManager(this) + if (playlist is AbsCustomPlaylist) { + adapter = PlaylistSongAdapter(this, ArrayList(), R.layout.item_list, false, this) + recyclerView.adapter = adapter + } else { + recyclerViewDragDropManager = RecyclerViewDragDropManager() + val animator = RefactoredDefaultItemAnimator() + adapter = OrderablePlaylistSongAdapter(this, + ArrayList(), + R.layout.item_list, + false, + this, + object : OrderablePlaylistSongAdapter.OnMoveItemListener { + override fun onMoveItem(fromPosition: Int, toPosition: Int) { + if (PlaylistsUtil.moveItem(this@PlaylistDetailActivity, playlist.id, fromPosition, toPosition)) { + val song = adapter.dataSet.removeAt(fromPosition) + adapter.dataSet.add(toPosition, song) + adapter.notifyItemMoved(fromPosition, toPosition) + } + } + }) + wrappedAdapter = recyclerViewDragDropManager!!.createWrappedAdapter(adapter) - override fun createContentView(): View { - return wrapSlidingMusicPanel(R.layout.activity_playlist_detail) - } + recyclerView.adapter = wrappedAdapter + recyclerView.itemAnimator = animator - private fun setUpRecyclerView() { - ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView) - recyclerView.layoutManager = LinearLayoutManager(this) - if (playlist is AbsCustomPlaylist) { - adapter = PlaylistSongAdapter(this, ArrayList(), R.layout.item_list, false, this) - recyclerView.adapter = adapter - } else { - recyclerViewDragDropManager = RecyclerViewDragDropManager() - val animator = RefactoredDefaultItemAnimator() - adapter = OrderablePlaylistSongAdapter(this, - ArrayList(), - R.layout.item_list, - false, - this, - object : OrderablePlaylistSongAdapter.OnMoveItemListener { - override fun onMoveItem( - fromPosition: Int, - toPosition: Int - ) { - if (PlaylistsUtil.moveItem( - this@PlaylistDetailActivity, - playlist.id, - fromPosition, - toPosition - )) { - val song = adapter.dataSet.removeAt( - fromPosition - ) - adapter.dataSet.add(toPosition, song) - adapter.notifyItemMoved( - fromPosition, - toPosition - ) - } - } - }) - wrappedAdapter = recyclerViewDragDropManager!!.createWrappedAdapter(adapter) + recyclerViewDragDropManager?.attachRecyclerView(recyclerView) + } + adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + super.onChanged() + checkIsEmpty() + } + }) + } - recyclerView.adapter = wrappedAdapter - recyclerView.itemAnimator = animator + override fun onResume() { + super.onResume() + playlistSongsPresenter.loadPlaylistSongs(playlist) + } - recyclerViewDragDropManager?.attachRecyclerView(recyclerView) - } - adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - super.onChanged() - checkIsEmpty() - } - }) - } + private fun setUpToolBar() { + toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) + setSupportActionBar(toolbar) + title = playlist.name + } - override fun onResume() { - super.onResume() - playlistSongsPresenter.loadPlaylistSongs(playlist) - } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate( + if (playlist is AbsCustomPlaylist) R.menu.menu_smart_playlist_detail + else R.menu.menu_playlist_detail, menu + ) + return super.onCreateOptionsMenu(menu) + } - private fun setUpToolBar() { - applyToolbar(toolbar) - title = playlist.name - } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + android.R.id.home -> { + onBackPressed() + return true + } + } + return PlaylistMenuHelper.handleMenuClick(this, playlist, item) + } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate( - if (playlist is AbsCustomPlaylist) R.menu.menu_smart_playlist_detail - else R.menu.menu_playlist_detail, menu - ) - return super.onCreateOptionsMenu(menu) - } + override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { + if (cab != null && cab!!.isActive) { + cab!!.finish() + } + cab = MaterialCab(this, R.id.cab_stub).setMenu(menuRes) + .setCloseDrawableRes(R.drawable.ic_close_white_24dp).setBackgroundColor( + RetroColorUtil.shiftBackgroundColorForLightText( + ATHUtil.resolveColor( + this, + R.attr.colorPrimary + ) + ) + ).start(callback) + return cab!! + } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - android.R.id.home -> { - onBackPressed() - return true - } - } - return PlaylistMenuHelper.handleMenuClick(this, playlist, item) - } + override fun onBackPressed() { + if (cab != null && cab!!.isActive) { + cab!!.finish() + } else { + recyclerView!!.stopScroll() + super.onBackPressed() + } + } - override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { - if (cab != null && cab!!.isActive) { - cab!!.finish() - } - cab = MaterialCab(this, R.id.cab_stub).setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp).setBackgroundColor( - RetroColorUtil.shiftBackgroundColorForLightText( - ATHUtil.resolveColor( - this, - R.attr.colorPrimary - ) - ) - ).start(callback) - return cab!! - } + override fun onMediaStoreChanged() { + super.onMediaStoreChanged() + if (playlist !is AbsCustomPlaylist) { + // Playlist deleted + if (!PlaylistsUtil.doesPlaylistExist(this, playlist.id)) { + finish() + return + } + // Playlist renamed + val playlistName = PlaylistsUtil.getNameForPlaylist(this, playlist.id.toLong()) + if (playlistName != playlist.name) { + playlist = PlaylistLoader.getPlaylist(this, playlist.id) + setToolbarTitle(playlist.name) + } + } + playlistSongsPresenter.loadPlaylistSongs(playlist) + } - override fun onBackPressed() { - if (cab != null && cab!!.isActive) { - cab!!.finish() - } else { - recyclerView!!.stopScroll() - super.onBackPressed() - } - } + private fun setToolbarTitle(title: String) { + supportActionBar!!.title = title + } - override fun onMediaStoreChanged() { - super.onMediaStoreChanged() - if (playlist !is AbsCustomPlaylist) { - // Playlist deleted - if (!PlaylistsUtil.doesPlaylistExist(this, playlist.id)) { - finish() - return - } - // Playlist renamed - val playlistName = PlaylistsUtil.getNameForPlaylist(this, playlist.id.toLong()) - if (playlistName != playlist.name) { - playlist = PlaylistLoader.getPlaylist(this, playlist.id) - setToolbarTitle(playlist.name) - } - } - playlistSongsPresenter.loadPlaylistSongs(playlist) - } + private fun checkForPadding() { + val height = DensityUtil.dip2px(this, 52f) + recyclerView.setPadding(0, 0, 0, (height)) + } - private fun setToolbarTitle(title: String) { - supportActionBar!!.title = title - } + private fun checkIsEmpty() { + checkForPadding() + empty.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE + emptyText.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE + } - private fun checkForPadding() { - val height = DensityUtil.dip2px(this, 52f) - recyclerView.setPadding(0, 0, 0, (height)) - } + public override fun onPause() { + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager!!.cancelDrag() + } + super.onPause() + } - private fun checkIsEmpty() { - checkForPadding() - empty.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE - emptyText.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE - } + override fun onDestroy() { + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager!!.release() + recyclerViewDragDropManager = null + } - public override fun onPause() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.cancelDrag() - } - super.onPause() - } + if (recyclerView != null) { + recyclerView!!.itemAnimator = null + recyclerView!!.adapter = null + } - override fun onDestroy() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.release() - recyclerViewDragDropManager = null - } + if (wrappedAdapter != null) { + WrapperAdapterUtils.releaseAll(wrappedAdapter) + wrappedAdapter = null + } + super.onDestroy() + playlistSongsPresenter.detachView() + } - if (recyclerView != null) { - recyclerView!!.itemAnimator = null - recyclerView!!.adapter = null - } + override fun showEmptyView() { + empty.visibility = View.VISIBLE + emptyText.visibility = View.VISIBLE + } - if (wrappedAdapter != null) { - WrapperAdapterUtils.releaseAll(wrappedAdapter) - wrappedAdapter = null - } - super.onDestroy() - playlistSongsPresenter.detachView() - } + override fun songs(songs: ArrayList) { + adapter.swapDataSet(songs) + } - override fun showEmptyView() { - empty.visibility = View.VISIBLE - emptyText.visibility = View.VISIBLE - } - - override fun songs(songs: ArrayList) { - adapter.swapDataSet(songs) - } - - companion object { - var EXTRA_PLAYLIST = "extra_playlist" - } + companion object { + var EXTRA_PLAYLIST = "extra_playlist" + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt index 6dcdab37..c0886275 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt @@ -1,16 +1,19 @@ package code.name.monkey.retromusic.activities import android.content.Intent -import android.os.* +import android.os.AsyncTask +import android.os.Bundle import android.util.Log import android.view.MenuItem import android.widget.Toast -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +import code.name.monkey.appthemehelper.util.MaterialUtil +import code.name.monkey.retromusic.App import code.name.monkey.retromusic.BuildConfig +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.extensions.applyToolbar -import com.anjlab.android.iab.v3.* +import com.anjlab.android.iab.v3.BillingProcessor +import com.anjlab.android.iab.v3.TransactionDetails import kotlinx.android.synthetic.main.activity_pro_version.* import java.lang.ref.WeakReference @@ -23,16 +26,11 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { super.onCreate(savedInstanceState) setContentView(R.layout.activity_pro_version) setDrawUnderStatusBar() - setStatusbarColorAuto() setNavigationBarColorPrimary() setTaskDescriptionColorAuto() setLightNavigationBar(true) - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) - toolbar.setBackgroundColor(primaryColor) - appBarLayout.setBackgroundColor(primaryColor) - applyToolbar(toolbar) restoreButton.isEnabled = false 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 588c6dc2..cf7d0856 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 @@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionManager 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.App @@ -125,7 +124,6 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, TextWatch private fun setUpToolBar() { title = null - appBarLayout.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorPrimary)) } private fun search(query: String) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index e489541d..1f559184 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -5,7 +5,8 @@ import android.view.MenuItem import androidx.annotation.StringRes import androidx.fragment.app.Fragment import androidx.transition.TransitionManager -import code.name.monkey.appthemehelper.util.* +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.fragments.settings.MainSettingsFragment @@ -25,8 +26,7 @@ class SettingsActivity : AbsBaseActivity() { setupToolbar() if (savedInstanceState == null) { - fragmentManager.beginTransaction().replace(R.id.contentFrame, MainSettingsFragment()) - .commit() + fragmentManager.beginTransaction().replace(R.id.contentFrame, MainSettingsFragment()).commit() } } @@ -34,13 +34,10 @@ class SettingsActivity : AbsBaseActivity() { setSupportActionBar(toolbar) setTitle(R.string.action_settings) toolbar.apply { - setTitleTextColor(ATHUtil.resolveColor(this@SettingsActivity, R.attr.colorOnPrimary)) - setBackgroundColor(ATHUtil.resolveColor(this@SettingsActivity, R.attr.colorPrimary)) + setBackgroundColor(ATHUtil.resolveColor(this@SettingsActivity, R.attr.colorSurface)) setNavigationOnClickListener { onBackPressed() } ToolbarContentTintHelper.colorBackButton(toolbar) } - appBarLayout.setBackgroundColor(ATHUtil.resolveColor(this@SettingsActivity, R.attr.colorPrimary)) - } fun setupFragment(fragment: Fragment, @StringRes titleName: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt index b4c94878..737060e5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt @@ -2,20 +2,30 @@ package code.name.monkey.retromusic.activities import android.content.Intent import android.graphics.Paint -import android.os.* +import android.os.AsyncTask +import android.os.Bundle import android.util.Log -import android.view.* -import android.widget.* +import android.view.LayoutInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import android.widget.Toast import androidx.annotation.LayoutRes import androidx.appcompat.widget.AppCompatImageView -import androidx.recyclerview.widget.* +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.BuildConfig +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.extensions.applyToolbar -import com.anjlab.android.iab.v3.* +import com.anjlab.android.iab.v3.BillingProcessor +import com.anjlab.android.iab.v3.SkuDetails +import com.anjlab.android.iab.v3.TransactionDetails import kotlinx.android.synthetic.main.activity_donation.* import java.lang.ref.WeakReference import java.util.* @@ -61,8 +71,6 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH } private fun setupToolbar() { - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) - appBarLayout.setBackgroundColor(primaryColor) applyToolbar(toolbar) } 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 946b054a..7d760604 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 @@ -1,7 +1,10 @@ package code.name.monkey.retromusic.activities import android.app.Activity -import android.content.* +import android.content.ContentUris +import android.content.Context +import android.content.ContextWrapper +import android.content.Intent import android.content.res.ColorStateList import android.graphics.Bitmap import android.net.Uri @@ -13,298 +16,266 @@ import android.text.TextUtils import android.view.MenuItem import android.widget.Toast import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.* +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.Constants.USER_BANNER import code.name.monkey.retromusic.Constants.USER_PROFILE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.util.* +import code.name.monkey.retromusic.util.Compressor import code.name.monkey.retromusic.util.ImageUtil.getResizedBitmap -import com.afollestad.materialdialogs.* +import code.name.monkey.retromusic.util.PreferenceUtil +import com.afollestad.materialdialogs.LayoutMode +import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.list.listItems import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.activity_user_info.* -import java.io.* +import java.io.File +import java.io.FileOutputStream +import java.io.IOException class UserInfoActivity : AbsBaseActivity() { - private var disposable = CompositeDisposable() + private var disposable = CompositeDisposable() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_user_info) - setStatusbarColorAuto() - setNavigationBarColorPrimary() - setTaskDescriptionColorAuto() - setLightNavigationBar(true) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_user_info) + setStatusbarColorAuto() + setNavigationBarColorPrimary() + setTaskDescriptionColorAuto() + setLightNavigationBar(true) - setupToolbar() + applyToolbar(toolbar) - MaterialUtil.setTint(nameContainer, false) - name.setText(PreferenceUtil.getInstance(this).userName) + MaterialUtil.setTint(nameContainer, false) + name.setText(PreferenceUtil.getInstance(this).userName) - if (PreferenceUtil.getInstance(this).profileImage.isNotEmpty()) { - loadImageFromStorage(PreferenceUtil.getInstance(this).profileImage) - } - if (PreferenceUtil.getInstance(this).bannerImage.isNotEmpty()) { - loadBannerFromStorage(PreferenceUtil.getInstance(this).bannerImage) - } - userImage.setOnClickListener { - MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { - title(text = getString(R.string.set_photo)) - listItems( - items = listOf( - getString(R.string.new_profile_photo), - getString(R.string.remove_profile_photo) - ) - ) { _, position, _ -> - when (position) { - 0 -> pickNewPhoto() - 1 -> PreferenceUtil.getInstance(this@UserInfoActivity).saveProfileImage("") - } - } - } - } - bannerSelect.setOnClickListener { - showBannerOptions() - } - next.setOnClickListener { - val nameString = name.text.toString().trim { it <= ' ' } - if (TextUtils.isEmpty(nameString)) { - Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() - return@setOnClickListener - } - /*val bioString = bio.text.toString().trim() { it <= ' ' } - if (TextUtils.isEmpty(bioString)) { - Toast.makeText(this, "Umm bio is empty", Toast.LENGTH_SHORT).show() - return@setOnClickListener + if (PreferenceUtil.getInstance(this).profileImage.isNotEmpty()) { + loadImageFromStorage(PreferenceUtil.getInstance(this).profileImage) + } + if (PreferenceUtil.getInstance(this).bannerImage.isNotEmpty()) { + loadBannerFromStorage(PreferenceUtil.getInstance(this).bannerImage) + } + userImage.setOnClickListener { + MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { + cornerRadius(PreferenceUtil.getInstance(this@UserInfoActivity).dialogCorner) + title(text = getString(R.string.set_photo)) + listItems(items = listOf(getString(R.string.new_profile_photo), getString(R.string.remove_profile_photo))) { _, position, _ -> + when (position) { + 0 -> pickNewPhoto() + 1 -> PreferenceUtil.getInstance(this@UserInfoActivity).saveProfileImage("") + } + } + } + } + bannerSelect.setOnClickListener { + MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { + cornerRadius(PreferenceUtil.getInstance(this@UserInfoActivity).dialogCorner) + title(R.string.select_banner_photo) + listItems(items = listOf(getString(R.string.new_banner_photo), getString(R.string.remove_banner_photo))) + { _, position, _ -> + when (position) { + 0 -> selectBannerImage() + 1 -> PreferenceUtil.getInstance(this@UserInfoActivity).setBannerImagePath("") + } + } + } + } + next.setOnClickListener { + val nameString = name.text.toString().trim { it <= ' ' } + if (TextUtils.isEmpty(nameString)) { + Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() + return@setOnClickListener + } + PreferenceUtil.getInstance(this).userName = nameString + setResult(Activity.RESULT_OK) + finish() + } + next.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))) + .apply { + next.setTextColor(this) + next.iconTint = this + } + } - }*/ - PreferenceUtil.getInstance(this).userName = nameString - //PreferenceUtil.getInstance().userBio = bioString - setResult(Activity.RESULT_OK) - finish() - } - next.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf( - MaterialValueHelper.getPrimaryTextColor( - this, - ColorUtil.isColorLight( - ThemeStore.accentColor( - this - ) - ) - ) - ).apply { - next.setTextColor(this) - next.iconTint = this - } - } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() + } + return super.onOptionsItemSelected(item) + } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (item.itemId == android.R.id.home) { - onBackPressed() - } - return super.onOptionsItemSelected(item) - } + private fun selectBannerImage() { + val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI) + pickImageIntent.type = "image/*" + //pickImageIntent.putExtra("crop", "true") + pickImageIntent.putExtra("outputX", 1290) + pickImageIntent.putExtra("outputY", 720) + pickImageIntent.putExtra("aspectX", 16) + pickImageIntent.putExtra("aspectY", 9) + pickImageIntent.putExtra("scale", true) + //intent.setAction(Intent.ACTION_GET_CONTENT); + startActivityForResult( + Intent.createChooser(pickImageIntent, "Select Picture"), + PICK_BANNER_REQUEST + ) + } - private fun setupToolbar() { - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) - applyToolbar(toolbar) - appBarLayout.setBackgroundColor(primaryColor) - } + private fun pickNewPhoto() { + val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI) + pickImageIntent.type = "image/*" + pickImageIntent.putExtra("crop", "true") + pickImageIntent.putExtra("outputX", 512) + pickImageIntent.putExtra("outputY", 512) + pickImageIntent.putExtra("aspectX", 1) + pickImageIntent.putExtra("aspectY", 1) + pickImageIntent.putExtra("scale", true) + startActivityForResult( + Intent.createChooser(pickImageIntent, "Select Picture"), + PICK_IMAGE_REQUEST + ) + } - private fun showBannerOptions() { - MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { - title(R.string.select_banner_photo) - listItems( - items = listOf( - getString(R.string.new_banner_photo), - getString(R.string.remove_banner_photo) - ) - ) { _, position, _ -> - when (position) { - 0 -> selectBannerImage() - 1 -> PreferenceUtil.getInstance(this@UserInfoActivity).setBannerImagePath("") - } - } - } - } + public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == Activity.RESULT_OK && data != null) { + when (requestCode) { + PICK_IMAGE_REQUEST -> { + try { + data.data?.let { + val bitmap = getResizedBitmap( + getBitmap(contentResolver, it), + PROFILE_ICON_SIZE + ) + val profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE) + PreferenceUtil.getInstance(this).saveProfileImage(profileImagePath) + loadImageFromStorage(profileImagePath) + } - private fun selectBannerImage() { + } catch (e: IOException) { + e.printStackTrace() + } + } + PICK_BANNER_REQUEST -> { + try { + data.data?.let { + val bitmap = getBitmap(contentResolver, it) + val profileImagePath = saveToInternalStorage(bitmap, USER_BANNER) + PreferenceUtil.getInstance(this).setBannerImagePath(profileImagePath) + loadBannerFromStorage(profileImagePath) + } + } catch (e: IOException) { + e.printStackTrace() + } + } + } + } + } - if (TextUtils.isEmpty(PreferenceUtil.getInstance(this).bannerImage)) { - val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI) - pickImageIntent.type = "image/*" - //pickImageIntent.putExtra("crop", "true") - pickImageIntent.putExtra("outputX", 1290) - pickImageIntent.putExtra("outputY", 720) - pickImageIntent.putExtra("aspectX", 16) - pickImageIntent.putExtra("aspectY", 9) - pickImageIntent.putExtra("scale", true) - //intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult( - Intent.createChooser(pickImageIntent, "Select Picture"), - PICK_BANNER_REQUEST - ) - } else { - PreferenceUtil.getInstance(this).setBannerImagePath("") - bannerImage.setImageResource(android.R.color.transparent) - } - } + private fun getImagePathFromUri(aUri: Uri?): String? { + var imagePath: String? = null + if (aUri == null) { + return imagePath + } + if (DocumentsContract.isDocumentUri(App.getContext(), aUri)) { + val documentId = DocumentsContract.getDocumentId(aUri) + if ("com.android.providers.media.documents" == aUri.authority) { + val id = documentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1] + val selection = Media._ID + "=" + id + imagePath = getImagePath(Media.EXTERNAL_CONTENT_URI, selection) + } else if ("com.android.providers.downloads.documents" == aUri.authority) { + val contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), + java.lang.Long.valueOf(documentId) + ) + imagePath = getImagePath(contentUri, null) + } + } else if ("content".equals(aUri.scheme!!, ignoreCase = true)) { + imagePath = getImagePath(aUri, null) + } else if ("file".equals(aUri.scheme!!, ignoreCase = true)) { + imagePath = aUri.path + } + return imagePath + } - private fun pickNewPhoto() { - val pickImageIntent = Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI) - pickImageIntent.type = "image/*" - pickImageIntent.putExtra("crop", "true") - pickImageIntent.putExtra("outputX", 512) - pickImageIntent.putExtra("outputY", 512) - pickImageIntent.putExtra("aspectX", 1) - pickImageIntent.putExtra("aspectY", 1) - pickImageIntent.putExtra("scale", true) - startActivityForResult( - Intent.createChooser(pickImageIntent, "Select Picture"), - PICK_IMAGE_REQUEST - ) - } + private fun getImagePath(aUri: Uri, aSelection: String?): String? { + var path: String? = null + val cursor = App.getContext().contentResolver.query(aUri, null, aSelection, null, null) + if (cursor != null) { + if (cursor.moveToFirst()) { + path = cursor.getString(cursor.getColumnIndex(Media.DATA)) + } + cursor.close() + } + return path + } - public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK && data != null) { - when (requestCode) { - PICK_IMAGE_REQUEST -> { - try { - data.data?.let { - val bitmap = getResizedBitmap( - getBitmap(contentResolver, it), - PROFILE_ICON_SIZE - ) - val profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE) - PreferenceUtil.getInstance(this).saveProfileImage(profileImagePath) - loadImageFromStorage(profileImagePath) - } + private fun loadBannerFromStorage(profileImagePath: String) { + disposable.add( + Compressor(this).setQuality(100).setCompressFormat(Bitmap.CompressFormat.WEBP).compressToBitmapAsFlowable( + File(profileImagePath, USER_BANNER) + ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe( + { bitmap -> bannerImage.setImageBitmap(bitmap) }, + { t -> println() }) + ) + } - } catch (e: IOException) { - e.printStackTrace() - } - } - PICK_BANNER_REQUEST -> { - try { - data.data?.let { - val bitmap = getBitmap(contentResolver, it) - val profileImagePath = saveToInternalStorage(bitmap, USER_BANNER) - PreferenceUtil.getInstance(this).setBannerImagePath(profileImagePath) - loadBannerFromStorage(profileImagePath) - } - } catch (e: IOException) { - e.printStackTrace() - } - } - } - } - } + private fun loadImageFromStorage(path: String) { + disposable.add( + Compressor(this).setMaxHeight(300).setMaxWidth(300).setQuality(75).setCompressFormat( + Bitmap.CompressFormat.WEBP + ).compressToBitmapAsFlowable( + File( + path, + USER_PROFILE + ) + ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe( + { bitmap -> userImage!!.setImageBitmap(bitmap) }, + { t -> println() }) + ) + } - private fun getImagePathFromUri(aUri: Uri?): String? { - var imagePath: String? = null - if (aUri == null) { - return imagePath - } - if (DocumentsContract.isDocumentUri(App.getContext(), aUri)) { - val documentId = DocumentsContract.getDocumentId(aUri) - if ("com.android.providers.media.documents" == aUri.authority) { - val id = documentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1] - val selection = Media._ID + "=" + id - imagePath = getImagePath(Media.EXTERNAL_CONTENT_URI, selection) - } else if ("com.android.providers.downloads.documents" == aUri.authority) { - val contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), - java.lang.Long.valueOf(documentId) - ) - imagePath = getImagePath(contentUri, null) - } - } else if ("content".equals(aUri.scheme!!, ignoreCase = true)) { - imagePath = getImagePath(aUri, null) - } else if ("file".equals(aUri.scheme!!, ignoreCase = true)) { - imagePath = aUri.path - } - return imagePath - } + private fun saveToInternalStorage(bitmapImage: Bitmap, userBanner: String): String { + val cw = ContextWrapper(this) + val directory = cw.getDir("imageDir", Context.MODE_PRIVATE) + val myPath = File(directory, userBanner) + var fos: FileOutputStream? = null + try { + fos = FileOutputStream(myPath) + // Use the compress method on the BitMap object to write image to the OutputStream + bitmapImage.compress(Bitmap.CompressFormat.WEBP, 100, fos) + } catch (e: Exception) { + e.printStackTrace() + } finally { + try { + fos?.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + return directory.absolutePath + } - private fun getImagePath(aUri: Uri, aSelection: String?): String? { - var path: String? = null - val cursor = App.getContext().contentResolver.query(aUri, null, aSelection, null, null) - if (cursor != null) { - if (cursor.moveToFirst()) { - path = cursor.getString(cursor.getColumnIndex(Media.DATA)) - } - cursor.close() - } - return path - } + companion object { - private fun loadBannerFromStorage(profileImagePath: String) { - disposable.add( - Compressor(this).setQuality(100).setCompressFormat(Bitmap.CompressFormat.WEBP).compressToBitmapAsFlowable( - File(profileImagePath, USER_BANNER) - ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe( - { bitmap -> bannerImage.setImageBitmap(bitmap) }, - { t -> println() }) - ) - } - - private fun loadImageFromStorage(path: String) { - disposable.add( - Compressor(this).setMaxHeight(300).setMaxWidth(300).setQuality(75).setCompressFormat( - Bitmap.CompressFormat.WEBP - ).compressToBitmapAsFlowable( - File( - path, - USER_PROFILE - ) - ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe( - { bitmap -> userImage!!.setImageBitmap(bitmap) }, - { t -> println() }) - ) - } - - private fun saveToInternalStorage(bitmapImage: Bitmap, userBanner: String): String { - val cw = ContextWrapper(this) - val directory = cw.getDir("imageDir", Context.MODE_PRIVATE) - val myPath = File(directory, userBanner) - var fos: FileOutputStream? = null - try { - fos = FileOutputStream(myPath) - // Use the compress method on the BitMap object to write image to the OutputStream - bitmapImage.compress(Bitmap.CompressFormat.WEBP, 100, fos) - } catch (e: Exception) { - e.printStackTrace() - } finally { - try { - fos?.close() - } catch (e: IOException) { - e.printStackTrace() - } - } - return directory.absolutePath - } - - companion object { - - private const val PICK_IMAGE_REQUEST = 9002 - private const val PICK_BANNER_REQUEST = 9004 - private const val PROFILE_ICON_SIZE = 400 - } + private const val PICK_IMAGE_REQUEST = 9002 + private const val PICK_BANNER_REQUEST = 9004 + private const val PROFILE_ICON_SIZE = 400 + } } fun Activity.pickImage(requestCode: Int) { - Intent(Intent.ACTION_GET_CONTENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "image/*" - startActivityForResult(this, requestCode) - } + Intent(Intent.ACTION_GET_CONTENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "image/*" + startActivityForResult(this, requestCode) + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java index a9db522a..d0206acf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java @@ -60,7 +60,7 @@ public class WhatsNewActivity extends AbsBaseActivity { toolbar = findViewById(R.id.toolbar); appBarLayout = findViewById(R.id.appBarLayout); - int primaryColor = INSTANCE.resolveColor(this, R.attr.colorPrimary); + int primaryColor = INSTANCE.resolveColor(this, R.attr.colorSurface); toolbar.setBackgroundColor(primaryColor); appBarLayout.setBackgroundColor(primaryColor); //setSupportActionBar(toolbar); @@ -79,11 +79,10 @@ public class WhatsNewActivity extends AbsBaseActivity { // Inject color values for WebView body background and links final boolean isDark = INSTANCE.isWindowBackgroundDark(this); - final String backgroundColor = colorToCSS(INSTANCE.resolveColor(this, R.attr.colorPrimary, Color.parseColor(isDark ? "#424242" : "#ffffff"))); + final String backgroundColor = colorToCSS(INSTANCE.resolveColor(this, android.R.attr.windowBackground, Color.parseColor(isDark ? "#424242" : "#ffffff"))); final String contentColor = colorToCSS(Color.parseColor(isDark ? "#ffffff" : "#000000")); final String changeLog = buf.toString() - .replace("{style-placeholder}", - String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor)) + .replace("{style-placeholder}", String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor)) .replace("{link-color}", colorToCSS(ThemeStore.Companion.accentColor(this))) .replace("{link-color-active}", colorToCSS(ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))); diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 235fef2e..8c39307b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -1,7 +1,6 @@ package code.name.monkey.retromusic.activities.base import android.animation.ValueAnimator -import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Rect import android.os.Bundle @@ -35,6 +34,7 @@ import code.name.monkey.retromusic.fragments.player.plain.PlainPlayerFragment import code.name.monkey.retromusic.fragments.player.simple.SimplePlayerFragment import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.views.BottomNavigationBarTinted @@ -114,13 +114,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlay override fun onDestroy() { super.onDestroy() bottomSheetBehavior.removeBottomSheetCallback(bottomSheetCallbackList) - if (navigationBarColorAnimator != null) navigationBarColorAnimator!!.cancel() // just in case + if (navigationBarColorAnimator != null) navigationBarColorAnimator?.cancel() // just in case } protected fun wrapSlidingMusicPanel(@LayoutRes resId: Int): View { - @SuppressLint("InflateParams") val slidingMusicPanelLayout = layoutInflater.inflate( - R.layout.sliding_music_panel_layout, null - ) + val slidingMusicPanelLayout = layoutInflater.inflate(R.layout.sliding_music_panel_layout, null) val contentContainer = slidingMusicPanelLayout.findViewById(R.id.mainContentFrame) layoutInflater.inflate(resId, contentContainer) return slidingMusicPanelLayout @@ -143,7 +141,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlay miniPlayerFragment?.view?.visibility = if (alpha == 0f) View.GONE else View.VISIBLE bottomNavigationView.translationY = progress * 500 - bottomNavigationView.alpha = alpha + //bottomNavigationView.alpha = alpha } open fun onPanelCollapsed() { @@ -296,13 +294,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlay super.setLightNavigationBar(isColorLight) super.setLightStatusbar(isColorLight) } else { - super.setLightStatusbar( - ColorUtil.isColorLight( - ATHUtil.resolveColor( - this, R.attr.colorPrimary - ) - ) - ) + super.setLightStatusbar(ColorUtil.isColorLight(ATHUtil.resolveColor(this, android.R.attr.windowBackground))) super.setLightNavigationBar(true) } } @@ -339,15 +331,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlay private fun updateTabs() { bottomNavigationView.menu.clear() - val currentTabs = PreferenceUtil.getInstance(this).libraryCategoryInfos + val currentTabs: List = PreferenceUtil.getInstance(this).libraryCategoryInfos for (tab in currentTabs) { if (tab.visible) { val menu = tab.category - bottomNavigationView.menu.add( - 0, menu.id, 0, menu.stringRes - ).setIcon(menu.icon) + bottomNavigationView.menu.add(0, menu.id, 0, menu.stringRes).setIcon(menu.icon) } } + if (currentTabs.size <= 1) { + toggleBottomNavigationView(true) + } } override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index bb4dd5cf..c690fc59 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -91,11 +91,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { if (statusBar != null) { when { VersionUtils.hasMarshmallow() -> window.statusBarColor = color - VersionUtils.hasLollipop() -> statusBar.setBackgroundColor( - ColorUtil.darkenColor( - color - ) - ) + VersionUtils.hasLollipop() -> statusBar.setBackgroundColor(ColorUtil.darkenColor(color)) else -> statusBar.setBackgroundColor(color) } } else { @@ -104,12 +100,13 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { else -> window.statusBarColor = ColorUtil.darkenColor(color) } } - setLightStatusbarAuto(color) + setLightStatusbarAuto(ATHUtil.resolveColor(this, android.R.attr.windowBackground)) } fun setStatusbarColorAuto() { // we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat //setStatusbarColor(ATHUtil.resolveColor(this, android.R.attr.windowBackground)) + setLightStatusbarAuto(ATHUtil.resolveColor(this, android.R.attr.windowBackground)) } open fun setTaskDescriptionColor(@ColorInt color: Int) { @@ -117,7 +114,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { } fun setTaskDescriptionColorAuto() { - setTaskDescriptionColor(ATHUtil.resolveColor(this, R.attr.colorPrimary)) + setTaskDescriptionColor(ATHUtil.resolveColor(this, android.R.attr.windowBackground)) } open fun setNavigationbarColor(color: Int) { @@ -129,11 +126,11 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { } open fun setNavigationBarColorPrimary() { - ATH.setNavigationbarColor(this, ATHUtil.resolveColor(this, R.attr.colorPrimary)) + ATH.setNavigationbarColor(this, ATHUtil.resolveColor(this, android.R.attr.windowBackground)) } fun setNavigationbarColorAuto() { - setNavigationbarColor(ATHUtil.resolveColor(this, R.attr.colorSecondary)) + setNavigationbarColor(ATHUtil.resolveColor(this, android.R.attr.windowBackground)) } open fun setLightStatusbar(enabled: Boolean) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index e9d177f2..e6b24f25 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -1,21 +1,32 @@ package code.name.monkey.retromusic.activities.bugreport -import android.app.* -import android.content.* +import android.app.Activity +import android.app.Dialog +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent import android.net.Uri import android.os.Bundle import android.text.TextUtils import android.view.MenuItem import android.view.inputmethod.EditorInfo import android.widget.Toast -import androidx.annotation.* +import androidx.annotation.StringDef +import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.appthemehelper.util.MaterialUtil +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.AbsThemeActivity -import code.name.monkey.retromusic.activities.bugreport.model.* -import code.name.monkey.retromusic.activities.bugreport.model.github.* +import code.name.monkey.retromusic.activities.bugreport.model.DeviceInfo +import code.name.monkey.retromusic.activities.bugreport.model.Report +import code.name.monkey.retromusic.activities.bugreport.model.github.ExtraInfo +import code.name.monkey.retromusic.activities.bugreport.model.github.GithubLogin +import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarget import code.name.monkey.retromusic.misc.DialogAsyncTask import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.callbacks.onCancel @@ -25,7 +36,8 @@ import kotlinx.android.synthetic.main.activity_bug_report.* import kotlinx.android.synthetic.main.bug_report_card_device_info.* import kotlinx.android.synthetic.main.bug_report_card_report.* import org.eclipse.egit.github.core.Issue -import org.eclipse.egit.github.core.client.* +import org.eclipse.egit.github.core.client.GitHubClient +import org.eclipse.egit.github.core.client.RequestException import org.eclipse.egit.github.core.service.IssueService import java.io.IOException @@ -52,7 +64,6 @@ open class BugReportActivity : AbsThemeActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_bug_report) - setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -67,7 +78,7 @@ open class BugReportActivity : AbsThemeActivity() { private fun initViews() { val accentColor = ThemeStore.accentColor(this) - val primaryColor = ATHUtil.resolveColor(this, R.attr.colorPrimary) + val primaryColor = ATHUtil.resolveColor(this, R.attr.colorSurface) toolbar.setBackgroundColor(primaryColor) setSupportActionBar(toolbar) ToolbarContentTintHelper.colorBackButton(toolbar) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt index ad5e767b..dc38bf15 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt @@ -48,44 +48,23 @@ class HomeAdapter( when (getItemViewType(position)) { RECENT_ALBUMS -> { val viewHolder = holder as AlbumViewHolder - viewHolder.bindView( - list[position].arrayList.toAlbums(), - R.string.recent_albums, - R.string.recent_added_albums - ) + viewHolder.bindView(list[position].arrayList.toAlbums(), R.string.recent_albums) } TOP_ALBUMS -> { val viewHolder = holder as AlbumViewHolder - viewHolder.bindView( - list[position].arrayList.toAlbums(), - R.string.top_albums, - R.string.most_played_albums - ) + viewHolder.bindView(list[position].arrayList.toAlbums(), R.string.top_albums) } RECENT_ARTISTS -> { val viewHolder = holder as ArtistViewHolder - viewHolder.bindView( - list[position].arrayList.toArtists(), - R.string.recent_artists, - R.string.recent_added_artists - ) + viewHolder.bindView(list[position].arrayList.toArtists(), R.string.recent_artists) } TOP_ARTISTS -> { val viewHolder = holder as ArtistViewHolder - - viewHolder.bindView( - list[position].arrayList.toArtists(), - R.string.top_artists, - R.string.most_played_artists - ) + viewHolder.bindView(list[position].arrayList.toArtists(), R.string.top_artists) } PLAYLISTS -> { val viewHolder = holder as PlaylistViewHolder - viewHolder.bindView( - list[position].arrayList.toPlaylist(), - R.string.favorites, - R.string.favorites_songs - ) + viewHolder.bindView(list[position].arrayList.toPlaylist(), R.string.favorites) } } } @@ -114,7 +93,7 @@ class HomeAdapter( } private inner class AlbumViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(list: ArrayList, titleRes: Int, subtitleRes: Int) { + fun bindView(list: ArrayList, titleRes: Int) { if (list.isNotEmpty()) { recyclerView.apply { show() @@ -126,7 +105,7 @@ class HomeAdapter( } inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(list: ArrayList, titleRes: Int, subtitleRes: Int) { + fun bindView(list: ArrayList, titleRes: Int) { if (list.isNotEmpty()) { recyclerView.apply { show() @@ -148,7 +127,7 @@ class HomeAdapter( } private inner class PlaylistViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(arrayList: ArrayList, titleRes: Int, subtitleRes: Int) { + fun bindView(arrayList: ArrayList, titleRes: Int) { if (arrayList.isNotEmpty()) { val songs = PlaylistSongsLoader.getPlaylistSongList(activity, arrayList[0]) if (songs.isNotEmpty()) { diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java b/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java index ed59c1d5..9a627edf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java @@ -93,7 +93,7 @@ public class MediaEntryViewHolder extends RecyclerView.ViewHolder implements Vie playSongs = itemView.findViewById(R.id.playSongs); if (imageContainerCard != null) { - imageContainerCard.setCardBackgroundColor(ATHUtil.INSTANCE.resolveColor(itemView.getContext(), R.attr.colorPrimary)); + imageContainerCard.setCardBackgroundColor(ATHUtil.INSTANCE.resolveColor(itemView.getContext(), R.attr.colorSurface)); } itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); 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 641e55e4..f448f3d6 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 @@ -1,222 +1,216 @@ package code.name.monkey.retromusic.adapter.playlist import android.graphics.drawable.Drawable -import android.view.* +import android.view.LayoutInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.PopupMenu import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* +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.* -import code.name.monkey.retromusic.dialogs.* -import code.name.monkey.retromusic.helper.menu.* +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 +import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.loaders.PlaylistSongsLoader -import code.name.monkey.retromusic.model.* -import code.name.monkey.retromusic.model.smartplaylist.* -import code.name.monkey.retromusic.util.* +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.model.smartplaylist.AbsSmartPlaylist +import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.NavigationUtil import java.util.* class PlaylistAdapter( - private val activity: AppCompatActivity, - var dataSet: ArrayList, - private var itemLayoutRes: Int, - cabHolder: CabHolder? + private val activity: AppCompatActivity, + var dataSet: ArrayList, + private var itemLayoutRes: Int, + cabHolder: CabHolder? ) : AbsMultiSelectAdapter( - activity, - cabHolder, - R.menu.menu_playlists_selection + activity, + cabHolder, + R.menu.menu_playlists_selection ) { - var songs = ArrayList() + var songs = ArrayList() - init { - setHasStableIds(true) - } + init { + setHasStableIds(true) + } - fun swapDataSet(dataSet: ArrayList) { - this.dataSet = dataSet - notifyDataSetChanged() - } + fun swapDataSet(dataSet: ArrayList) { + this.dataSet = dataSet + notifyDataSetChanged() + } - override fun getItemId(position: Int): Long { - return dataSet[position].id.toLong() - } + override fun getItemId(position: Int): Long { + return dataSet[position].id.toLong() + } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false) - return createViewHolder(view) - } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false) + return createViewHolder(view) + } - protected fun createViewHolder(view: View): ViewHolder { - return ViewHolder(view) - } + protected fun createViewHolder(view: View): ViewHolder { + return ViewHolder(view) + } - protected fun getPlaylistTitle(playlist: Playlist): String { - return playlist.name - } + protected fun getPlaylistTitle(playlist: Playlist): String { + return playlist.name + } - protected fun getPlaylistText(playlist: Playlist): String { - return MusicUtil.getPlaylistInfoString(activity, getSongs(playlist)) - } + protected fun getPlaylistText(playlist: Playlist): String { + return MusicUtil.getPlaylistInfoString(activity, getSongs(playlist)) + } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val playlist = dataSet[position] - holder.itemView.isActivated = isChecked(playlist) - holder.title?.text = getPlaylistTitle(playlist) - holder.text?.text = getPlaylistText(playlist) - holder.image?.setImageDrawable(getIconRes(playlist)) - } + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val playlist = dataSet[position] + holder.itemView.isActivated = isChecked(playlist) + holder.title?.text = getPlaylistTitle(playlist) + holder.text?.text = getPlaylistText(playlist) + holder.image?.setImageDrawable(getIconRes(playlist)) + } - private fun getIconRes(playlist: Playlist): Drawable { - if (playlist is AbsSmartPlaylist) { - return TintHelper.createTintedDrawable( - activity, - playlist.iconRes, - ATHUtil.resolveColor(activity, R.attr.iconColor) - )!! - } - return if (MusicUtil.isFavoritePlaylist( - activity, - playlist - )) TintHelper.createTintedDrawable( - activity, - R.drawable.ic_favorite_white_24dp, - ThemeStore.accentColor(activity) - )!! - else TintHelper.createTintedDrawable( - activity, - R.drawable.ic_playlist_play_white_24dp, - ATHUtil.resolveColor(activity, R.attr.iconColor) - )!! - } + private fun getIconRes(playlist: Playlist): Drawable { + return if (MusicUtil.isFavoritePlaylist(activity, playlist)) + TintHelper.createTintedDrawable(activity, R.drawable.ic_favorite_white_24dp, ThemeStore.accentColor(activity))!! + else TintHelper.createTintedDrawable(activity, R.drawable.ic_playlist_play_white_24dp, ATHUtil.resolveColor(activity, R.attr.colorControlNormal))!! + } - override fun getItemViewType(position: Int): Int { - return if (dataSet[position] is AbsSmartPlaylist) SMART_PLAYLIST else DEFAULT_PLAYLIST - } + override fun getItemViewType(position: Int): Int { + return if (dataSet[position] is AbsSmartPlaylist) SMART_PLAYLIST else DEFAULT_PLAYLIST + } - override fun getItemCount(): Int { - return dataSet.size - } + override fun getItemCount(): Int { + return dataSet.size + } - override fun getIdentifier(position: Int): Playlist? { - return dataSet[position] - } + override fun getIdentifier(position: Int): Playlist? { + return dataSet[position] + } - override fun getName(playlist: Playlist): String { - return playlist.name - } + override fun getName(playlist: Playlist): String { + return playlist.name + } - override fun onMultipleItemAction(menuItem: MenuItem, selection: ArrayList) { - when (menuItem.itemId) { - R.id.action_delete_playlist -> { - var i = 0 - while (i < selection.size) { - val playlist = selection[i] - if (playlist is AbsSmartPlaylist) { - ClearSmartPlaylistDialog.create(playlist).show( - activity.supportFragmentManager, "CLEAR_PLAYLIST_" + playlist.name - ) - selection.remove(playlist) - i-- - } - i++ - } - if (selection.size > 0) { - DeletePlaylistDialog.create(selection) - .show(activity.supportFragmentManager, "DELETE_PLAYLIST") - } - } - else -> SongsMenuHelper.handleMenuClick( - activity, - getSongList(selection), - menuItem.itemId - ) - } - } + override fun onMultipleItemAction(menuItem: MenuItem, selection: ArrayList) { + when (menuItem.itemId) { + R.id.action_delete_playlist -> { + var i = 0 + while (i < selection.size) { + val playlist = selection[i] + if (playlist is AbsSmartPlaylist) { + ClearSmartPlaylistDialog.create(playlist).show( + activity.supportFragmentManager, "CLEAR_PLAYLIST_" + playlist.name + ) + selection.remove(playlist) + i-- + } + i++ + } + if (selection.size > 0) { + DeletePlaylistDialog.create(selection) + .show(activity.supportFragmentManager, "DELETE_PLAYLIST") + } + } + else -> SongsMenuHelper.handleMenuClick( + activity, + getSongList(selection), + menuItem.itemId + ) + } + } - private fun getSongList(playlists: List): ArrayList { - val songs = ArrayList() - for (playlist in playlists) { - if (playlist is AbsCustomPlaylist) { - songs.addAll(playlist.getSongs(activity)) - } else { - songs.addAll(PlaylistSongsLoader.getPlaylistSongList(activity, playlist.id)) - } - } - return songs - } + private fun getSongList(playlists: List): ArrayList { + val songs = ArrayList() + for (playlist in playlists) { + if (playlist is AbsCustomPlaylist) { + songs.addAll(playlist.getSongs(activity)) + } else { + songs.addAll(PlaylistSongsLoader.getPlaylistSongList(activity, playlist.id)) + } + } + return songs + } - private fun getSongs(playlist: Playlist): ArrayList { - val songs = ArrayList() - if (playlist is AbsSmartPlaylist) { - songs.addAll(playlist.getSongs(activity)) - } else { - songs.addAll(PlaylistSongsLoader.getPlaylistSongList(activity, playlist.id)) - } - return songs - } + private fun getSongs(playlist: Playlist): ArrayList { + val songs = ArrayList() + if (playlist is AbsSmartPlaylist) { + songs.addAll(playlist.getSongs(activity)) + } else { + songs.addAll(PlaylistSongsLoader.getPlaylistSongList(activity, playlist.id)) + } + return songs + } - inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { - init { + inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { + init { - image?.apply { - val iconPadding = activity.resources.getDimensionPixelSize(R.dimen.list_item_image_icon_padding) - setPadding(iconPadding, iconPadding, iconPadding, iconPadding) - //setColorFilter(ATHUtil.resolveColor(activity, R.attr.iconColor), PorterDuff.Mode.SRC_IN) - } + image?.apply { + val iconPadding = activity.resources.getDimensionPixelSize(R.dimen.list_item_image_icon_padding) + setPadding(iconPadding, iconPadding, iconPadding, iconPadding) + //setColorFilter(ATHUtil.resolveColor(activity, R.attr.iconColor), PorterDuff.Mode.SRC_IN) + } - menu?.setOnClickListener { view -> - val playlist = dataSet[adapterPosition] - val popupMenu = PopupMenu(activity, view) - popupMenu.inflate( - if (itemViewType == SMART_PLAYLIST) R.menu.menu_item_smart_playlist - else R.menu.menu_item_playlist - ) - if (playlist is LastAddedPlaylist) { - popupMenu.menu.findItem(R.id.action_clear_playlist).isVisible = false - } - popupMenu.setOnMenuItemClickListener { item -> - if (item.itemId == R.id.action_clear_playlist) { - if (playlist is AbsSmartPlaylist) { - ClearSmartPlaylistDialog.create(playlist).show( - activity.supportFragmentManager, - "CLEAR_SMART_PLAYLIST_" + playlist.name - ) - return@setOnMenuItemClickListener true - } - } - PlaylistMenuHelper.handleMenuClick( - activity, dataSet[adapterPosition], item - ) - } - popupMenu.show() - } + menu?.setOnClickListener { view -> + val playlist = dataSet[adapterPosition] + val popupMenu = PopupMenu(activity, view) + popupMenu.inflate( + if (itemViewType == SMART_PLAYLIST) R.menu.menu_item_smart_playlist + else R.menu.menu_item_playlist + ) + if (playlist is LastAddedPlaylist) { + popupMenu.menu.findItem(R.id.action_clear_playlist).isVisible = false + } + popupMenu.setOnMenuItemClickListener { item -> + if (item.itemId == R.id.action_clear_playlist) { + if (playlist is AbsSmartPlaylist) { + ClearSmartPlaylistDialog.create(playlist).show( + activity.supportFragmentManager, + "CLEAR_SMART_PLAYLIST_" + playlist.name + ) + return@setOnMenuItemClickListener true + } + } + PlaylistMenuHelper.handleMenuClick( + activity, dataSet[adapterPosition], item + ) + } + popupMenu.show() + } - imageTextContainer?.apply { - cardElevation = 0f - setCardBackgroundColor(ATHUtil.resolveColor(activity, R.attr.colorPrimary)) - } - } + imageTextContainer?.apply { + cardElevation = 0f + setCardBackgroundColor(ATHUtil.resolveColor(activity, R.attr.colorSurface)) + } + } - override fun onClick(v: View?) { - if (isInQuickSelectMode) { - toggleChecked(adapterPosition) - } else { - val playlist = dataSet[adapterPosition] - NavigationUtil.goToPlaylistNew(activity, playlist) - } - } + override fun onClick(v: View?) { + if (isInQuickSelectMode) { + toggleChecked(adapterPosition) + } else { + val playlist = dataSet[adapterPosition] + NavigationUtil.goToPlaylistNew(activity, playlist) + } + } - override fun onLongClick(v: View?): Boolean { - toggleChecked(adapterPosition) - return true - } - } + override fun onLongClick(v: View?): Boolean { + toggleChecked(adapterPosition) + return true + } + } - companion object { - val TAG: String = PlaylistAdapter::class.java.simpleName - private const val SMART_PLAYLIST = 0 - private const val DEFAULT_PLAYLIST = 1 - } + companion object { + val TAG: String = PlaylistAdapter::class.java.simpleName + private const val SMART_PLAYLIST = 0 + private const val DEFAULT_PLAYLIST = 1 + } } 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 57f530c4..a128e17b 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,18 +1,14 @@ package code.name.monkey.retromusic.adapter.song import android.app.ActivityOptions -import android.content.res.ColorStateList import android.view.MenuItem import android.view.View import androidx.appcompat.app.AppCompatActivity -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.NavigationUtil -import code.name.monkey.retromusic.util.RetroColorUtil import com.google.android.material.button.MaterialButton import java.util.* @@ -33,30 +29,18 @@ open class PlaylistSongAdapter( } override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { - if (holder.itemViewType == OFFSET_ITEM) { - - val buttonColor = RetroColorUtil.toolbarColor(activity) - val textColor = MaterialValueHelper.getPrimaryTextColor(activity, ColorUtil.isColorLight(buttonColor)) val viewHolder = holder as ViewHolder - viewHolder.playAction?.let { - it.backgroundTintList = ColorStateList.valueOf(buttonColor) - it.setTextColor(textColor) - it.iconTint = ColorStateList.valueOf(textColor) it.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } } viewHolder.shuffleAction?.let { - it.backgroundTintList = ColorStateList.valueOf(buttonColor) - it.setTextColor(textColor) - it.iconTint = ColorStateList.valueOf(textColor) it.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(dataSet, true) } } - } else { super.onBindViewHolder(holder, position - 1) } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt index 5f81beef..bc1827c7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt @@ -14,6 +14,7 @@ package code.name.monkey.retromusic.extensions +import android.content.res.ColorStateList import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil @@ -25,7 +26,7 @@ fun AppCompatActivity.applyToolbar(toolbar: Toolbar) { setNavigationOnClickListener { onBackPressed() } setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp) ToolbarContentTintHelper.colorBackButton(toolbar) - setBackgroundColor(ATHUtil.resolveColor(this@applyToolbar, R.attr.colorPrimary)) + backgroundTintList = ColorStateList.valueOf(ATHUtil.resolveColor(this@applyToolbar, R.attr.colorSurface)) } setSupportActionBar(toolbar) -} \ No newline at end of file +} diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt index 51a9b9a2..4966d991 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt @@ -14,8 +14,16 @@ package code.name.monkey.retromusic.extensions +import android.content.Context +import android.graphics.Color +import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.retromusic.R fun Int.ripAlpha(): Int { return ColorUtil.stripAlpha(this) +} + +fun Any.surfaceColor(context: Context): Int { + return ATHUtil.resolveColor(context, R.attr.colorSurface, Color.WHITE) } \ No newline at end of file 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 e394f58b..cc5f9663 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 @@ -2,6 +2,7 @@ package code.name.monkey.retromusic.fragments.mainactivity; import android.app.Activity; import android.app.ActivityOptions; +import android.content.res.ColorStateList; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -140,7 +141,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde @SuppressWarnings("ConstantConditions") private void setupToolbar() { - toolbar.setBackgroundColor(RetroColorUtil.toolbarColor(getMainActivity())); + toolbar.setBackgroundTintList(ColorStateList.valueOf(ATHUtil.INSTANCE.resolveColor(requireContext(), R.attr.colorSurface))); toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(getMainActivity(), toolbarContainer, getString(R.string.transition_toolbar)); 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 aed2fa6b..aa3c13b8 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 @@ -72,15 +72,13 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - + setStatusBarColorAuto(view) toolbar = view.findViewById(R.id.toolbar) bannerImage?.setOnClickListener { val options = ActivityOptions.makeSceneTransitionAnimation(mainActivity, userImage, getString(R.string.transition_user_image)) NavigationUtil.goToUserInfo(requireActivity(), options) } - if (!PreferenceUtil.getInstance(requireContext()).isHomeBanner) - setStatusBarColorAuto(view) lastAdded.setOnClickListener { NavigationUtil.goToPlaylistNew(requireActivity(), LastAddedPlaylist(requireActivity())) @@ -127,7 +125,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private fun setupToolbar() { toolbar.apply { - setBackgroundColor(toolbarColor()) + setBackgroundColor(RetroColorUtil.toolbarColor(mainActivity)) setNavigationIcon(R.drawable.ic_menu_white_24dp) setOnClickListener { val options = ActivityOptions.makeSceneTransitionAnimation(mainActivity, toolbarContainer, getString(R.string.transition_toolbar)) 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 e794809f..f56142f9 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 @@ -63,7 +63,7 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setDivider(ColorDrawable(Color.TRANSPARENT)) - listView.setBackgroundColor(ATHUtil.resolveColor(requireContext(), R.attr.colorPrimary)) + listView.setBackgroundColor(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface)) listView.overScrollMode = View.OVER_SCROLL_NEVER listView.setPadding(0, 0, 0, 0) listView.setPaddingRelative(0, 0, 0, 0) 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 82d8e84f..dd2921df 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 @@ -63,7 +63,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { aboutSettings.setOnClickListener(this) buyProContainer.apply { - if (!App.isProVersion()) show() else hide() + if (App.isProVersion()) show() else hide() setOnClickListener { NavigationUtil.goToProVersion(requireContext()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt index 4093a592..ade77cff 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt @@ -30,8 +30,6 @@ class OtherSettingsFragment : AbsSettingsFragment() { } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - addPreferencesFromResource(R.xml.pref_blacklist) - addPreferencesFromResource(R.xml.pref_playlists) addPreferencesFromResource(R.xml.pref_advanced) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt index 499c0a69..7b1f01c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt @@ -36,7 +36,6 @@ class PersonalizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnS override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_ui) - addPreferencesFromResource(R.xml.pref_lockscreen) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Home.kt b/app/src/main/java/code/name/monkey/retromusic/model/Home.kt index 4a6d3ddf..4a625f29 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Home.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Home.kt @@ -20,7 +20,6 @@ import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.HomeSection class Home(val priority: Int, @StringRes val title: Int, - @StringRes val subTitle: Int, val arrayList: ArrayList<*>, @HomeSection val homeSection: Int, diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt b/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt index 4d61ab3a..cfea68ef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt @@ -144,7 +144,6 @@ class RepositoryImpl(private val context: Context) : Repository { } else { Success(Home(0, R.string.recent_artists, - R.string.recent_added_artists, artists, HomeAdapter.RECENT_ARTISTS, R.drawable.ic_artist_white_24dp)) @@ -162,7 +161,6 @@ class RepositoryImpl(private val context: Context) : Repository { } else { Success(Home(1, R.string.recent_albums, - R.string.recent_added_albums, albums, HomeAdapter.RECENT_ALBUMS, R.drawable.ic_album_white_24dp @@ -181,7 +179,6 @@ class RepositoryImpl(private val context: Context) : Repository { } else { Success(Home(3, R.string.top_albums, - R.string.most_played_albums, albums, HomeAdapter.TOP_ALBUMS, R.drawable.ic_album_white_24dp @@ -201,7 +198,6 @@ class RepositoryImpl(private val context: Context) : Repository { } else { Success(Home(2, R.string.top_artists, - R.string.most_played_artists, artists, HomeAdapter.TOP_ARTISTS, R.drawable.ic_artist_white_24dp @@ -220,7 +216,6 @@ class RepositoryImpl(private val context: Context) : Repository { } else { Success(Home(4, R.string.favorites, - R.string.favorites_songs, playlists, HomeAdapter.PLAYLISTS, R.drawable.ic_favorite_white_24dp diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java index 8c0f889e..0b278172 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java @@ -38,12 +38,13 @@ public class RetroColorUtil { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); - hsv[1] = ( hsv[1] / 1 * ratio ) + ( 0.2f * (1.0f - ratio) ); + hsv[1] = (hsv[1] / 1 * ratio) + (0.2f * (1.0f - ratio)); return Color.HSVToColor(hsv); } + public static int toolbarColor(@NonNull Context context) { - return ATHUtil.INSTANCE.resolveColor(context, R.attr.colorSurface); + return ATHUtil.INSTANCE.resolveColor(context, R.attr.colorButtonNormal); } @Nullable diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt index 6df82863..80eb8571 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt @@ -38,12 +38,14 @@ class BottomNavigationBarTinted @JvmOverloads constructor( labelVisibilityMode = PreferenceUtil.getInstance(context).tabTitleMode selectedItemId = PreferenceUtil.getInstance(context).lastPage - val iconColor = ATHUtil.resolveColor(context, R.attr.iconColor) + val iconColor = ATHUtil.resolveColor(context, android.R.attr.colorControlNormal) val accentColor = ThemeStore.accentColor(context) NavigationViewUtil.setItemIconColors(this, ColorUtil.withAlpha(iconColor, 0.5f), accentColor) NavigationViewUtil.setItemTextColors(this, ColorUtil.withAlpha(iconColor, 0.5f), accentColor) itemBackground = RippleDrawable(RippleUtils.convertToRippleDrawableColor(ColorStateList.valueOf(ThemeStore.accentColor(context).addAlpha())), ContextCompat.getDrawable(context, R.drawable.bottom_navigation_item_background), null) setOnApplyWindowInsetsListener(null) + //itemRippleColor = ColorStateList.valueOf(accentColor) + backgroundTintList = ColorStateList.valueOf(ATHUtil.resolveColor(context, android.R.attr.windowBackground)) } } 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 8663e3ba..40f3101a 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 @@ -53,7 +53,7 @@ class ColorIconsImageView : AppCompatImageView { if (ATHUtil.isWindowBackgroundDark(context) && PreferenceUtil.getInstance(context).desaturatedColor()) { val desaturatedColor = RetroColorUtil.desaturateColor(color, 0.4f) backgroundTintList = ColorStateList.valueOf(desaturatedColor) - imageTintList = ColorStateList.valueOf(ATHUtil.resolveColor(context, R.attr.colorPrimary)) + imageTintList = ColorStateList.valueOf(ATHUtil.resolveColor(context, R.attr.colorSurface)) } else { backgroundTintList = ColorStateList.valueOf(ColorUtil.adjustAlpha(color, 0.22f)) imageTintList = ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.75f)) diff --git a/app/src/main/res/drawable/bg_bottom_sheet_dialog_fragment.xml b/app/src/main/res/drawable/bg_bottom_sheet_dialog_fragment.xml deleted file mode 100644 index 8b46ad5a..00000000 --- a/app/src/main/res/drawable/bg_bottom_sheet_dialog_fragment.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_circular_top_corners.xml b/app/src/main/res/drawable/bg_circular_top_corners.xml deleted file mode 100644 index 3fe25d2f..00000000 --- a/app/src/main/res/drawable/bg_circular_top_corners.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_navigation_item_background.xml b/app/src/main/res/drawable/bottom_navigation_item_background.xml index 80249440..59e47c01 100644 --- a/app/src/main/res/drawable/bottom_navigation_item_background.xml +++ b/app/src/main/res/drawable/bottom_navigation_item_background.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_navigation_item_background_ripple.xml b/app/src/main/res/drawable/bottom_navigation_item_background_ripple.xml deleted file mode 100644 index 8aff4a1e..00000000 --- a/app/src/main/res/drawable/bottom_navigation_item_background_ripple.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/option_menu_background.xml b/app/src/main/res/drawable/option_menu_background.xml index b5f6a848..ebb61404 100644 --- a/app/src/main/res/drawable/option_menu_background.xml +++ b/app/src/main/res/drawable/option_menu_background.xml @@ -27,7 +27,7 @@ - + diff --git a/app/src/main/res/layout-land/activity_album.xml b/app/src/main/res/layout-land/activity_album.xml index a85f8113..758acaf3 100644 --- a/app/src/main/res/layout-land/activity_album.xml +++ b/app/src/main/res/layout-land/activity_album.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/colorSurface" android:orientation="vertical" tools:ignore="UnusedAttribute"> diff --git a/app/src/main/res/layout-land/activity_artist_details.xml b/app/src/main/res/layout-land/activity_artist_details.xml index 06f1198e..b29b3324 100644 --- a/app/src/main/res/layout-land/activity_artist_details.xml +++ b/app/src/main/res/layout-land/activity_artist_details.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/colorSurface" android:orientation="vertical" 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 4f1079be..7a7d2765 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -60,7 +60,7 @@ android:layout_height="24dp" android:layout_gravity="bottom" android:background="@drawable/shadow_up_full_theme" - android:backgroundTint="?colorPrimary" /> + android:backgroundTint="?android:attr/windowBackground" /> @@ -89,7 +89,6 @@ app:cardBackgroundColor="@android:color/transparent" app:cardCornerRadius="8dp" app:cardElevation="6dp" - app:cardUseCompatPadding="true" app:layout_collapseMode="pin" app:layout_scrollFlags="scroll|enterAlways"> @@ -116,16 +115,14 @@ android:layout_height="match_parent" android:layout_marginStart="@dimen/toolbar_margin_horizontal" android:layout_marginEnd="@dimen/toolbar_margin_horizontal" - android:elevation="@dimen/card_elevation" app:behavior_overlapTop="72dp" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> + app:cardCornerRadius="16dp" + app:cardElevation="8dp"> diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index ae798ed7..57d07d3a 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -36,8 +36,9 @@ android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?colorPrimary" - app:liftOnScroll="true"> + android:background="@android:color/transparent" + android:elevation="0dp" + app:elevation="0dp"> diff --git a/app/src/main/res/layout-xlarge-land/activity_artist_details.xml b/app/src/main/res/layout-xlarge-land/activity_artist_details.xml index c6aea634..d4d8f50c 100644 --- a/app/src/main/res/layout-xlarge-land/activity_artist_details.xml +++ b/app/src/main/res/layout-xlarge-land/activity_artist_details.xml @@ -35,9 +35,9 @@ app:layout_collapseMode="parallax" /> + android:layout_height="wrap_content" + app:layout_collapseMode="pin"> @@ -75,7 +76,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - + android:background="@android:color/transparent" + android:elevation="0dp" + app:elevation="0dp"> diff --git a/app/src/main/res/layout-xlarge/activity_artist_details.xml b/app/src/main/res/layout-xlarge/activity_artist_details.xml index b2668338..f73dbc09 100644 --- a/app/src/main/res/layout-xlarge/activity_artist_details.xml +++ b/app/src/main/res/layout-xlarge/activity_artist_details.xml @@ -68,6 +68,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" + android:background="?attr/colorSurface" app:cardElevation="8dp" app:shapeAppearanceOverlay="@style/TopCornerCardView"> diff --git a/app/src/main/res/layout-xlarge/activity_user_info.xml b/app/src/main/res/layout-xlarge/activity_user_info.xml index e93b032d..e47ac8b1 100644 --- a/app/src/main/res/layout-xlarge/activity_user_info.xml +++ b/app/src/main/res/layout-xlarge/activity_user_info.xml @@ -9,6 +9,7 @@ android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@android:color/transparent" android:elevation="0dp" app:elevation="0dp"> @@ -64,8 +65,8 @@ android:layout_gravity="center" android:background="?roundSelector" android:padding="16dp" - app:tint="@color/md_white_1000" - app:srcCompat="@drawable/ic_add_photo_white_24dp" /> + app:srcCompat="@drawable/ic_add_photo_white_24dp" + app:tint="@color/md_white_1000" /> + android:layout_height="match_parent"> + android:background="@android:color/transparent" + android:elevation="0dp" + app:elevation="0dp"> + android:background="@android:color/transparent" + android:elevation="0dp" + app:elevation="0dp"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> + tools:text="@tools:sample/lorem" /> @@ -117,7 +79,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v2" - tools:text="Hemanth savarala" /> + tools:text="@tools:sample/lorem" /> @@ -154,7 +116,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v3" - tools:text="Hemanth savarala" /> + tools:text="@tools:sample/lorem" /> @@ -191,7 +153,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v4" - tools:text="Hemanth savarala" /> + tools:text="@tools:sample/lorem" /> diff --git a/app/src/main/res/layout/activity_album.xml b/app/src/main/res/layout/activity_album.xml index 0b4f98c6..8c3b9bec 100755 --- a/app/src/main/res/layout/activity_album.xml +++ b/app/src/main/res/layout/activity_album.xml @@ -16,7 +16,8 @@ + android:layout_height="match_parent" + android:background="?attr/colorSurface"> diff --git a/app/src/main/res/layout/activity_artist_details.xml b/app/src/main/res/layout/activity_artist_details.xml index c39a18a8..84473a39 100755 --- a/app/src/main/res/layout/activity_artist_details.xml +++ b/app/src/main/res/layout/activity_artist_details.xml @@ -16,7 +16,8 @@ + android:layout_height="match_parent" + android:background="?attr/colorSurface"> - + android:layout_height="wrap_content" + android:clipToPadding="false" + android:orientation="vertical"> - + android:layout_marginBottom="8dp" /> - + - + - + - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_lyrics.xml b/app/src/main/res/layout/activity_lyrics.xml index 93dc8a75..7dd50c99 100644 --- a/app/src/main/res/layout/activity_lyrics.xml +++ b/app/src/main/res/layout/activity_lyrics.xml @@ -9,7 +9,10 @@ + android:layout_height="wrap_content" + android:background="@android:color/transparent" + android:elevation="0dp" + app:elevation="0dp"> @@ -20,9 +21,11 @@ @@ -49,6 +51,7 @@ android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" + android:clipToPadding="false" android:scrollbars="none" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> diff --git a/app/src/main/res/layout/activity_pro_version.xml b/app/src/main/res/layout/activity_pro_version.xml index ec3980fd..cbd6bc82 100644 --- a/app/src/main/res/layout/activity_pro_version.xml +++ b/app/src/main/res/layout/activity_pro_version.xml @@ -25,6 +25,7 @@ android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@android:color/transparent" android:elevation="0dp" app:elevation="0dp"> diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 107a9899..6c210a73 100755 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -5,13 +5,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" + android:background="?attr/colorSurface" android:orientation="vertical"> @@ -77,9 +78,9 @@ android:layout_height="wrap_content" android:background="?roundSelector" android:padding="12dp" + android:visibility="gone" app:srcCompat="@drawable/ic_close_white_24dp" app:tint="?colorOnSurface" - android:visibility="gone" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/activity_user_info.xml b/app/src/main/res/layout/activity_user_info.xml index cb82dd39..6c5ac19a 100644 --- a/app/src/main/res/layout/activity_user_info.xml +++ b/app/src/main/res/layout/activity_user_info.xml @@ -10,6 +10,7 @@ android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@android:color/transparent" app:liftOnScroll="true"> @@ -33,7 +32,7 @@ android:padding="16dp" android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" android:textColor="?android:textColorSecondary" - tools:text="@string/donate_summary" /> + tools:text="@tools:sample/lorem/random" /> diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index f3b66354..55fea68b 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -34,22 +34,6 @@ app:statusBarScrim="@color/md_black_1000" app:titleEnabled="false"> - - - - - - - - @@ -100,17 +57,112 @@ - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 5c1122f1..c1919b0f 100755 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -16,7 +16,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:background="?colorPrimary" android:layout_height="match_parent" android:orientation="vertical"> @@ -35,7 +34,7 @@ android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?colorPrimary" + android:background="@android:color/transparent" app:liftOnScroll="true"> + android:textAppearance="@style/TextViewBody1" + android:textColor="?android:attr/textColorPrimary" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_settings.xml b/app/src/main/res/layout/fragment_main_settings.xml index 6207e54c..d7599fbd 100644 --- a/app/src/main/res/layout/fragment_main_settings.xml +++ b/app/src/main/res/layout/fragment_main_settings.xml @@ -49,7 +49,6 @@ android:paddingEnd="16dp" android:text="@string/retro_music_pro" android:textAppearance="@style/TextViewSubtitle1" - android:textColor="?colorOnPrimary" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@id/diamondIcon" /> @@ -83,6 +82,7 @@ android:textAllCaps="false" android:textColor="?colorAccent" android:textStyle="bold" + app:backgroundTint="?attr/colorSurface" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -122,7 +122,6 @@ android:singleLine="true" android:text="@string/general_settings_title" android:textAppearance="@style/TextViewSubtitle1" - android:textColor="?colorOnPrimary" android:textStyle="bold" /> - - - Can\'t get SAF URI + Open navigation drawer Enable \'Show SD card\' in overflow menu @@ -538,12 +639,15 @@ Select your SD card in navigation drawer Do not open any sub-folders Tap \'select\' button at the bottom of the screen + File write failed: %s Save + Save as file + Save as files Saved playlist to %s. @@ -557,6 +661,7 @@ Search your library… Select all + Select banner photo Selected @@ -564,7 +669,9 @@ Send crash log Set + Set artist image + Set a profile photo Share app @@ -583,6 +690,7 @@ Social Song + Song duration Songs @@ -597,6 +705,7 @@ Descending Sorry! Your device doesn\'t support speech input + Search your library Stack @@ -624,29 +733,37 @@ The audio file This month + This week + This year Tiny Title + Dashboard + Good afternoon Good day Good evening Good morning Good night + What\'s Your Name Today Top albums + Top artists "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number Translate + Help us translate the app to your language Twitter @@ -679,19 +796,20 @@ What\'s New Window + Rounded corners Set %1$s as your ringtone. + %1$d selected Year You have to select at least one category. + You will be forwarded to the issue tracker website. Your account data is only used for authentication. - - More from %s - Adjust the bottom sheet dialog corners - Filter songs by length + Advanced + Blacklist diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3c7759d6..4deecbd4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -48,6 +48,7 @@ false 20sp 0.0125 + ?android:attr/textColorPrimary