From 4e10acf5c243e645c432c3794e6fa839471427b7 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 10:53:08 +0530 Subject: [PATCH 01/30] Fixed Blacklist preference "Clear All" crash --- .../preferences/BlacklistPreferenceDialog.kt | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt index b54ead19b..c871d9266 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt @@ -18,6 +18,7 @@ import android.app.Dialog import android.content.Context import android.os.Bundle import android.util.AttributeSet +import androidx.appcompat.app.AlertDialog import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.core.text.HtmlCompat @@ -26,6 +27,7 @@ import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreferenc import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.dialogs.BlacklistFolderChooserDialog +import code.name.monkey.retromusic.extensions.accentTextColor import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.colorControlNormal import code.name.monkey.retromusic.extensions.materialDialog @@ -69,11 +71,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog .setNeutralButton(R.string.clear_action) { _, _ -> materialDialog(R.string.clear_blacklist) .setMessage(R.string.do_you_want_to_clear_the_blacklist) - .setPositiveButton(R.string.clear_action) { _, _ -> - BlacklistStore.getInstance( - requireContext() - ).clear() - } + .setPositiveButton(R.string.clear_action, null) .setNegativeButton(android.R.string.cancel, null) .create() .colorButtons() @@ -107,7 +105,21 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog .colorButtons() .show() } - .create().colorButtons() + .create().apply { + setOnShowListener { + getButton(AlertDialog.BUTTON_POSITIVE).accentTextColor() + getButton(AlertDialog.BUTTON_NEGATIVE).accentTextColor() + getButton(AlertDialog.BUTTON_NEUTRAL).apply { + accentTextColor() + setOnClickListener { + BlacklistStore.getInstance( + requireContext() + ).clear() + dismiss() + } + } + } + } } private lateinit var paths: ArrayList From 50c04b6d978eb8fca5a09cb879aa954db7a63f86 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 13:37:02 +0530 Subject: [PATCH 02/30] Directly ask for permission from user to delete a file instead of showing a confirmation dialog and then asking for permission --- .../monkey/retromusic/dialogs/DeleteSongsDialog.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt index ddc586b9e..924a89b60 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt @@ -60,6 +60,11 @@ class DeleteSongsDialog : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { libraryViewModel = activity?.getViewModel() as LibraryViewModel val songs = extraNotNull>(EXTRA_SONG).value + if (VersionUtils.hasR()) { + dismiss() + MusicUtil.deleteTracksR(requireActivity(), songs) + reloadTabs() + } val pair = if (songs.size > 1) { Pair( R.string.delete_songs_title, @@ -90,11 +95,7 @@ class DeleteSongsDialog : DialogFragment() { if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) { MusicPlayerRemote.playNextSong() } - if (VersionUtils.hasR()) { - dismiss() - MusicUtil.deleteTracksR(requireActivity(), songs) - reloadTabs() - } else if (!SAFUtil.isSAFRequiredForSongs(songs)) { + if (!SAFUtil.isSAFRequiredForSongs(songs)) { CoroutineScope(Dispatchers.IO).launch { dismiss() MusicUtil.deleteTracks(requireContext(), songs) From 2dc332befddf4bd370dc2097c87cee74b4eb51f9 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 14:48:30 +0530 Subject: [PATCH 03/30] Fixed New Music Mix multiple clicks crash --- .../name/monkey/retromusic/adapter/HomeAdapter.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 85c3578ba..882922658 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 @@ -14,6 +14,8 @@ */ package code.name.monkey.retromusic.adapter +import android.os.Handler +import android.os.SystemClock import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -23,6 +25,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView import androidx.core.os.bundleOf import androidx.fragment.app.findFragment +import androidx.lifecycle.findViewTreeLifecycleOwner +import androidx.lifecycle.lifecycleScope import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.recyclerview.widget.GridLayoutManager @@ -45,12 +49,15 @@ import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.material.card.MaterialCardView +import kotlinx.coroutines.delay class HomeAdapter( private val activity: AppCompatActivity ) : RecyclerView.Adapter(), IArtistClickListener, IAlbumClickListener, IGenreClickListener { + private var mLastClickTime: Long = 0 + private var list = listOf() override fun getItemViewType(position: Int): Int { @@ -194,6 +201,10 @@ class HomeAdapter( itemView.findViewById(R.id.message).apply { setTextColor(color) setOnClickListener { + if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){ + return@setOnClickListener + } + mLastClickTime = SystemClock.elapsedRealtime(); MusicPlayerRemote.playNext((home.arrayList as List).subList(0, 8)) if (!MusicPlayerRemote.isPlaying) { MusicPlayerRemote.playNextSong() From ea750a682ccd0f17c81625fdb2d943944c1a5bf0 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 17:43:12 +0530 Subject: [PATCH 04/30] Fixed Album Artist sort order --- .../monkey/retromusic/repository/ArtistRepository.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt index 1fe4839d9..9ac1d67b6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.repository import android.provider.MediaStore.Audio.AudioColumns +import code.name.monkey.retromusic.ALBUM_ARTIST import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist @@ -110,7 +111,8 @@ class RealArtistRepository( songRepository.makeSongCursor( null, null, - getSongLoaderSortOrder() + "lower($ALBUM_ARTIST)" + + if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) "" else " DESC" ) ) return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) @@ -155,12 +157,6 @@ class RealArtistRepository( } else { Artist.empty } - }.apply { - if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) { - sortedBy { it.name.lowercase() } - } else { - sortedByDescending { it.name.lowercase() } - } } } From 49effb8b9e284b0ba5c1c7710a8f6b445fe26829 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 17:45:48 +0530 Subject: [PATCH 05/30] [UI] Added bottom padding to bottom navigation --- app/src/main/res/layout/sliding_music_panel_layout.xml | 2 +- app/src/main/res/values/dimens.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index c2562162f..edd9a1aaf 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -56,7 +56,7 @@ android:elevation="0dp" android:minHeight="@dimen/bottom_nav_height" app:itemHorizontalTranslationEnabled="false" - app:itemPaddingBottom="0dp" + app:itemPaddingBottom="8dp" app:itemPaddingTop="8dp" app:menu="@menu/bottom_navigation_main" tools:layout_height="wrap_content" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 59cbf6401..ac705d443 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -15,10 +15,10 @@ 56dp 64dp - 120dp - 128dp + 128dp + 136dp - 64dp + 72dp 96dp 96dp From 216d25e3f0e74ef27fcba7dc47f906edd4293fc8 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 19:01:39 +0530 Subject: [PATCH 06/30] [UI] Made Playlist Preview images rounded --- .../util/AutoGeneratedPlaylistBitmap.java | 2 +- .../retromusic/util/MergedImageUtils.kt | 22 +++++-------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java index aea4fa1d5..9df37933f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java @@ -40,7 +40,7 @@ public class AutoGeneratedPlaylistBitmap { List art = new ArrayList<>(); for (Long id : albumID) { Bitmap bitmap = getBitmapWithAlbumId(context, id); - if (bitmap != null) art.add(bitmap); + if (bitmap != null) art.add(BitmapEditor.getRoundedCornerBitmap(bitmap, 10)); if (art.size() == 9) break; } return MergedImageUtils.INSTANCE.joinImages(art); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt b/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt index e4864bc7e..59095d9ab 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt @@ -1,6 +1,9 @@ package code.name.monkey.retromusic.util -import android.graphics.* +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Matrix +import android.graphics.Paint import com.bumptech.glide.util.Util.assertBackgroundThread @@ -75,25 +78,12 @@ internal object MergedImageUtils { val bit = Bitmap.createScaledBitmap(bitmap, onePartSize, onePartSize, true) canvas.drawBitmap( bit, - (onePartSize * (i % parts)).toFloat(), - (onePartSize * (i / parts)).toFloat(), + (onePartSize * (i % parts)).toFloat() + (i % 3) * 50, + (onePartSize * (i / parts)).toFloat() + (i / 3) * 50, paint ) bit.recycle() } - - paint.color = Color.WHITE - paint.strokeWidth = 10f - - val oneThirdSize = (IMAGE_SIZE / 3).toFloat() - val twoThirdSize = (IMAGE_SIZE / 3 * 2).toFloat() - // vertical lines - canvas.drawLine(oneThirdSize, 0f, oneThirdSize, imageSize.toFloat(), paint) - canvas.drawLine(twoThirdSize, 0f, twoThirdSize, imageSize.toFloat(), paint) - // horizontal lines - canvas.drawLine(0f, oneThirdSize, imageSize.toFloat(), oneThirdSize, paint) - canvas.drawLine(0f, twoThirdSize, imageSize.toFloat(), twoThirdSize, paint) - return result } From c45fd8d5fd3203550a71e09e8bbb2b4f08c55bcd Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 19:36:29 +0530 Subject: [PATCH 07/30] [UI] Changed selection color on A12+ --- app/src/main/res/drawable-v31/rect_selector.xml | 2 +- appthemehelper/src/main/res/values-night-v31/colors.xml | 1 + appthemehelper/src/main/res/values-v31/colors.xml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/drawable-v31/rect_selector.xml b/app/src/main/res/drawable-v31/rect_selector.xml index 31422ac99..fc803025a 100644 --- a/app/src/main/res/drawable-v31/rect_selector.xml +++ b/app/src/main/res/drawable-v31/rect_selector.xml @@ -26,7 +26,7 @@ - + diff --git a/appthemehelper/src/main/res/values-night-v31/colors.xml b/appthemehelper/src/main/res/values-night-v31/colors.xml index 5820630e1..dd9633297 100644 --- a/appthemehelper/src/main/res/values-night-v31/colors.xml +++ b/appthemehelper/src/main/res/values-night-v31/colors.xml @@ -1,4 +1,5 @@ @android:color/system_accent1_200 + @android:color/system_accent1_800 \ No newline at end of file diff --git a/appthemehelper/src/main/res/values-v31/colors.xml b/appthemehelper/src/main/res/values-v31/colors.xml index 7afe8f64a..bd0a13625 100755 --- a/appthemehelper/src/main/res/values-v31/colors.xml +++ b/appthemehelper/src/main/res/values-v31/colors.xml @@ -1,4 +1,5 @@ @android:color/system_accent1_600 + @android:color/system_accent1_50 From c52d02ea106aede0dcc93ee0d0c807749ad156aa Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 26 Nov 2021 20:18:13 +0530 Subject: [PATCH 08/30] Added Version check for FLAG_IMMUTABLE --- .../retromusic/appwidgets/AppWidgetBig.kt | 7 ++++++- .../retromusic/appwidgets/AppWidgetCard.kt | 7 ++++++- .../retromusic/appwidgets/AppWidgetClassic.kt | 7 ++++++- .../retromusic/appwidgets/AppWidgetSmall.kt | 7 ++++++- .../retromusic/appwidgets/AppWidgetText.kt | 7 ++++++- .../retromusic/appwidgets/base/BaseAppWidget.kt | 7 ++++++- .../retromusic/dialogs/SleepTimerDialog.kt | 7 ++++++- .../notification/PlayingNotificationImpl.kt | 17 ++++++++++++++--- .../notification/PlayingNotificationOreo.kt | 10 ++++++++-- 9 files changed, 64 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index 68596c697..be426f5da 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -24,6 +24,7 @@ import android.text.TextUtils import android.view.View import android.widget.RemoteViews import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget @@ -208,7 +209,11 @@ class AppWidgetBig : BaseAppWidget() { // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP var pendingIntent = - PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getActivity( + context, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) views.setOnClickPendingIntent(R.id.clickable_area, pendingIntent) // Previous track diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index 30bcf124e..e693fc535 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -24,6 +24,7 @@ import android.text.TextUtils import android.view.View import android.widget.RemoteViews import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget @@ -231,7 +232,11 @@ class AppWidgetCard : BaseAppWidget() { // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP var pendingIntent = - PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getActivity( + context, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index 134938d20..bfe368ba7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -25,6 +25,7 @@ import android.text.TextUtils import android.view.View import android.widget.RemoteViews import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget @@ -221,7 +222,11 @@ class AppWidgetClassic : BaseAppWidget() { // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - var pendingIntent = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) + var pendingIntent = PendingIntent.getActivity( + context, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 4528abce0..089c38bfe 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -24,6 +24,7 @@ import android.text.TextUtils import android.view.View import android.widget.RemoteViews import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget @@ -207,7 +208,11 @@ class AppWidgetSmall : BaseAppWidget() { // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP var pendingIntent = - PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getActivity( + context, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index b4abebf21..6a81d6297 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -23,6 +23,7 @@ import android.text.TextUtils import android.view.View import android.widget.RemoteViews import androidx.core.content.ContextCompat +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity @@ -89,7 +90,11 @@ class AppWidgetText : BaseAppWidget() { // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - var pendingIntent = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) + var pendingIntent = PendingIntent.getActivity( + context, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt index 03a3187e8..897203f8e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt @@ -28,6 +28,7 @@ import android.os.Build import android.text.TextUtils import android.widget.RemoteViews import androidx.core.content.ContextCompat +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song @@ -99,7 +100,11 @@ abstract class BaseAppWidget : AppWidgetProvider() { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getService( + context, 0, intent, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt index 214bef24d..fc8b05f77 100755 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt @@ -29,6 +29,7 @@ import android.widget.SeekBar import android.widget.TextView import android.widget.Toast import androidx.fragment.app.DialogFragment +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.addAccentColor import code.name.monkey.retromusic.extensions.colorButtons @@ -138,7 +139,11 @@ class SleepTimerDialog : DialogFragment() { } private fun makeTimerPendingIntent(flag: Int): PendingIntent? { - return PendingIntent.getService(requireActivity(), 0, makeTimerIntent(), flag or PendingIntent.FLAG_IMMUTABLE) + return PendingIntent.getService( + requireActivity(), 0, makeTimerIntent(), flag or if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) } private fun makeTimerIntent(): Intent { diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index 511e36597..9f640206a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -25,6 +25,7 @@ import android.os.Build import androidx.core.app.NotificationCompat import androidx.core.text.HtmlCompat import androidx.media.app.NotificationCompat.MediaStyle +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.db.PlaylistEntity @@ -70,7 +71,11 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP val clickIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - PendingIntent.getActivity(service, 0, action, PendingIntent.FLAG_IMMUTABLE) + PendingIntent.getActivity( + service, 0, action, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) } else { PendingIntent.getActivity(service, 0, action, PendingIntent.FLAG_UPDATE_CURRENT) } @@ -82,7 +87,9 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { service, 0, intent, - PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 or PendingIntent.FLAG_UPDATE_CURRENT ) val bigNotificationImageSize = service.resources .getDimensionPixelSize(R.dimen.notification_big_image_size) @@ -199,6 +206,10 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { val serviceName = ComponentName(service, MusicService::class.java) val intent = Intent(action) intent.component = serviceName - return PendingIntent.getService(service, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) + return PendingIntent.getService( + service, 0, intent, + if (VersionUtils.hasMarshmallow()) PendingIntent.FLAG_IMMUTABLE + else 0 or PendingIntent.FLAG_UPDATE_CURRENT + ) } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index 201ec9637..ea7c8d9c2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -83,7 +83,9 @@ class PlayingNotificationOreo : PlayingNotification() { service, 0, action, - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + PendingIntent.FLAG_UPDATE_CURRENT or if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 ) val deleteIntent = buildPendingIntent(service, ACTION_QUIT, null) @@ -262,7 +264,11 @@ class PlayingNotificationOreo : PlayingNotification() { ): PendingIntent { val intent = Intent(action) intent.component = serviceName - return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) + return PendingIntent.getService( + context, 0, intent, if (VersionUtils.hasMarshmallow()) + PendingIntent.FLAG_IMMUTABLE + else 0 + ) } From d6bc78619b567aff3a5beaedb90389d8976f720d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 01:29:36 +0530 Subject: [PATCH 09/30] [Playlists] Added Grid size selection for Playlists --- .../code/name/monkey/retromusic/Constants.kt | 2 + .../adapter/playlist/PlaylistAdapter.kt | 11 ++- .../fragments/playlists/PlaylistsFragment.kt | 78 ++++++++++++++++--- .../util/AutoGeneratedPlaylistBitmap.java | 2 +- .../monkey/retromusic/util/PreferenceUtil.kt | 19 +++++ 5 files changed, 99 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 8b97ef47b..fdfb31e52 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -118,6 +118,8 @@ const val ALBUM_GRID_SIZE_LAND = "album_grid_size_land" const val SONG_GRID_SIZE_LAND = "song_grid_size_land" const val ARTIST_GRID_SIZE = "artist_grid_size" const val ARTIST_GRID_SIZE_LAND = "artist_grid_size_land" +const val PLAYLIST_GRID_SIZE = "playlist_grid_size" +const val PLAYLIST_GRID_SIZE_LAND = "playlist_grid_size_land" const val COLORED_APP_SHORTCUTS = "colored_app_shortcuts" const val AUDIO_DUCKING = "audio_ducking" const val LAST_ADDED_CUTOFF = "last_added_interval" 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 4fd2994b2..eecc61b3f 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 @@ -22,6 +22,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.core.view.ViewCompat +import androidx.core.view.setPadding import androidx.fragment.app.FragmentActivity import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter @@ -29,6 +30,7 @@ import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.toSongs +import code.name.monkey.retromusic.extensions.dipToPix import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.glide.GlideApp @@ -42,7 +44,7 @@ import code.name.monkey.retromusic.util.MusicUtil class PlaylistAdapter( override val activity: FragmentActivity, - private var dataSet: List, + var dataSet: List, private var itemLayoutRes: Int, ICabHolder: ICabHolder?, private val listener: IPlaylistClickListener @@ -94,7 +96,12 @@ class PlaylistAdapter( holder.menu?.show() } GlideApp.with(activity) - .load(PlaylistPreview(playlist)) + .load( + if (itemLayoutRes == R.layout.item_list) { + holder.image?.setPadding(activity.dipToPix(8F).toInt()) + R.drawable.ic_playlist_play + } else PlaylistPreview(playlist) + ) .playlistOptions() .into(holder.image!!) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt index e86f983bd..094c146bc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt @@ -25,12 +25,12 @@ import code.name.monkey.retromusic.EXTRA_PLAYLIST import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.playlist.PlaylistAdapter import code.name.monkey.retromusic.db.PlaylistWithSongs -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder import code.name.monkey.retromusic.interfaces.IPlaylistClickListener import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import com.google.android.gms.cast.framework.CastButtonFactory import com.google.android.material.transition.MaterialSharedAxis @@ -66,9 +66,10 @@ class PlaylistsFragment : } override fun createAdapter(): PlaylistAdapter { + val dataSet = if (adapter == null) mutableListOf() else adapter!!.dataSet return PlaylistAdapter( requireActivity(), - ArrayList(), + dataSet, itemLayoutRes(), null, this @@ -77,7 +78,11 @@ class PlaylistsFragment : override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) - menu.removeItem(R.id.action_grid_size) + val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size) + if (RetroUtil.isLandscape()) { + gridSizeItem.setTitle(R.string.action_grid_size_land) + } + setupGridSizeMenu(gridSizeItem.subMenu) menu.removeItem(R.id.action_layout_type) menu.add(0, R.id.action_add_to_playlist, 0, R.string.new_playlist_title) menu.add(0, R.id.action_import_playlist, 0, R.string.import_playlist) @@ -89,12 +94,46 @@ class PlaylistsFragment : } override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (handleGridSizeMenuItem(item)) { + return true + } if (handleSortOrderMenuItem(item)) { return true } return super.onOptionsItemSelected(item) } + private fun setupGridSizeMenu(gridSizeMenu: SubMenu) { + when (getGridSize()) { + 1 -> gridSizeMenu.findItem(R.id.action_grid_size_1).isChecked = true + 2 -> gridSizeMenu.findItem(R.id.action_grid_size_2).isChecked = true + 3 -> gridSizeMenu.findItem(R.id.action_grid_size_3).isChecked = true + 4 -> gridSizeMenu.findItem(R.id.action_grid_size_4).isChecked = true + 5 -> gridSizeMenu.findItem(R.id.action_grid_size_5).isChecked = true + 6 -> gridSizeMenu.findItem(R.id.action_grid_size_6).isChecked = true + 7 -> gridSizeMenu.findItem(R.id.action_grid_size_7).isChecked = true + 8 -> gridSizeMenu.findItem(R.id.action_grid_size_8).isChecked = true + } + val gridSize = if (RetroUtil.isLandscape()) 4 else 2 + if (gridSize < 8) { + gridSizeMenu.findItem(R.id.action_grid_size_8).isVisible = false + } + if (gridSize < 7) { + gridSizeMenu.findItem(R.id.action_grid_size_7).isVisible = false + } + if (gridSize < 6) { + gridSizeMenu.findItem(R.id.action_grid_size_6).isVisible = false + } + if (gridSize < 5) { + gridSizeMenu.findItem(R.id.action_grid_size_5).isVisible = false + } + if (gridSize < 4) { + gridSizeMenu.findItem(R.id.action_grid_size_4).isVisible = false + } + if (gridSize < 3) { + gridSizeMenu.findItem(R.id.action_grid_size_3).isVisible = false + } + } private fun setUpSortOrderMenu(subMenu: SubMenu) { val order: String? = getSortOrder() @@ -142,13 +181,32 @@ class PlaylistsFragment : return false } + private fun handleGridSizeMenuItem(item: MenuItem): Boolean { + val gridSize = when (item.itemId) { + R.id.action_grid_size_1 -> 1 + R.id.action_grid_size_2 -> 2 + R.id.action_grid_size_3 -> 3 + R.id.action_grid_size_4 -> 4 + R.id.action_grid_size_5 -> 5 + R.id.action_grid_size_6 -> 6 + R.id.action_grid_size_7 -> 7 + R.id.action_grid_size_8 -> 8 + else -> 0 + } + if (gridSize > 0) { + item.isChecked = true + setAndSaveGridSize(gridSize) + return true + } + return false + } + private fun createId(menu: SubMenu, id: Int, title: Int, checked: Boolean) { menu.add(0, id, 0, title).isChecked = checked } - override fun setGridSize(gridSize: Int) { - TODO("Not yet implemented") + adapter?.notifyDataSetChanged() } override fun setSortOrder(sortOrder: String) { @@ -164,23 +222,23 @@ class PlaylistsFragment : } override fun loadGridSize(): Int { - return 2 + return PreferenceUtil.playlistGridSize } override fun saveGridSize(gridColumns: Int) { - //Add grid save + PreferenceUtil.playlistGridSize = gridColumns } override fun loadGridSizeLand(): Int { - return 4 + return PreferenceUtil.playlistGridSizeLand } override fun saveGridSizeLand(gridColumns: Int) { - //Add land grid save + PreferenceUtil.playlistGridSizeLand = gridColumns } override fun loadLayoutRes(): Int { - return R.layout.item_card + return R.layout.item_grid } override fun saveLayoutRes(layoutRes: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java index 9df37933f..d6243d467 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java @@ -40,7 +40,7 @@ public class AutoGeneratedPlaylistBitmap { List art = new ArrayList<>(); for (Long id : albumID) { Bitmap bitmap = getBitmapWithAlbumId(context, id); - if (bitmap != null) art.add(BitmapEditor.getRoundedCornerBitmap(bitmap, 10)); + if (bitmap != null) art.add(BitmapEditor.getRoundedCornerBitmap(bitmap, 20)); if (art.size() == 9) break; } return MergedImageUtils.INSTANCE.joinImages(art); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index 35dd5c411..eb43004aa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -498,6 +498,25 @@ object PreferenceUtil { } + var playlistGridSize + get() = sharedPreferences.getInt( + PLAYLIST_GRID_SIZE, + App.getContext().getIntRes(R.integer.default_grid_columns) + ) + set(value) = sharedPreferences.edit { + putInt(PLAYLIST_GRID_SIZE, value) + } + + + var playlistGridSizeLand + get() = sharedPreferences.getInt( + PLAYLIST_GRID_SIZE_LAND, + App.getContext().getIntRes(R.integer.default_grid_columns_land) + ) + set(value) = sharedPreferences.edit { + putInt(PLAYLIST_GRID_SIZE, value) + } + var albumCoverStyle: AlbumCoverStyle get() { val id: Int = sharedPreferences.getInt(ALBUM_COVER_STYLE, 0) From 1fdd537253a3423186bf2602c252abe8dd1b0173 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 14:05:31 +0530 Subject: [PATCH 10/30] [Backup] Code Cleanup --- .../monkey/retromusic/helper/BackupHelper.kt | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt index e72dd9f15..034e367d7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -23,28 +23,32 @@ object BackupHelper { zipItems.addAll(getDatabaseZipItems(context)) zipItems.addAll(getSettingsZipItems(context)) getUserImageZipItems(context)?.let { zipItems.addAll(it) } - withContext(Dispatchers.IO) { - zipAll(zipItems, backupFile) - } + zipAll(zipItems, backupFile) } private suspend fun zipAll(zipItems: List, backupFile: File) { - try { - ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out -> - for (zipItem in zipItems) { - FileInputStream(zipItem.filePath).use { fi -> - BufferedInputStream(fi).use { origin -> - val entry = ZipEntry(zipItem.zipPath) - out.putNextEntry(entry) - origin.copyTo(out) + withContext(Dispatchers.IO) { + kotlin.runCatching { + ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out -> + for (zipItem in zipItems) { + FileInputStream(zipItem.filePath).use { fi -> + BufferedInputStream(fi).use { origin -> + val entry = ZipEntry(zipItem.zipPath) + out.putNextEntry(entry) + origin.copyTo(out) + } } } } + }.onFailure { + it.printStackTrace() + withContext(Dispatchers.Main) { + Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT) + .show() + } } - } catch (exception: FileNotFoundException) { - exception.printStackTrace() withContext(Dispatchers.Main) { - Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT) + Toast.makeText(App.getContext(), "Backup created successfully", Toast.LENGTH_SHORT) .show() } } From fa976b1cba677b4b5eb90807b774d55f6404418e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 14:06:49 +0530 Subject: [PATCH 11/30] [Cleanup] Fixing Warnings --- app/build.gradle | 2 +- .../activities/base/AbsBaseActivity.kt | 4 +- .../monkey/retromusic/adapter/HomeAdapter.kt | 6 +- .../adapter/album/AlbumCoverPagerAdapter.kt | 5 +- .../adapter/song/PlayingQueueAdapter.kt | 2 +- .../shortcuttype/LastAddedShortcutType.kt | 2 +- .../shortcuttype/TopTracksShortcutType.kt | 2 +- .../retromusic/appwidgets/AppWidgetBig.kt | 16 +- .../retromusic/appwidgets/AppWidgetCard.kt | 12 +- .../retromusic/appwidgets/AppWidgetClassic.kt | 6 +- .../retromusic/appwidgets/AppWidgetSmall.kt | 12 +- .../retromusic/appwidgets/AppWidgetText.kt | 13 +- .../name/monkey/retromusic/cast/CastHelper.kt | 3 +- .../cast/ExpandedControlsActivity.kt | 2 +- .../monkey/retromusic/cast/RetroWebServer.kt | 2 +- .../retromusic/dialogs/DeleteSongsDialog.kt | 2 +- .../extensions/PaletteExtensions.kt | 2 +- .../retromusic/fragments/LibraryViewModel.kt | 4 +- .../fragments/albums/AlbumDetailsFragment.kt | 9 +- .../fragments/backup/BackupFragment.kt | 2 +- .../fragments/folder/FoldersFragment.kt | 8 +- .../fragments/other/MiniPlayerFragment.kt | 40 +++-- .../player/PlayerAlbumCoverFragment.kt | 4 +- .../player/circle/CirclePlayerFragment.kt | 4 +- .../player/classic/ClassicPlayerFragment.kt | 2 +- .../full/FullPlaybackControlsFragment.kt | 6 +- .../player/gradient/GradientPlayerFragment.kt | 2 +- .../monkey/retromusic/helper/M3UWriter.kt | 2 +- .../helper/MusicProgressViewUpdateHelper.kt | 3 +- .../monkey/retromusic/helper/SortOrder.kt | 2 +- .../monkey/retromusic/helper/StackBlur.java | 8 +- .../monkey/retromusic/lyrics/LrcHelper.java | 138 ------------------ .../misc/CustomFragmentStatePagerAdapter.java | 8 +- .../AlbumCoverStylePreferenceDialog.kt | 2 +- .../NowPlayingScreenPreferenceDialog.kt | 2 +- .../retromusic/providers/HistoryStore.java | 29 ++-- .../providers/SongPlayCountStore.java | 5 +- .../repository/TopPlayedRepository.kt | 2 +- .../retromusic/service/MusicService.java | 3 +- .../service/ThrottledSeekHandler.kt | 2 +- .../notification/PlayingNotificationImpl.kt | 2 +- .../notification/PlayingNotificationOreo.kt | 12 +- .../transform/DepthTransformation.kt | 38 +++-- .../transform/HorizontalFlipTransformation.kt | 5 +- .../transform/NormalPageTransformer.kt | 8 +- .../transform/VerticalFlipTransformation.kt | 5 +- .../name/monkey/retromusic/util/MusicUtil.kt | 4 +- .../monkey/retromusic/util/NavigationUtil.kt | 17 --- .../retromusic/util/PackageValidator.kt | 6 +- .../monkey/retromusic/util/PlaylistsUtil.java | 1 - .../retromusic/util/RetroColorUtil.java | 2 +- .../monkey/retromusic/util/RetroUtil.java | 11 +- .../color/MediaNotificationProcessor.java | 6 - .../util/color/NotificationColorUtil.java | 6 +- .../name/monkey/retromusic/views/SeekArc.java | 31 ++-- .../views/insets/InsetsConstraintLayout.kt | 5 - .../res/layout/fragment_artist_details.xml | 3 +- .../res/layout/fragment_main_settings.xml | 3 +- app/src/main/res/values/font_certs.xml | 2 - .../code/name/monkey/appthemehelper/ATH.kt | 2 +- .../name/monkey/appthemehelper/ATHActivity.kt | 2 +- .../dialogs/ATEPreferenceDialogFragment.java | 4 +- .../monkey/appthemehelper/util/ColorUtil.kt | 23 +-- .../appthemehelper/util/TintHelper.java | 75 ++-------- .../util/ToolbarContentTintHelper.java | 81 ++++------ .../layout/ate_preference_switch_support.xml | 2 +- .../src/main/res/values-night-v31/colors.xml | 2 +- appthemehelper/src/main/res/values/ids.xml | 2 - 68 files changed, 242 insertions(+), 498 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java delete mode 100644 app/src/main/res/values/font_certs.xml delete mode 100644 appthemehelper/src/main/res/values/ids.xml diff --git a/app/build.gradle b/app/build.gradle index 5f306e7b7..e4379ad63 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -126,7 +126,7 @@ dependencies { def retrofit_version = '2.9.0' implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" - implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2' + implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.3' def material_dialog_version = "3.3.0" implementation "com.afollestad.material-dialogs:core:$material_dialog_version" diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt index 3b929728b..2106fcaec 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt @@ -132,7 +132,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() { permissionDeniedMessage!!, Snackbar.LENGTH_INDEFINITE ) - .setAction(code.name.monkey.retromusic.R.string.action_grant) { requestPermissions() } + .setAction(R.string.action_grant) { requestPermissions() } .setActionTextColor(ThemeStore.accentColor(this)).show() } else { // User has deny permission and checked never show permission dialog so you can redirect to Application settings page @@ -140,7 +140,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() { snackBarContainer, permissionDeniedMessage!!, Snackbar.LENGTH_INDEFINITE - ).setAction(code.name.monkey.retromusic.R.string.action_settings) { + ).setAction(R.string.action_settings) { val intent = Intent() intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS val uri = Uri.fromParts( 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 882922658..3e84aee43 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 @@ -14,7 +14,6 @@ */ package code.name.monkey.retromusic.adapter -import android.os.Handler import android.os.SystemClock import android.view.LayoutInflater import android.view.View @@ -25,8 +24,6 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView import androidx.core.os.bundleOf import androidx.fragment.app.findFragment -import androidx.lifecycle.findViewTreeLifecycleOwner -import androidx.lifecycle.lifecycleScope import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.recyclerview.widget.GridLayoutManager @@ -49,7 +46,6 @@ import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.material.card.MaterialCardView -import kotlinx.coroutines.delay class HomeAdapter( private val activity: AppCompatActivity @@ -204,7 +200,7 @@ class HomeAdapter( if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){ return@setOnClickListener } - mLastClickTime = SystemClock.elapsedRealtime(); + mLastClickTime = SystemClock.elapsedRealtime() MusicPlayerRemote.playNext((home.arrayList as List).subList(0, 8)) if (!MusicPlayerRemote.isPlaying) { MusicPlayerRemote.playNextSong() diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt index e7849a0b6..b1f380546 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt @@ -27,13 +27,13 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.fragments.AlbumCoverStyle import code.name.monkey.retromusic.fragments.NowPlayingScreen.* +import code.name.monkey.retromusic.fragments.base.goToLyrics import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED @@ -127,7 +127,8 @@ class AlbumCoverPagerAdapter( setTitle(song.title) setMessage(if (data.isNullOrEmpty()) "No lyrics found" else data) setNegativeButton(R.string.synced_lyrics) { _, _ -> - NavigationUtil.goToLyrics(requireActivity()) + + goToLyrics(requireActivity()) } show() } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt index 506eb1c10..6495e6742 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt @@ -188,7 +188,7 @@ class PlayingQueueAdapter( private const val UP_NEXT = 2 } - override fun onSwipeItem(holder: ViewHolder, position: Int, result: Int): SwipeResultAction? { + override fun onSwipeItem(holder: ViewHolder, position: Int, result: Int): SwipeResultAction { return if (result == SwipeableItemConstants.RESULT_CANCELED) { SwipeResultActionDefault() } else { diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt index 4855f22ed..d0976042c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt @@ -42,6 +42,6 @@ class LastAddedShortcutType(context: Context) : BaseShortcutType(context) { companion object { val id: String - get() = BaseShortcutType.ID_PREFIX + "last_added" + get() = ID_PREFIX + "last_added" } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt index ab814f4af..e5f911d8c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt @@ -40,6 +40,6 @@ class TopTracksShortcutType(context: Context) : BaseShortcutType(context) { companion object { val id: String - get() = BaseShortcutType.ID_PREFIX + "top_tracks" + get() = ID_PREFIX + "top_tracks" } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index be426f5da..8cf54daa4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -62,7 +62,7 @@ class AppWidgetBig : BaseAppWidget() { context, R.drawable.ic_skip_next, MaterialValueHelper.getPrimaryTextColor(context, false) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -71,16 +71,16 @@ class AppWidgetBig : BaseAppWidget() { context, R.drawable.ic_skip_previous, MaterialValueHelper.getPrimaryTextColor(context, false) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, BaseAppWidget.createBitmap( + R.id.button_toggle_play_pause, createBitmap( RetroUtil.getTintedVectorDrawable( context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getPrimaryTextColor(context, false) - )!!, 1f + ), 1f ) ) @@ -127,7 +127,7 @@ class AppWidgetBig : BaseAppWidget() { service, playPauseRes, primaryColor - )!!, 1f + ), 1f ) ) @@ -138,7 +138,7 @@ class AppWidgetBig : BaseAppWidget() { service, R.drawable.ic_skip_next, primaryColor - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -147,7 +147,7 @@ class AppWidgetBig : BaseAppWidget() { service, R.drawable.ic_skip_previous, primaryColor - )!!, 1f + ), 1f ) ) @@ -156,7 +156,7 @@ class AppWidgetBig : BaseAppWidget() { // Load the album cover async and push the update on completion val p = RetroUtil.getScreenSize(service) - val widgetImageSize = Math.min(p.x, p.y) + val widgetImageSize = p.x.coerceAtMost(p.y) val appContext = service.applicationContext service.runOnUiThread { if (target != null) { diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index e693fc535..b1ba48000 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -60,7 +60,7 @@ class AppWidgetCard : BaseAppWidget() { context, R.drawable.ic_skip_next, secondaryColor - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -69,7 +69,7 @@ class AppWidgetCard : BaseAppWidget() { context, R.drawable.ic_skip_previous, secondaryColor - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -78,7 +78,7 @@ class AppWidgetCard : BaseAppWidget() { context, R.drawable.ic_play_arrow_white_32dp, secondaryColor - )!!, 1f + ), 1f ) ) @@ -113,7 +113,7 @@ class AppWidgetCard : BaseAppWidget() { service, playPauseRes, MaterialValueHelper.getSecondaryTextColor(service, true) - )!!, 1f + ), 1f ) ) @@ -124,7 +124,7 @@ class AppWidgetCard : BaseAppWidget() { service, R.drawable.ic_skip_next, MaterialValueHelper.getSecondaryTextColor(service, true) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -133,7 +133,7 @@ class AppWidgetCard : BaseAppWidget() { service, R.drawable.ic_skip_previous, MaterialValueHelper.getSecondaryTextColor(service, true) - )!!, 1f + ), 1f ) ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index bfe368ba7..b0740a3af 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -61,7 +61,7 @@ class AppWidgetClassic : BaseAppWidget() { context, R.drawable.ic_skip_next, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -71,7 +71,7 @@ class AppWidgetClassic : BaseAppWidget() { context, R.drawable.ic_skip_previous, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -81,7 +81,7 @@ class AppWidgetClassic : BaseAppWidget() { context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 089c38bfe..073691eff 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -59,7 +59,7 @@ class AppWidgetSmall : BaseAppWidget() { context, R.drawable.ic_skip_next, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -69,7 +69,7 @@ class AppWidgetSmall : BaseAppWidget() { context, R.drawable.ic_skip_previous, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -79,7 +79,7 @@ class AppWidgetSmall : BaseAppWidget() { context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getSecondaryTextColor(context, true) - )!!, 1f + ), 1f ) ) @@ -161,7 +161,7 @@ class AppWidgetSmall : BaseAppWidget() { R.id.button_toggle_play_pause, createBitmap( RetroUtil.getTintedVectorDrawable( service, playPauseRes, color - )!!, 1f + ), 1f ) ) @@ -170,14 +170,14 @@ class AppWidgetSmall : BaseAppWidget() { R.id.button_next, createBitmap( RetroUtil.getTintedVectorDrawable( service, R.drawable.ic_skip_next, color - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( R.id.button_prev, createBitmap( RetroUtil.getTintedVectorDrawable( service, R.drawable.ic_skip_previous, color - )!!, 1f + ), 1f ) ) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index 6a81d6297..248e53ea9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -18,7 +18,6 @@ import android.app.PendingIntent import android.content.ComponentName import android.content.Context import android.content.Intent -import android.provider.MediaStore import android.text.TextUtils import android.view.View import android.widget.RemoteViews @@ -43,7 +42,7 @@ class AppWidgetText : BaseAppWidget() { context, R.drawable.ic_skip_next, ContextCompat.getColor( context, R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -52,7 +51,7 @@ class AppWidgetText : BaseAppWidget() { context, R.drawable.ic_skip_previous, ContextCompat.getColor( context, R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -61,7 +60,7 @@ class AppWidgetText : BaseAppWidget() { context, R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor( context, R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) @@ -137,7 +136,7 @@ class AppWidgetText : BaseAppWidget() { App.getContext(), playPauseRes, ContextCompat.getColor( App.getContext(), R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -148,7 +147,7 @@ class AppWidgetText : BaseAppWidget() { ContextCompat.getColor( App.getContext(), R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) appWidgetView.setImageViewBitmap( @@ -159,7 +158,7 @@ class AppWidgetText : BaseAppWidget() { ContextCompat.getColor( App.getContext(), R.color.md_white_1000 ) - )!!, 1f + ), 1f ) ) diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt index 2c747a327..426fdcb9a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt @@ -11,6 +11,7 @@ import com.google.android.gms.cast.MediaInfo.STREAM_TYPE_BUFFERED import com.google.android.gms.cast.MediaMetadata.* import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.common.images.WebImage +import org.json.JSONObject import java.net.MalformedURLException import java.net.URL @@ -41,7 +42,7 @@ object CastHelper { position, MediaStatus.REPEAT_MODE_REPEAT_OFF, progress, - null + JSONObject() ) } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt index 1525bdd13..a9c7b393a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt @@ -13,7 +13,7 @@ class ExpandedControlsActivity : ExpandedControllerActivity() { override fun onCreateOptionsMenu(menu: Menu?): Boolean { super.onCreateOptionsMenu(menu) menuInflater.inflate(R.menu.menu_cast, menu) - CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.action_cast) + CastButtonFactory.setUpMediaRouteButton(this, menu!!, R.id.action_cast) return true } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt index e460f48b1..faee38b2e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -17,7 +17,7 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { const val PART_COVER_ART = "coverart" const val PART_SONG = "song" const val PARAM_ID = "id" - var mRetroWebServer: RetroWebServer? = null + private var mRetroWebServer: RetroWebServer? = null fun getInstance(context: Context): RetroWebServer { if (mRetroWebServer == null) { mRetroWebServer = RetroWebServer(context) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt index 924a89b60..3cc867b7c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt @@ -139,7 +139,7 @@ class DeleteSongsDialog : DialogFragment() { } } - fun reloadTabs() { + private fun reloadTabs() { libraryViewModel.forceReload(ReloadType.Songs) libraryViewModel.forceReload(ReloadType.HomeSections) libraryViewModel.forceReload(ReloadType.Artists) diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/PaletteExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/PaletteExtensions.kt index 58a631953..dae607bf4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/PaletteExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/PaletteExtensions.kt @@ -78,7 +78,7 @@ fun isBlack(fArr: FloatArray): Boolean { fun isNearRedLine(fArr: FloatArray): Boolean { val f = fArr[0] - return f >= 10.0f && f <= 37.0f && fArr[1] <= 0.82f + return f in 10.0f..37.0f && fArr[1] <= 0.82f } fun isDark(@ColorInt i: Int): Boolean { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index a021fe70c..d5787a4c3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -43,7 +43,7 @@ class LibraryViewModel( private val legacyPlaylists = MutableLiveData>() private val genres = MutableLiveData>() private val searchResults = MutableLiveData>() - private val fabMargin = MutableLiveData(0) + private val fabMargin = MutableLiveData(0) val paletteColor: LiveData = _paletteColor init { @@ -227,7 +227,7 @@ class LibraryViewModel( repository.deleteRoomPlaylist(playlists) } - suspend fun albumById(id: Long) = repository.albumById(id) + fun albumById(id: Long) = repository.albumById(id) suspend fun artistById(id: Long) = repository.artistById(id) suspend fun favoritePlaylist() = repository.favoritePlaylist() suspend fun isFavoriteSong(song: SongEntity) = repository.isFavoriteSong(song) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt index 5075ca1a6..04a6a2669 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt @@ -405,9 +405,8 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det binding.albumCoverContainer, "${getString(R.string.transition_album_art)}_${album.id}" ) - startActivityForResult( - intent, - TAG_EDITOR_REQUEST, options.toBundle() + startActivity( + intent, options.toBundle() ) return true } @@ -499,8 +498,4 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det super.onDestroyView() _binding = null } - - companion object { - const val TAG_EDITOR_REQUEST = 9002 - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt index 11e8a7f00..d2e3e7730 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt @@ -70,7 +70,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC } private fun checkIsEmpty() { - val isEmpty = backupAdapter!!.itemCount == 0 + val isEmpty = backupAdapter?.itemCount == 0 binding.backupTitle.isVisible = !isEmpty binding.backupRecyclerview.isVisible = !isEmpty } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index ed8bab548..8eca0382c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -41,7 +41,6 @@ import code.name.monkey.retromusic.adapter.StorageAdapter import code.name.monkey.retromusic.adapter.StorageClickListener import code.name.monkey.retromusic.databinding.FragmentFolderBinding import code.name.monkey.retromusic.extensions.drawNextToNavbar -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.folder.FoldersFragment.ListPathsAsyncTask.OnPathsListedCallback @@ -725,9 +724,10 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } - abstract class ListingFilesDialogAsyncTask : - DialogAsyncTask { - internal constructor(context: Context?) : super(context) + abstract class ListingFilesDialogAsyncTask internal constructor( + context: Context? + ) : + DialogAsyncTask(context) { override fun createDialog(context: Context): Dialog { return MaterialAlertDialogBuilder(context) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt index 8b5295e56..3af154040 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt @@ -162,30 +162,26 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p class FlingPlayBackController(context: Context) : View.OnTouchListener { - private var flingPlayBackController: GestureDetector - - init { - flingPlayBackController = GestureDetector(context, - object : GestureDetector.SimpleOnGestureListener() { - override fun onFling( - e1: MotionEvent, - e2: MotionEvent, - velocityX: Float, - velocityY: Float - ): Boolean { - if (abs(velocityX) > abs(velocityY)) { - if (velocityX < 0) { - MusicPlayerRemote.playNextSong() - return true - } else if (velocityX > 0) { - MusicPlayerRemote.playPreviousSong() - return true - } + private var flingPlayBackController = GestureDetector(context, + object : GestureDetector.SimpleOnGestureListener() { + override fun onFling( + e1: MotionEvent, + e2: MotionEvent, + velocityX: Float, + velocityY: Float + ): Boolean { + if (abs(velocityX) > abs(velocityY)) { + if (velocityX < 0) { + MusicPlayerRemote.playNextSong() + return true + } else if (velocityX > 0) { + MusicPlayerRemote.playPreviousSong() + return true } - return false } - }) - } + return false + } + }) @SuppressLint("ClickableViewAccessibility") override fun onTouch(v: View, event: MotionEvent): Boolean { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index 876f16880..bce83d767 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -32,6 +32,7 @@ import code.name.monkey.retromusic.databinding.FragmentPlayerAlbumCoverBinding import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToLyrics import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.model.lyrics.AbsSynchronizedLyrics @@ -39,7 +40,6 @@ import code.name.monkey.retromusic.model.lyrics.Lyrics import code.name.monkey.retromusic.transform.CarousalPagerTransformer import code.name.monkey.retromusic.transform.ParallaxPagerTransformer import code.name.monkey.retromusic.util.LyricUtil -import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.coroutines.Dispatchers @@ -214,7 +214,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe } // Go to lyrics activity when clicked lyrics binding.playerLyricsLine2.setOnClickListener { - NavigationUtil.goToLyrics(requireActivity()) + goToLyrics(requireActivity()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt index 4d9826a38..0d934398f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt @@ -63,7 +63,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper private var audioVolumeObserver: AudioVolumeObserver? = null - private val audioManager: AudioManager? + private val audioManager: AudioManager get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager private var _binding: FragmentCirclePlayerBinding? = null @@ -239,7 +239,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), override fun onProgressChanged(seekArc: SeekArc?, progress: Int, fromUser: Boolean) { val audioManager = audioManager - audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0) + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0) } override fun onStartTrackingTouch(seekArc: SeekArc?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt index 78b84e5dc..f0d5c696e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt @@ -247,7 +247,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player updateQueue() } - override fun playerToolbar(): Toolbar? { + override fun playerToolbar(): Toolbar { return binding.playerToolbar } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index 9dbfd766d..968794db0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -316,7 +316,7 @@ class FullPlaybackControlsFragment : fun updateIsFavorite(animate: Boolean = false) { lifecycleScope.launch(Dispatchers.IO) { - val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() + val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() if (playlist != null) { val song: SongEntity = MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId) @@ -327,7 +327,7 @@ class FullPlaybackControlsFragment : } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( + val drawable: Drawable = RetroUtil.getTintedVectorDrawable( requireContext(), icon, Color.WHITE @@ -347,7 +347,7 @@ class FullPlaybackControlsFragment : private fun toggleFavorite(song: Song) { lifecycleScope.launch(Dispatchers.IO) { - val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() + val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() if (playlist != null) { val songEntity = song.toSongEntity(playlist.playListId) val isFavorite = libraryViewModel.isFavoriteSong(songEntity).isNotEmpty() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index ed0c3dca6..82f0c8766 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -281,7 +281,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private fun updateIsFavoriteIcon(animate: Boolean = false) { lifecycleScope.launch(Dispatchers.IO) { - val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() + val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() if (playlist != null) { val song: SongEntity = MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId) diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/M3UWriter.kt b/app/src/main/java/code/name/monkey/retromusic/helper/M3UWriter.kt index c834b9a56..f6044b2de 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/M3UWriter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/M3UWriter.kt @@ -26,7 +26,7 @@ object M3UWriter : M3UConstants { fun write( dir: File, playlist: Playlist - ): File? { + ): File { if (!dir.exists()) dir.mkdirs() val file = File(dir, playlist.name + "." + M3UConstants.EXTENSION) val songs = playlist.getSongs() diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicProgressViewUpdateHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicProgressViewUpdateHelper.kt index 9cd2f3a9e..2e6aefefb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicProgressViewUpdateHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicProgressViewUpdateHelper.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.helper import android.os.Handler import android.os.Message +import kotlin.math.max class MusicProgressViewUpdateHelper : Handler { @@ -62,7 +63,7 @@ class MusicProgressViewUpdateHelper : Handler { val remainingMillis = intervalPlaying - progressMillis % intervalPlaying - return Math.max(MIN_INTERVAL, remainingMillis) + return max(MIN_INTERVAL, remainingMillis) } private fun queueNextRefresh(delay: Long) { diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt index 7c7d68e2c..6c5b8a69c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt @@ -134,7 +134,7 @@ class SortOrder { companion object { /* Artist song sort order A-Z */ - const val SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER + private const val SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER /* Artist song sort order Z-A */ const val SONG_Z_A = "$SONG_A_Z DESC" diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java b/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java index 91370fe89..9c100da91 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java +++ b/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java @@ -76,8 +76,8 @@ public class StackBlur { original.getPixels(currentPixels, 0, w, 0, 0, w, h); int cores = EXECUTOR_THREADS; - ArrayList horizontal = new ArrayList(cores); - ArrayList vertical = new ArrayList(cores); + ArrayList horizontal = new ArrayList<>(cores); + ArrayList vertical = new ArrayList<>(cores); for (int i = 0; i < cores; i++) { horizontal.add(new BlurTask(currentPixels, w, h, (int) radius, cores, i, 1)); vertical.add(new BlurTask(currentPixels, w, h, (int) radius, cores, i, 2)); @@ -158,7 +158,7 @@ public class StackBlur { for (x = 0; x < w; x++) { src[dst_i] = (int) - ((src[dst_i] & 0xFFFFFFFF) + ((src[dst_i]) | ((((sum_r * mul_sum) >>> shr_sum) & 0xff) << 16) | ((((sum_g * mul_sum) >>> shr_sum) & 0xff) << 8) | ((((sum_b * mul_sum) >>> shr_sum) & 0xff))); @@ -245,7 +245,7 @@ public class StackBlur { for (y = 0; y < h; y++) { src[dst_i] = (int) - ((src[dst_i] & 0xFFFFFFFF) + ((src[dst_i]) | ((((sum_r * mul_sum) >>> shr_sum) & 0xff) << 16) | ((((sum_g * mul_sum) >>> shr_sum) & 0xff) << 8) | ((((sum_b * mul_sum) >>> shr_sum) & 0xff))); diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java deleted file mode 100644 index 9770a9f4c..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java +++ /dev/null @@ -1,138 +0,0 @@ -package code.name.monkey.retromusic.lyrics; - -import android.content.Context; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Desc : 歌词解析 Author : Lauzy Date : 2017/10/13 Blog : http://www.jianshu.com/u/e76853f863a9 Email : - * freedompaladin@gmail.com - */ -public class LrcHelper { - - private static final String CHARSET = "utf-8"; - // [03:56.00][03:18.00][02:06.00][01:07.00]原谅我这一生不羁放纵爱自由 - private static final String LINE_REGEX = "((\\[\\d{2}:\\d{2}\\.\\d{2}])+)(.*)"; - private static final String TIME_REGEX = "\\[(\\d{2}):(\\d{2})\\.(\\d{2})]"; - - public static List parseLrcFromAssets(Context context, String fileName) { - try { - return parseInputStream(context.getResources().getAssets().open(fileName)); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - public static List parseLrcFromFile(File file) { - try { - return parseInputStream(new FileInputStream(file)); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return null; - } - - private static List parseInputStream(InputStream inputStream) { - List lrcs = new ArrayList<>(); - InputStreamReader isr = null; - BufferedReader br = null; - try { - isr = new InputStreamReader(inputStream, CHARSET); - br = new BufferedReader(isr); - String line; - while ((line = br.readLine()) != null) { - List lrcList = parseLrc(line); - if (lrcList != null && lrcList.size() != 0) { - lrcs.addAll(lrcList); - } - } - sortLrcs(lrcs); - return lrcs; - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - if (isr != null) { - isr.close(); - } - if (br != null) { - br.close(); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - return lrcs; - } - - private static void sortLrcs(List lrcs) { - Collections.sort( - lrcs, - new Comparator() { - @Override - public int compare(Lrc o1, Lrc o2) { - return (int) (o1.getTime() - o2.getTime()); - } - }); - } - - private static List parseLrc(String lrcLine) { - if (lrcLine.trim().isEmpty()) { - return null; - } - List lrcs = new ArrayList<>(); - Matcher matcher = Pattern.compile(LINE_REGEX).matcher(lrcLine); - if (!matcher.matches()) { - return null; - } - - String time = matcher.group(1); - String content = matcher.group(3); - Matcher timeMatcher = Pattern.compile(TIME_REGEX).matcher(time); - - while (timeMatcher.find()) { - String min = timeMatcher.group(1); - String sec = timeMatcher.group(2); - String mil = timeMatcher.group(3); - Lrc lrc = new Lrc(); - if (content != null && content.length() != 0) { - lrc.setTime( - Long.parseLong(min) * 60 * 1000 - + Long.parseLong(sec) * 1000 - + Long.parseLong(mil) * 10); - lrc.setText(content); - lrcs.add(lrc); - } - } - return lrcs; - } - - public static String formatTime(long time) { - int min = (int) (time / 60000); - int sec = (int) (time / 1000 % 60); - return adjustFormat(min) + ":" + adjustFormat(sec); - } - - private static String adjustFormat(int time) { - if (time < 10) { - return "0" + time; - } - return time + ""; - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java index 50ce61196..9ee76bb0b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java @@ -78,8 +78,8 @@ public abstract class CustomFragmentStatePagerAdapter extends PagerAdapter { private final FragmentManager mFragmentManager; private FragmentTransaction mCurTransaction = null; - private final ArrayList mSavedState = new ArrayList(); - private final ArrayList mFragments = new ArrayList(); + private final ArrayList mSavedState = new ArrayList<>(); + private final ArrayList mFragments = new ArrayList<>(); private Fragment mCurrentPrimaryItem = null; public CustomFragmentStatePagerAdapter(FragmentManager fm) { @@ -212,8 +212,8 @@ public abstract class CustomFragmentStatePagerAdapter extends PagerAdapter { mSavedState.clear(); mFragments.clear(); if (fss != null) { - for (int i = 0; i < fss.length; i++) { - mSavedState.add((Fragment.SavedState) fss[i]); + for (Parcelable parcelable : fss) { + mSavedState.add((Fragment.SavedState) parcelable); } } Iterable keys = bundle.keySet(); diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index bdde24be0..66f35c579 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -148,7 +148,7 @@ class AlbumCoverStylePreferenceDialog : DialogFragment(), return view === instace } - override fun getPageTitle(position: Int): CharSequence? { + override fun getPageTitle(position: Int): CharSequence { return context.getString(values()[position].titleRes) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index d53c8c1f2..35345ef8b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -153,7 +153,7 @@ private class NowPlayingScreenAdapter(private val context: Context) : PagerAdapt return view === instance } - override fun getPageTitle(position: Int): CharSequence? { + override fun getPageTitle(position: Int): CharSequence { return context.getString(values()[position].titleRes) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java index 7a6372041..36ba86299 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java @@ -84,30 +84,23 @@ public class HistoryStore extends SQLiteOpenHelper { database.insert(RecentStoreColumns.NAME, null, values); // if our db is too large, delete the extra items - Cursor oldest = null; - try { - oldest = - database.query( - RecentStoreColumns.NAME, - new String[] {RecentStoreColumns.TIME_PLAYED}, - null, - null, - null, - null, - RecentStoreColumns.TIME_PLAYED + " ASC"); + try (Cursor oldest = database.query( + RecentStoreColumns.NAME, + new String[]{RecentStoreColumns.TIME_PLAYED}, + null, + null, + null, + null, + RecentStoreColumns.TIME_PLAYED + " ASC")) { if (oldest != null && oldest.getCount() > MAX_ITEMS_IN_DB) { oldest.moveToPosition(oldest.getCount() - MAX_ITEMS_IN_DB); long timeOfRecordToKeep = oldest.getLong(0); database.delete( - RecentStoreColumns.NAME, - RecentStoreColumns.TIME_PLAYED + " < ?", - new String[] {String.valueOf(timeOfRecordToKeep)}); - } - } finally { - if (oldest != null) { - oldest.close(); + RecentStoreColumns.NAME, + RecentStoreColumns.TIME_PLAYED + " < ?", + new String[]{String.valueOf(timeOfRecordToKeep)}); } } } finally { diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java index 771f06e1f..9d3112969 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java @@ -40,14 +40,11 @@ public class SongPlayCountStore extends SQLiteOpenHelper { @NonNull private static final Interpolator sInterpolator = new AccelerateInterpolator(1.5f); // how high to multiply the interpolation curve - @SuppressWarnings("FieldCanBeLocal") private static final int INTERPOLATOR_HEIGHT = 50; // how high the base value is. The ratio of the Height to Base is what really matters - @SuppressWarnings("FieldCanBeLocal") private static final int INTERPOLATOR_BASE = 25; - @SuppressWarnings("FieldCanBeLocal") private static final int ONE_WEEK_IN_MS = 1000 * 60 * 60 * 24 * 7; @NonNull @@ -257,7 +254,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { for (int i = 0; i < NUM_WEEKS - weekDiff; i++) { playCounts[i + weekDiff] = cursor.getInt(getColumnIndexForWeek(i)); } - } else if (weekDiff < 0) { + } else { // time is shifted backwards (by user) - nor typical behavior but we // will still handle it diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/TopPlayedRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/TopPlayedRepository.kt index e522a0922..810c401d5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/TopPlayedRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/TopPlayedRepository.kt @@ -75,7 +75,7 @@ class RealTopPlayedRepository( val notRecentlyPlayedSongs = songRepository.songs( makeNotRecentTracksCursorAndClearUpDatabase() ) - allSongs.removeAll(playedSongs) + allSongs.removeAll(playedSongs.toSet()) allSongs.addAll(notRecentlyPlayedSongs) return allSongs } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 949d1130e..332e85e7c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -245,7 +245,6 @@ public class MusicService extends MediaBrowserServiceCompat private List originalPlayingQueue = new ArrayList<>(); private List playingQueue = new ArrayList<>(); private boolean pausedByTransientLossOfFocus; - private AudioVolumeObserver audioVolumeObserver = null; private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() { @@ -453,7 +452,7 @@ public class MusicService extends MediaBrowserServiceCompat .registerContentObserver( MediaStore.Audio.Playlists.INTERNAL_CONTENT_URI, true, mediaStoreObserver); - audioVolumeObserver = new AudioVolumeObserver(this); + AudioVolumeObserver audioVolumeObserver = new AudioVolumeObserver(this); audioVolumeObserver.register(AudioManager.STREAM_MUSIC, this); PreferenceUtil.INSTANCE.registerOnSharedPreferenceChangedListener(this); diff --git a/app/src/main/java/code/name/monkey/retromusic/service/ThrottledSeekHandler.kt b/app/src/main/java/code/name/monkey/retromusic/service/ThrottledSeekHandler.kt index 71f4cb465..769ddb075 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/ThrottledSeekHandler.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/ThrottledSeekHandler.kt @@ -38,6 +38,6 @@ class ThrottledSeekHandler( companion object { // milliseconds to throttle before calling run() to aggregate events - private val THROTTLE: Long = 500 + private const val THROTTLE: Long = 500 } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index 9f640206a..b095e2b87 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -54,7 +54,7 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { stopped = false GlobalScope.launch { val song = service.currentSong - val playlist: PlaylistEntity? = MusicUtil.repository.favoritePlaylist() + val playlist: PlaylistEntity = MusicUtil.repository.favoritePlaylist() val isPlaying = service.isPlaying val isFavorite = if (playlist != null) { val songEntity = song.toSongEntity(playlist.playListId) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index ea7c8d9c2..29ff52875 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -183,21 +183,21 @@ class PlayingNotificationOreo : PlayingNotification() { service, R.drawable.ic_close, primary - )!!, NOTIFICATION_CONTROLS_SIZE_MULTIPLIER + ), NOTIFICATION_CONTROLS_SIZE_MULTIPLIER ) val prev = createBitmap( RetroUtil.getTintedVectorDrawable( service, R.drawable.ic_skip_previous_round_white_32dp, primary - )!!, NOTIFICATION_CONTROLS_SIZE_MULTIPLIER + ), NOTIFICATION_CONTROLS_SIZE_MULTIPLIER ) val next = createBitmap( RetroUtil.getTintedVectorDrawable( service, R.drawable.ic_skip_next_round_white_32dp, primary - )!!, NOTIFICATION_CONTROLS_SIZE_MULTIPLIER + ), NOTIFICATION_CONTROLS_SIZE_MULTIPLIER ) val playPause = createBitmap( RetroUtil.getTintedVectorDrawable( @@ -206,7 +206,7 @@ class PlayingNotificationOreo : PlayingNotification() { R.drawable.ic_pause_white_48dp else R.drawable.ic_play_arrow_white_48dp, primary - )!!, NOTIFICATION_CONTROLS_SIZE_MULTIPLIER + ), NOTIFICATION_CONTROLS_SIZE_MULTIPLIER ) notificationLayout.setTextColor(R.id.title, primary) @@ -233,7 +233,7 @@ class PlayingNotificationOreo : PlayingNotification() { service, R.drawable.ic_notification, secondary - )!!, 0.6f + ), 0.6f ) ) notificationLayoutBig.setImageViewBitmap( @@ -243,7 +243,7 @@ class PlayingNotificationOreo : PlayingNotification() { service, R.drawable.ic_notification, secondary - )!!, 0.6f + ), 0.6f ) ) diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/DepthTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/transform/DepthTransformation.kt index 97126c46d..8f34507aa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/DepthTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/DepthTransformation.kt @@ -16,26 +16,32 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager +import kotlin.math.abs class DepthTransformation : ViewPager.PageTransformer { override fun transformPage(page: View, position: Float) { - if (position < -1) { // [-Infinity,-1) - // This page is way off-screen to the left. - page.alpha = 0f - } else if (position <= 0) { // [-1,0] - page.alpha = 1f - page.translationX = 0f - page.scaleX = 1f - page.scaleY = 1f - } else if (position <= 1) { // (0,1] - page.translationX = -position * page.width - page.alpha = 1 - Math.abs(position) - page.scaleX = 1 - Math.abs(position) - page.scaleY = 1 - Math.abs(position) - } else { // (1,+Infinity] - // This page is way off-screen to the right. - page.alpha = 0f + when { + position < -1 -> { // [-Infinity,-1) + // This page is way off-screen to the left. + page.alpha = 0f + } + position <= 0 -> { // [-1,0] + page.alpha = 1f + page.translationX = 0f + page.scaleX = 1f + page.scaleY = 1f + } + position <= 1 -> { // (0,1] + page.translationX = -position * page.width + page.alpha = 1 - abs(position) + page.scaleX = 1 - abs(position) + page.scaleY = 1 - abs(position) + } + else -> { // (1,+Infinity] + // This page is way off-screen to the right. + page.alpha = 0f + } } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/HorizontalFlipTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/transform/HorizontalFlipTransformation.kt index 409fb6e5b..94004b6b9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/HorizontalFlipTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/HorizontalFlipTransformation.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager +import kotlin.math.abs class HorizontalFlipTransformation : ViewPager.PageTransformer { override fun transformPage(page: View, position: Float) { @@ -36,11 +37,11 @@ class HorizontalFlipTransformation : ViewPager.PageTransformer { } else if (position <= 0) { // [-1,0] page.alpha = 1f - page.rotationX = 180 * (1 - Math.abs(position) + 1) + page.rotationX = 180 * (1 - abs(position) + 1) } else if (position <= 1) { // (0,1] page.alpha = 1f - page.rotationX = -180 * (1 - Math.abs(position) + 1) + page.rotationX = -180 * (1 - abs(position) + 1) } else { // (1,+Infinity] // This page is way off-screen to the right. diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/NormalPageTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/NormalPageTransformer.kt index f63e0cd7e..eac68e8a5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/NormalPageTransformer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/NormalPageTransformer.kt @@ -16,6 +16,8 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager +import kotlin.math.abs +import kotlin.math.max /** * @author Hemanth S (h4h13). @@ -33,7 +35,7 @@ class NormalPageTransformer : ViewPager.PageTransformer { view.scaleY = 0.7f } else if (position <= 1) { // [-1,1] // Modify the default slide transition to shrink the page as well - val scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)) + val scaleFactor = max(MIN_SCALE, 1 - abs(position)) val vertMargin = pageHeight * (1 - scaleFactor) / 2 val horzMargin = pageWidth * (1 - scaleFactor) / 2 if (position < 0) { @@ -57,7 +59,7 @@ class NormalPageTransformer : ViewPager.PageTransformer { } companion object { - private val MIN_SCALE = 0.85f - private val MIN_ALPHA = 0.5f + private const val MIN_SCALE = 0.85f + private const val MIN_ALPHA = 0.5f } } diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/VerticalFlipTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/transform/VerticalFlipTransformation.kt index 4b06bd561..25df95c8a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/VerticalFlipTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/VerticalFlipTransformation.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager +import kotlin.math.abs class VerticalFlipTransformation : ViewPager.PageTransformer { override fun transformPage(page: View, position: Float) { @@ -36,11 +37,11 @@ class VerticalFlipTransformation : ViewPager.PageTransformer { } else if (position <= 0) { // [-1,0] page.alpha = 1f - page.rotationY = 180 * (1 - Math.abs(position) + 1) + page.rotationY = 180 * (1 - abs(position) + 1) } else if (position <= 1) { // (0,1] page.alpha = 1f - page.rotationY = -180 * (1 - Math.abs(position) + 1) + page.rotationY = -180 * (1 - abs(position) + 1) } else { // (1,+Infinity] // This page is way off-screen to the right. diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index 67198aae1..119fc81f3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -348,7 +348,7 @@ object MusicUtil : KoinComponent { val repository = get() fun toggleFavorite(context: Context, song: Song) { GlobalScope.launch { - val playlist: PlaylistEntity? = repository.favoritePlaylist() + val playlist: PlaylistEntity = repository.favoritePlaylist() if (playlist != null) { val songEntity = song.toSongEntity(playlist.playListId) val isFavorite = repository.isFavoriteSong(songEntity).isNotEmpty() @@ -529,7 +529,7 @@ object MusicUtil : KoinComponent { val pendingIntent = MediaStore.createDeleteRequest(activity.contentResolver, songs.map { getSongFileUri(it.id) }) - activity.startIntentSenderForResult(pendingIntent.intentSender, 45, null, 0, 0, 0, null); + activity.startIntentSenderForResult(pendingIntent.intentSender, 45, null, 0, 0, 0, null) } fun songByGenre(genreId: Long): Song { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt index 71af0911a..972664e3c 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt @@ -20,12 +20,10 @@ import android.content.Intent import android.media.audiofx.AudioEffect import android.widget.Toast import androidx.core.app.ActivityCompat -import androidx.navigation.findNavController import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.* import code.name.monkey.retromusic.activities.bugreport.BugReportActivity import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId -import com.google.android.material.bottomsheet.BottomSheetBehavior object NavigationUtil { fun bugReport(activity: Activity) { @@ -40,21 +38,6 @@ object NavigationUtil { ActivityCompat.startActivity(activity, Intent(activity, LicenseActivity::class.java), null) } - fun goToLyrics(activity: Activity) { - if (activity !is MainActivity) return - activity.apply { - //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully - setBottomNavVisibility(false) - if (getBottomSheetBehavior().state == BottomSheetBehavior.STATE_EXPANDED) { - collapsePanel() - } - - findNavController(R.id.fragment_container).navigate( - R.id.lyrics_fragment - ) - } - } - fun goToProVersion(context: Context) { ActivityCompat.startActivity(context, Intent(context, PurchaseActivity::class.java), null) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt index 352fb1e49..76a56584d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt @@ -208,11 +208,11 @@ class PackageValidator( private fun getSignature(packageInfo: PackageInfo): String? { // Security best practices dictate that an app should be signed with exactly one (1) // signature. Because of this, if there are multiple signatures, reject it. - if (packageInfo.signatures == null || packageInfo.signatures.size != 1) { - return null + return if (packageInfo.signatures == null || packageInfo.signatures.size != 1) { + null } else { val certificate = packageInfo.signatures[0].toByteArray() - return getSignatureSha256(certificate) + getSignatureSha256(certificate) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java index bcdf278e3..5e6872a03 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java @@ -36,7 +36,6 @@ import java.util.List; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.db.PlaylistWithSongs; -import code.name.monkey.retromusic.helper.M3UConstants; import code.name.monkey.retromusic.helper.M3UWriter; import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.PlaylistSong; 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 a07cc1fb7..cc4aea661 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 @@ -188,7 +188,7 @@ public class RetroColorUtil { public static int getDominantColor(Bitmap bitmap, int defaultFooterColor) { List swatchesTemp = Palette.from(bitmap).generate().getSwatches(); - List swatches = new ArrayList(swatchesTemp); + List swatches = new ArrayList<>(swatchesTemp); Collections.sort( swatches, (swatch1, swatch2) -> swatch2.getPopulation() - swatch1.getPopulation()); return swatches.size() > 0 ? swatches.get(0).getRgb() : defaultFooterColor; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index 81c03ae7e..8005ab2b4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -40,7 +40,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; +import androidx.core.content.res.ResourcesCompat; import java.net.InetAddress; import java.net.NetworkInterface; @@ -127,14 +127,14 @@ public class RetroUtil { return result; } - @Nullable + @NonNull public static Drawable getTintedVectorDrawable( @NonNull Context context, @DrawableRes int id, @ColorInt int color) { return TintHelper.createTintedDrawable( getVectorDrawable(context.getResources(), id, context.getTheme()), color); } - @Nullable + @NonNull public static Drawable getTintedVectorDrawable( @NonNull Resources res, @DrawableRes int resId, @@ -146,10 +146,7 @@ public class RetroUtil { @Nullable public static Drawable getVectorDrawable( @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { - if (Build.VERSION.SDK_INT >= 21) { - return res.getDrawable(resId, theme); - } - return VectorDrawableCompat.create(res, resId, theme); + return ResourcesCompat.getDrawable(res, resId, theme); } public static void hideSoftKeyboard(@Nullable Activity activity) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java index 80233a62c..58a8aad15 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java @@ -75,11 +75,9 @@ public class MediaNotificationProcessor { */ private static final int LIGHTNESS_TEXT_DIFFERENCE_DARK = -10; - private static final String TAG = "ColorPicking"; private float[] mFilteredBackgroundHsl = null; private final Palette.Filter mBlackWhiteFilter = (rgb, hsl) -> !isWhiteOrBlack(hsl); - private boolean mIsLowPriority; private int backgroundColor; private int secondaryTextColor; private int primaryTextColor; @@ -376,10 +374,6 @@ public class MediaNotificationProcessor { return hslColor[2] >= WHITE_MIN_LIGHTNESS; } - public void setIsLowPriority(boolean isLowPriority) { - mIsLowPriority = isLowPriority; - } - private void ensureColors(int backgroundColor, int mForegroundColor) { { double backLum = NotificationColorUtil.calculateLuminance(backgroundColor); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java index 1b7fb758f..03f8afd43 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java @@ -55,7 +55,7 @@ public class NotificationColorUtil { private final ImageUtils mImageUtils = new ImageUtils(); private final WeakHashMap> mGrayscaleBitmapCache = - new WeakHashMap>(); + new WeakHashMap<>(); private final int mGrayscaleIconMaxSize; // @dimen/notification_large_icon_width (64dp) @@ -831,11 +831,11 @@ public class NotificationColorUtil { } private static int constrain(int amount, int low, int high) { - return amount < low ? low : (amount > high ? high : amount); + return amount < low ? low : (Math.min(amount, high)); } private static float constrain(float amount, float low, float high) { - return amount < low ? low : (amount > high ? high : amount); + return amount < low ? low : (Math.min(amount, high)); } private static double pivotXyzComponent(double component) { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java index ccf533c46..8fb46c7df 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java @@ -39,9 +39,7 @@ public class SeekArc extends View { private static final String TAG = SeekArc.class.getSimpleName(); private static final int INVALID_PROGRESS_VALUE = -1; - // The initial rotational offset -90 means we start at 12 o'clock - private final int mAngleOffset = -90; - private Paint mArcPaint; + private Paint mArcPaint; // Internal variables private int mArcRadius = 0; private final RectF mArcRect = new RectF(); @@ -77,8 +75,7 @@ public class SeekArc extends View { private int mThumbXPos; private int mThumbYPos; - private double mTouchAngle; - private float mTouchIgnoreRadius; + private float mTouchIgnoreRadius; /** Enable touch inside the SeekArc */ private boolean mTouchInside = true; @@ -243,8 +240,8 @@ public class SeekArc extends View { } public void setTouchInSide(boolean isEnabled) { - int thumbHalfheight = (int) mThumb.getIntrinsicHeight() / 2; - int thumbHalfWidth = (int) mThumb.getIntrinsicWidth() / 2; + int thumbHalfheight = mThumb.getIntrinsicHeight() / 2; + int thumbHalfWidth = mThumb.getIntrinsicWidth() / 2; mTouchInside = isEnabled; if (mTouchInside) { mTouchIgnoreRadius = (float) mArcRadius / 4; @@ -271,7 +268,9 @@ public class SeekArc extends View { } // Draw the arcs - final int arcStart = mStartAngle + mAngleOffset + mRotation; + // The initial rotational offset -90 means we start at 12 o'clock + int mAngleOffset = -90; + final int arcStart = mStartAngle + mAngleOffset + mRotation; final int arcSweep = mSweepAngle; canvas.drawArc(mArcRect, arcStart, arcSweep, false, mArcPaint); canvas.drawArc(mArcRect, arcStart, mProgressSweep, false, mProgressPaint); @@ -368,8 +367,8 @@ public class SeekArc extends View { mThumb = thumb; } - thumbHalfheight = (int) mThumb.getIntrinsicHeight() / 2; - thumbHalfWidth = (int) mThumb.getIntrinsicWidth() / 2; + thumbHalfheight = mThumb.getIntrinsicHeight() / 2; + thumbHalfWidth = mThumb.getIntrinsicWidth() / 2; mThumb.setBounds(-thumbHalfWidth, -thumbHalfheight, thumbHalfWidth, thumbHalfheight); mMax = a.getInteger(R.styleable.SeekArc_max, mMax); @@ -390,16 +389,16 @@ public class SeekArc extends View { a.recycle(); } - mProgress = (mProgress > mMax) ? mMax : mProgress; - mProgress = (mProgress < 0) ? 0 : mProgress; + mProgress = Math.min(mProgress, mMax); + mProgress = Math.max(mProgress, 0); - mSweepAngle = (mSweepAngle > 360) ? 360 : mSweepAngle; - mSweepAngle = (mSweepAngle < 0) ? 0 : mSweepAngle; + mSweepAngle = Math.min(mSweepAngle, 360); + mSweepAngle = Math.max(mSweepAngle, 0); mProgressSweep = (float) mProgress / mMax * mSweepAngle; mStartAngle = (mStartAngle > 360) ? 0 : mStartAngle; - mStartAngle = (mStartAngle < 0) ? 0 : mStartAngle; + mStartAngle = Math.max(mStartAngle, 0); mArcPaint = new Paint(); mArcPaint.setColor(arcColor); @@ -442,7 +441,7 @@ public class SeekArc extends View { return; } setPressed(true); - mTouchAngle = getTouchDegrees(event.getX(), event.getY()); + double mTouchAngle = getTouchDegrees(event.getX(), event.getY()); int progress = getProgressForAngle(mTouchAngle); onProgressRefresh(progress, true); } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt index 101624be6..4d2cb5569 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt @@ -2,14 +2,9 @@ package code.name.monkey.retromusic.views.insets import android.content.Context import android.util.AttributeSet -import android.view.WindowInsets import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.view.WindowInsetsCompat import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding -import code.name.monkey.retromusic.extensions.recordInitialPaddingForView -import code.name.monkey.retromusic.extensions.requestApplyInsetsWhenAttached import code.name.monkey.retromusic.util.RetroUtil -import com.afollestad.materialdialogs.utils.MDUtil.updatePadding class InsetsConstraintLayout @JvmOverloads constructor( context: Context, diff --git a/app/src/main/res/layout/fragment_artist_details.xml b/app/src/main/res/layout/fragment_artist_details.xml index a50a39bbe..b7380f0c6 100644 --- a/app/src/main/res/layout/fragment_artist_details.xml +++ b/app/src/main/res/layout/fragment_artist_details.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true"> + android:fitsSystemWindows="true" + android:transitionGroup="true"> + android:layout_height="wrap_content"> - diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt index 27a72c3b0..725782cad 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt @@ -74,7 +74,7 @@ object ATH { setActivityToolbarColor(activity, toolbar, ThemeStore.primaryColor(activity)) } - fun setActivityToolbarColor( + private fun setActivityToolbarColor( activity: Activity, toolbar: Toolbar?, color: Int ) { diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATHActivity.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATHActivity.kt index 50a937a3f..be2a65569 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATHActivity.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATHActivity.kt @@ -23,7 +23,7 @@ open class ATHActivity : AppCompatActivity() { } } - fun onThemeChanged() { + private fun onThemeChanged() { postRecreate() } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java index 2fb36a80c..ab82a32a9 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java @@ -56,7 +56,7 @@ public class ATEPreferenceDialogFragment extends DialogFragment implements Dialo } else { DialogPreference.TargetFragment fragment = (DialogPreference.TargetFragment) rawFragment; String key = this.getArguments().getString(ARG_KEY); - this.mPreference = (DialogPreference) fragment.findPreference(key); + this.mPreference = fragment.findPreference(key); } } @@ -96,7 +96,7 @@ public class ATEPreferenceDialogFragment extends DialogFragment implements Dialo } @Override - public void onDismiss(DialogInterface dialog) { + public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); Log.i(TAG, "onDismiss: " + mWhichButtonClicked); onDialogClosed(mWhichButtonClicked == DialogInterface.BUTTON_POSITIVE); diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ColorUtil.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ColorUtil.kt index 59b09c2e7..fe36eae77 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ColorUtil.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ColorUtil.kt @@ -3,6 +3,7 @@ package code.name.monkey.appthemehelper.util import android.graphics.Color import androidx.annotation.ColorInt import androidx.annotation.FloatRange +import kotlin.math.* object ColorUtil { fun desaturateColor(color: Int, ratio: Float): Int { @@ -59,7 +60,7 @@ object ColorUtil { @ColorInt fun adjustAlpha(@ColorInt color: Int, @FloatRange(from = 0.0, to = 1.0) factor: Float): Int { - val alpha = Math.round(Color.alpha(color) * factor) + val alpha = (Color.alpha(color) * factor).roundToInt() val red = Color.red(color) val green = Color.green(color) val blue = Color.blue(color) @@ -68,7 +69,7 @@ object ColorUtil { @ColorInt fun withAlpha(@ColorInt baseColor: Int, @FloatRange(from = 0.0, to = 1.0) alpha: Float): Int { - val a = Math.min(255, Math.max(0, (alpha * 255).toInt())) shl 24 + val a = min(255, max(0, (alpha * 255).toInt())) shl 24 val rgb = 0x00ffffff and baseColor return a + rgb } @@ -100,15 +101,15 @@ object ColorUtil { } fun isColorSaturated(@ColorInt color: Int): Boolean { - val max = Math.max( + val max = max( 0.299 * Color.red(color), - Math.max(0.587 * Color.green(color), 0.114 * Color.blue(color)) + max(0.587 * Color.green(color), 0.114 * Color.blue(color)) ) - val min = Math.min( + val min = min( 0.299 * Color.red(color), - Math.min(0.587 * Color.green(color), 0.114 * Color.blue(color)) + min(0.587 * Color.green(color), 0.114 * Color.blue(color)) ) - val diff = Math.abs(max - min) + val diff = abs(max - min) return diff > 20 } @@ -121,10 +122,10 @@ object ColorUtil { ) } - fun getDifference(@ColorInt color1: Int, @ColorInt color2: Int): Double { - var diff = Math.abs(0.299 * (Color.red(color1) - Color.red(color2))) - diff += Math.abs(0.587 * (Color.green(color1) - Color.green(color2))) - diff += Math.abs(0.114 * (Color.blue(color1) - Color.blue(color2))) + private fun getDifference(@ColorInt color1: Int, @ColorInt color2: Int): Double { + var diff = abs(0.299 * (Color.red(color1) - Color.red(color2))) + diff += abs(0.587 * (Color.green(color1) - Color.green(color2))) + diff += abs(0.114 * (Color.blue(color1) - Color.blue(color2))) return diff } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/TintHelper.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/TintHelper.java index 9e67a12c4..54f0cd76b 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/TintHelper.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/TintHelper.java @@ -6,7 +6,6 @@ import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.graphics.drawable.RippleDrawable; -import android.os.Build; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -149,40 +148,14 @@ public final class TintHelper { useDarker ? R.color.ate_control_normal_dark : R.color.ate_control_normal_light), color }); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - radioButton.setButtonTintList(sl); - } else { - Drawable d = createTintedDrawable( - ContextCompat.getDrawable(radioButton.getContext(), R.drawable.abc_btn_radio_material), sl); - radioButton.setButtonDrawable(d); - } + radioButton.setButtonTintList(sl); } public static void setTint(@NonNull SeekBar seekBar, @ColorInt int color, boolean useDarker) { final ColorStateList s1 = getDisabledColorStateList(color, ContextCompat.getColor(seekBar.getContext(), useDarker ? R.color.ate_control_disabled_dark : R.color.ate_control_disabled_light)); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - seekBar.setThumbTintList(s1); - seekBar.setProgressTintList(s1); - } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { - Drawable progressDrawable = createTintedDrawable(seekBar.getProgressDrawable(), s1); - seekBar.setProgressDrawable(progressDrawable); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - Drawable thumbDrawable = createTintedDrawable(seekBar.getThumb(), s1); - seekBar.setThumb(thumbDrawable); - } - } else { - PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN; - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { - mode = PorterDuff.Mode.MULTIPLY; - } - if (seekBar.getIndeterminateDrawable() != null) { - seekBar.getIndeterminateDrawable().setColorFilter(color, mode); - } - if (seekBar.getProgressDrawable() != null) { - seekBar.getProgressDrawable().setColorFilter(color, mode); - } - } + seekBar.setThumbTintList(s1); + seekBar.setProgressTintList(s1); } public static void setTint(@NonNull ProgressBar progressBar, @ColorInt int color) { @@ -191,23 +164,10 @@ public final class TintHelper { public static void setTint(@NonNull ProgressBar progressBar, @ColorInt int color, boolean skipIndeterminate) { ColorStateList sl = ColorStateList.valueOf(color); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - progressBar.setProgressTintList(sl); - progressBar.setSecondaryProgressTintList(sl); - if (!skipIndeterminate) { - progressBar.setIndeterminateTintList(sl); - } - } else { - PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN; - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { - mode = PorterDuff.Mode.MULTIPLY; - } - if (!skipIndeterminate && progressBar.getIndeterminateDrawable() != null) { - progressBar.getIndeterminateDrawable().setColorFilter(color, mode); - } - if (progressBar.getProgressDrawable() != null) { - progressBar.getProgressDrawable().setColorFilter(color, mode); - } + progressBar.setProgressTintList(sl); + progressBar.setSecondaryProgressTintList(sl); + if (!skipIndeterminate) { + progressBar.setIndeterminateTintList(sl); } } @@ -225,7 +185,7 @@ public final class TintHelper { }); if (editText instanceof AppCompatEditText) { ((AppCompatEditText) editText).setSupportBackgroundTintList(editTextColorStateList); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + } else { editText.setBackgroundTintList(editTextColorStateList); } setCursorTint(editText, color); @@ -243,13 +203,7 @@ public final class TintHelper { useDarker ? R.color.ate_control_normal_dark : R.color.ate_control_normal_light), color }); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - box.setButtonTintList(sl); - } else { - Drawable drawable = createTintedDrawable( - ContextCompat.getDrawable(box.getContext(), R.drawable.abc_btn_check_material), sl); - box.setButtonDrawable(drawable); - } + box.setButtonTintList(sl); } public static void setTint(@NonNull ImageView image, @ColorInt int color) { @@ -257,9 +211,6 @@ public final class TintHelper { } public static void setTint(@NonNull Switch switchView, @ColorInt int color, boolean useDarker) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { - return; - } if (switchView.getTrackDrawable() != null) { switchView.setTrackDrawable(modifySwitchDrawable(switchView.getContext(), switchView.getTrackDrawable(), color, false, false, useDarker)); @@ -286,7 +237,6 @@ public final class TintHelper { setTintAuto(view, color, background, ATHUtil.INSTANCE.isWindowBackgroundDark(view.getContext())); } - @SuppressWarnings("deprecation") public static void setTintAuto(final @NonNull View view, final @ColorInt int color, boolean background, final boolean isDark) { if (!background) { @@ -312,8 +262,7 @@ public final class TintHelper { background = true; } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && - !background && view.getBackground() instanceof RippleDrawable) { + if (!background && view.getBackground() instanceof RippleDrawable) { // Ripples for the above views (e.g. when you tap and hold a switch or checkbox) RippleDrawable rd = (RippleDrawable) view.getBackground(); @SuppressLint("PrivateResource") final int unchecked = ContextCompat.getColor(view.getContext(), @@ -348,7 +297,6 @@ public final class TintHelper { } } - @SuppressWarnings("deprecation") public static void setTintSelector(@NonNull View view, @ColorInt final int color, final boolean darker, final boolean useDarkTheme) { final boolean isColorLight = ColorUtil.INSTANCE.isColorLight(color); @@ -363,8 +311,7 @@ public final class TintHelper { final ColorStateList sl; if (view instanceof Button) { sl = getDisabledColorStateList(color, disabled); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && - view.getBackground() instanceof RippleDrawable) { + if (view.getBackground() instanceof RippleDrawable) { RippleDrawable rd = (RippleDrawable) view.getBackground(); rd.setColor(ColorStateList.valueOf(rippleColor)); } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java index 07e3fd4cd..fc5bc6e3b 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java @@ -5,7 +5,6 @@ import android.content.Context; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; -import android.os.Build; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -17,6 +16,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.RadioButton; + import androidx.annotation.CheckResult; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; @@ -35,11 +35,13 @@ import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.ToolbarWidgetWrapper; import androidx.core.graphics.drawable.DrawableCompat; -import code.name.monkey.appthemehelper.R; -import code.name.monkey.appthemehelper.ThemeStore; + import java.lang.reflect.Field; import java.util.ArrayList; +import code.name.monkey.appthemehelper.R; +import code.name.monkey.appthemehelper.ThemeStore; + public final class ToolbarContentTintHelper { public static class InternalToolbarContentTintUtil { @@ -92,30 +94,27 @@ public final class ToolbarContentTintHelper { if (toolbar == null) { return; } - toolbar.post(new Runnable() { - @Override - public void run() { - try { - Field f1 = Toolbar.class.getDeclaredField("mMenuView"); - f1.setAccessible(true); - ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar); - Field f2 = ActionMenuView.class.getDeclaredField("mPresenter"); - f2.setAccessible(true); + toolbar.post(() -> { + try { + Field f1 = Toolbar.class.getDeclaredField("mMenuView"); + f1.setAccessible(true); + ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar); + Field f2 = ActionMenuView.class.getDeclaredField("mPresenter"); + f2.setAccessible(true); - // Actually ActionMenuPresenter - BaseMenuPresenter presenter = (BaseMenuPresenter) f2.get(actionMenuView); - Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup"); - f3.setAccessible(true); - MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter); - setTintForMenuPopupHelper(context, overflowMenuPopupHelper, color); + // Actually ActionMenuPresenter + BaseMenuPresenter presenter = (BaseMenuPresenter) f2.get(actionMenuView); + Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup"); + f3.setAccessible(true); + MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter); + setTintForMenuPopupHelper(context, overflowMenuPopupHelper, color); - Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup"); - f4.setAccessible(true); - MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter); - setTintForMenuPopupHelper(context, subMenuPopupHelper, color); - } catch (Exception e) { - e.printStackTrace(); - } + Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup"); + f4.setAccessible(true); + MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter); + setTintForMenuPopupHelper(context, subMenuPopupHelper, color); + } catch (Exception e) { + e.printStackTrace(); } }); } @@ -172,28 +171,19 @@ public final class ToolbarContentTintHelper { CheckBox check = (CheckBox) checkboxField.get(iv); if (check != null) { TintHelper.setTint(check, color, isDark); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - check.setBackground(null); - } + check.setBackground(null); } RadioButton radioButton = (RadioButton) radioButtonField.get(iv); if (radioButton != null) { TintHelper.setTint(radioButton, color, isDark); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - radioButton.setBackground(null); - } + radioButton.setBackground(null); } } } catch (Exception e) { e.printStackTrace(); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - listView.getViewTreeObserver().removeOnGlobalLayoutListener(this); - } else { - //noinspection deprecation - listView.getViewTreeObserver().removeGlobalOnLayoutListener(this); - } + listView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); } @@ -202,7 +192,6 @@ public final class ToolbarContentTintHelper { } } - @SuppressWarnings("unchecked") public static void tintMenu(@NonNull Toolbar toolbar, @Nullable Menu menu, final @ColorInt int color) { try { @@ -338,13 +327,8 @@ public final class ToolbarContentTintHelper { //Important to set the color filter in seperate thread, by adding it to the message queue //Won't work otherwise. - innerView.post(new Runnable() { - @Override - public void run() { - ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK] - .setColorFilter(colorFilter); - } - }); + innerView.post(() -> ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK] + .setColorFilter(colorFilter)); } } } @@ -363,7 +347,7 @@ public final class ToolbarContentTintHelper { @Nullable public static Toolbar getSupportActionBarView(@Nullable ActionBar ab) { - if (ab == null || !(ab instanceof WindowDecorActionBar)) { + if (!(ab instanceof WindowDecorActionBar)) { return null; } try { @@ -411,7 +395,6 @@ public final class ToolbarContentTintHelper { secondaryTextColor, menuWidgetColor); } - @SuppressWarnings("unchecked") public static void setToolbarContentColor(@NonNull Context context, Toolbar toolbar, @Nullable Menu menu, @@ -577,7 +560,7 @@ public final class ToolbarContentTintHelper { viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - final ArrayList outViews = new ArrayList(); + final ArrayList outViews = new ArrayList<>(); decorView.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); if (outViews.isEmpty()) { @@ -605,7 +588,7 @@ public final class ToolbarContentTintHelper { final View actionView = item.getActionView(); final View expandActivitiesButton = actionView.findViewById(R.id.expand_activities_button); if (expandActivitiesButton != null) { - final ImageView image = (ImageView) expandActivitiesButton.findViewById(R.id.image); + final ImageView image = expandActivitiesButton.findViewById(R.id.image); if (image != null) { final Drawable drawable = image.getDrawable(); final Drawable wrapped = DrawableCompat.wrap(drawable); diff --git a/appthemehelper/src/main/res/layout/ate_preference_switch_support.xml b/appthemehelper/src/main/res/layout/ate_preference_switch_support.xml index 2f6f38895..50d68fcec 100755 --- a/appthemehelper/src/main/res/layout/ate_preference_switch_support.xml +++ b/appthemehelper/src/main/res/layout/ate_preference_switch_support.xml @@ -1,5 +1,5 @@ - @android:color/system_accent1_200 - @android:color/system_accent1_800 + @android:color/system_accent1_500 \ No newline at end of file diff --git a/appthemehelper/src/main/res/values/ids.xml b/appthemehelper/src/main/res/values/ids.xml deleted file mode 100644 index a6b3daec9..000000000 --- a/appthemehelper/src/main/res/values/ids.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file From 2f047e3b63dcb093411c0a0d2ae7b7bb23691369 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 14:09:25 +0530 Subject: [PATCH 12/30] [Now Playing] Create single instance of Album, Artist & lyrics pages created from Now Playing --- .../fragments/base/AbsPlayerFragment.kt | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 9b93f9901..c3f9b94e0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -37,6 +37,7 @@ import androidx.appcompat.widget.Toolbar import androidx.core.os.bundleOf import androidx.lifecycle.lifecycleScope import androidx.navigation.findNavController +import androidx.navigation.navOptions import androidx.viewpager.widget.ViewPager import code.name.monkey.retromusic.EXTRA_ALBUM_ID import code.name.monkey.retromusic.EXTRA_ARTIST_ID @@ -151,7 +152,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return true } R.id.action_show_lyrics -> { - NavigationUtil.goToLyrics(requireActivity()) + goToLyrics(requireActivity()) return true } R.id.action_equalizer -> { @@ -193,7 +194,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme private fun showLyricsIcon(item: MenuItem) { val icon = if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline - val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( + val drawable: Drawable = RetroUtil.getTintedVectorDrawable( requireContext(), icon, toolbarIconColor() @@ -255,7 +256,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( + val drawable: Drawable = RetroUtil.getTintedVectorDrawable( requireContext(), icon, toolbarIconColor() @@ -394,7 +395,11 @@ fun goToArtist(activity: Activity) { findNavController(R.id.fragment_container).navigate( R.id.artistDetailsFragment, - bundleOf(EXTRA_ARTIST_ID to song.artistId) + bundleOf(EXTRA_ARTIST_ID to song.artistId), + navOptions { + launchSingleTop = true + }, + null ) } } @@ -413,7 +418,29 @@ fun goToAlbum(activity: Activity) { findNavController(R.id.fragment_container).navigate( R.id.albumDetailsFragment, - bundleOf(EXTRA_ALBUM_ID to song.albumId) + bundleOf(EXTRA_ALBUM_ID to song.albumId), + navOptions { + launchSingleTop = true + }, + null + ) + } +} + +fun goToLyrics(activity: Activity) { + if (activity !is MainActivity) return + activity.apply { + //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully + setBottomNavVisibility(false) + if (getBottomSheetBehavior().state == BottomSheetBehavior.STATE_EXPANDED) { + collapsePanel() + } + + findNavController(R.id.fragment_container).navigate( + R.id.lyrics_fragment, + null, + navOptions { launchSingleTop = true }, + null ) } } \ No newline at end of file From e1364ed8a4cc1ba728a3510308eb4a08d095eaec Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 17:20:01 +0530 Subject: [PATCH 13/30] [Settings] Fixed transition cutting from bottom in Settings page while navigating --- app/src/main/res/layout/activity_settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 8eaeb8505..d0e8d2833 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -41,7 +41,7 @@ android:id="@+id/contentFrame" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" app:defaultNavHost="true" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" app:navGraph="@navigation/settings_graph" /> From 63bd71b7e6923cf2bcca948bfaec339df9903573 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 18:44:51 +0530 Subject: [PATCH 14/30] [Library] Implemented Better saving of GridStyle We used to store layout ID's of grid styles before which caused all sorts of trouble whenever an update was pushed. Layout ID's are generated at compile time according to alphabetical order ig, so if a layout is added or renamed, it will cause layout ID's to change, which resulted in either a Different layout than the one user stored, or totally random layout or a crash. So to counter this, 0-6 constant ID's are used to save Grid Styles which should result in stable updates. --- .../monkey/retromusic/fragments/GridStyle.kt | 16 ++++++++ .../fragments/albums/AlbumsFragment.kt | 11 ++++-- .../fragments/artists/ArtistsFragment.kt | 12 +++--- .../fragments/songs/SongsFragment.kt | 12 +++--- .../monkey/retromusic/util/PreferenceUtil.kt | 37 ++++++++++++++----- 5 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt new file mode 100644 index 000000000..505564a1c --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt @@ -0,0 +1,16 @@ +package code.name.monkey.retromusic.fragments + +import androidx.annotation.LayoutRes +import code.name.monkey.retromusic.R + +enum class GridStyle constructor( + @param:LayoutRes @field:LayoutRes val layoutResId: Int, + val id: Int +) { + Grid(R.layout.item_grid, 0), + Card(R.layout.item_card, 1), + ColoredCard(R.layout.item_card_color, 2), + Circular(R.layout.item_grid_circle, 3), + Image(R.layout.image, 4), + GradientImage(R.layout.item_image_gradient, 5) +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt index f63cc644c..e7d713b55 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -131,11 +132,13 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } companion object { @@ -307,9 +310,9 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.albumGridStyle + else -> PreferenceUtil.albumGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.albumGridStyle) { + if (layoutRes != PreferenceUtil.albumGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt index 8739b7665..c0bb41069 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt @@ -25,8 +25,8 @@ import code.name.monkey.retromusic.EXTRA_ARTIST_ID import code.name.monkey.retromusic.EXTRA_ARTIST_NAME import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.artist.ArtistAdapter -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -132,11 +132,13 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } companion object { @@ -312,9 +314,9 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.artistGridStyle + else -> PreferenceUtil.artistGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.artistGridStyle) { + if (layoutRes != PreferenceUtil.artistGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt index d0b3095e5..ab20c8e7b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt @@ -21,8 +21,8 @@ import androidx.annotation.LayoutRes import androidx.recyclerview.widget.GridLayoutManager import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.SongAdapter -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -114,11 +114,13 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } override fun setSortOrder(sortOrder: String) { @@ -307,9 +309,9 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.songGridStyle + else -> PreferenceUtil.songGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.songGridStyle) { + if (layoutRes != PreferenceUtil.songGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index eb43004aa..0de2b7b31 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -12,6 +12,7 @@ import code.name.monkey.retromusic.* import code.name.monkey.retromusic.extensions.getIntRes import code.name.monkey.retromusic.extensions.getStringOrDefault import code.name.monkey.retromusic.fragments.AlbumCoverStyle +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.folder.FoldersFragment import code.name.monkey.retromusic.helper.SortOrder.* @@ -344,22 +345,40 @@ object PreferenceUtil { putInt(LYRICS_OPTIONS, value) } - var songGridStyle - get() = sharedPreferences.getInt(SONG_GRID_STYLE, R.layout.item_grid) + var songGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(SONG_GRID_STYLE, 0) + // We can directly use "first" kotlin extension function here but + // there maybe layout id stored in this so to avoid a crash we use + // "firstOrNull" + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Grid + } set(value) = sharedPreferences.edit { - putInt(SONG_GRID_STYLE, value) + putInt(SONG_GRID_STYLE, value.id) } - var albumGridStyle - get() = sharedPreferences.getInt(ALBUM_GRID_STYLE, R.layout.item_grid) + var albumGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(ALBUM_GRID_STYLE, 0) + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Grid + } set(value) = sharedPreferences.edit { - putInt(ALBUM_GRID_STYLE, value) + putInt(ALBUM_GRID_STYLE, value.id) } - var artistGridStyle - get() = sharedPreferences.getInt(ARTIST_GRID_STYLE, R.layout.item_grid_circle) + var artistGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(ARTIST_GRID_STYLE, 4) + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Circular + } set(value) = sharedPreferences.edit { - putInt(ARTIST_GRID_STYLE, value) + putInt(ARTIST_GRID_STYLE, value.id) } val filterLength get() = sharedPreferences.getInt(FILTER_SONG, 20) From dab5ddb83804c28ebb2f71a8463b64e65cb0de4b Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 20:07:22 +0530 Subject: [PATCH 15/30] Added Custom Artist images backup --- .../monkey/retromusic/helper/BackupHelper.kt | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt index 034e367d7..aefe5511a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -23,6 +23,7 @@ object BackupHelper { zipItems.addAll(getDatabaseZipItems(context)) zipItems.addAll(getSettingsZipItems(context)) getUserImageZipItems(context)?.let { zipItems.addAll(it) } + zipItems.addAll(getCustomArtistZipItems(context)) zipAll(zipItems, backupFile) } @@ -80,6 +81,28 @@ object BackupHelper { } } + private fun getCustomArtistZipItems(context: Context): List { + val zipItemList = mutableListOf() + val sharedPrefPath = context.filesDir.parentFile?.absolutePath + "/shared_prefs/" + + zipItemList.addAll( + File(context.filesDir, "custom_artist_images") + .listFiles()?.map { + ZipItem( + it.absolutePath, + "$CUSTOM_ARTISTS_PATH${File.separator}custom_artist_images${File.separator}${it.name}" + ) + }?.toList() ?: listOf() + ) + zipItemList.add( + ZipItem( + sharedPrefPath + File.separator + "custom_artist_image.xml", + "$CUSTOM_ARTISTS_PATH${File.separator}prefs${File.separator}custom_artist_image.xml" + ) + ) + return zipItemList + } + suspend fun restoreBackup(context: Context, inputStream: InputStream?) { withContext(Dispatchers.IO) { ZipInputStream(inputStream).use { @@ -88,6 +111,16 @@ object BackupHelper { if (entry.isDatabaseEntry()) restoreDatabase(context, it, entry) if (entry.isPreferenceEntry()) restorePreferences(context, it, entry) if (entry.isImageEntry()) restoreImages(context, it, entry) + if (entry.isCustomArtistImageEntry()) restoreCustomArtistImages( + context, + it, + entry + ) + if (entry.isCustomArtistPrefEntry()) restoreCustomArtistPrefs( + context, + it, + entry + ) entry = it.nextEntry } } @@ -137,6 +170,48 @@ object BackupHelper { } } + private fun restoreCustomArtistImages( + context: Context, + zipIn: ZipInputStream, + zipEntry: ZipEntry + ) { + val parentFolder = File(context.filesDir, "custom_artist_images") + + if (!parentFolder.exists()) { + parentFolder.mkdirs() + } + BufferedOutputStream( + FileOutputStream( + File( + parentFolder, + zipEntry.getFileName() + ) + ) + ).use { bos -> + val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (zipIn.read(bytesIn).also { read = it } != -1) { + bos.write(bytesIn, 0, read) + } + } + } + + private fun restoreCustomArtistPrefs( + context: Context, + zipIn: ZipInputStream, + zipEntry: ZipEntry + ) { + val filePath = + context.filesDir.parentFile?.absolutePath + "/shared_prefs/" + zipEntry.getFileName() + BufferedOutputStream(FileOutputStream(filePath)).use { bos -> + val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (zipIn.read(bytesIn).also { read = it } != -1) { + bos.write(bytesIn, 0, read) + } + } + } + val backupRootPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) .toString() + "/RetroMusic/Backups/" @@ -145,6 +220,7 @@ object BackupHelper { private const val DATABASES_PATH = "databases" private const val SETTINGS_PATH = "prefs" private const val IMAGES_PATH = "userImages" + private const val CUSTOM_ARTISTS_PATH = "artistImages" private const val THEME_PREFS_KEY_DEFAULT = "[[kabouzeid_app-theme-helper]]" private fun ZipEntry.isDatabaseEntry(): Boolean { @@ -159,6 +235,14 @@ object BackupHelper { return name.startsWith(IMAGES_PATH) } + private fun ZipEntry.isCustomArtistImageEntry(): Boolean { + return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("custom_artist_images") + } + + private fun ZipEntry.isCustomArtistPrefEntry(): Boolean { + return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("prefs") + } + private fun ZipEntry.getFileName(): String { return name.substring(name.lastIndexOf(File.separator)) } From aefd52c12eed6ba1c0046b523802e742fc52d33c Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 28 Nov 2021 10:46:56 +0530 Subject: [PATCH 16/30] [Tag Editor] Removed warnings --- .../activities/tageditor/TagWriter.kt | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt index 39f24b449..4fcea20f2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/TagWriter.kt @@ -49,9 +49,9 @@ class TagWriter { ) } - suspend fun writeTagsToFiles(context: Context, info: AudioTagInfo) = + suspend fun writeTagsToFiles(context: Context, info: AudioTagInfo) { withContext(Dispatchers.IO) { - try { + kotlin.runCatching { var artwork: Artwork? = null var albumArtFile: File? = null if (info.artworkInfo?.artwork != null) { @@ -113,18 +113,18 @@ class TagWriter { deleteAlbumArt(context, info.artworkInfo!!.albumId) } scan(context, info.filePaths) - } catch (e: Exception) { - e.printStackTrace() - scan(context, null) + }.onFailure { + it.printStackTrace() } } + } @RequiresApi(Build.VERSION_CODES.R) - suspend fun writeTagsToFilesR(context: Context, info: AudioTagInfo) = + suspend fun writeTagsToFilesR(context: Context, info: AudioTagInfo): List = withContext(Dispatchers.IO) { val cacheFiles = mutableListOf() - try { + kotlin.runCatching { var artwork: Artwork? = null var albumArtFile: File? = null if (info.artworkInfo?.artwork != null) { @@ -193,11 +193,10 @@ class TagWriter { } else if (deletedArtwork) { deleteAlbumArt(context, info.artworkInfo!!.albumId) } - cacheFiles - } catch (e: Exception) { - e.printStackTrace() - listOf() + }.onFailure { + it.printStackTrace() } + cacheFiles } } } \ No newline at end of file From de14e7268941368e318b1b418369d8c3ff12c429 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 28 Nov 2021 12:17:20 +0530 Subject: [PATCH 17/30] [Cleanup] Removed redundant API 21(Lollipop) or lower version checks as the minimum SDK version is 21 --- .../retromusic/LanguageContextWrapper.java | 12 ++------- .../activities/base/AbsThemeActivity.kt | 3 +-- .../bugreport/model/DeviceInfo.java | 11 ++++---- .../retromusic/service/MusicService.java | 7 ++--- .../notification/PlayingNotificationImpl.kt | 22 +++++++--------- .../monkey/retromusic/util/ImageUtil.java | 5 +--- .../name/monkey/retromusic/util/SAFUtil.java | 2 +- .../retromusic/views/CircularImageView.java | 4 +-- .../views/StatusBarMarginFrameLayout.java | 4 +-- .../code/name/monkey/appthemehelper/ATH.kt | 26 +++++++++---------- .../appthemehelper/util/VersionUtils.kt | 8 ------ 11 files changed, 36 insertions(+), 68 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java index 564fa56c4..2e8852664 100644 --- a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java +++ b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java @@ -29,18 +29,10 @@ public class LanguageContextWrapper extends ContextWrapper { LocaleList localeList = new LocaleList(newLocale); LocaleList.setDefault(localeList); configuration.setLocales(localeList); - - context = context.createConfigurationContext(configuration); - - } else if (VersionUtils.INSTANCE.hasLollipop()) { - configuration.setLocale(newLocale); - context = context.createConfigurationContext(configuration); - } else { - configuration.locale = newLocale; - res.updateConfiguration(configuration, res.getDisplayMetrics()); + configuration.setLocale(newLocale); } - + context = context.createConfigurationContext(configuration); return new LanguageContextWrapper(context); } } 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 5f038e88a..4d72254b9 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 @@ -118,12 +118,11 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { if (statusBar != null) { when { VersionUtils.hasMarshmallow() -> statusBar.setBackgroundColor(color) - VersionUtils.hasLollipop() -> statusBar.setBackgroundColor( + else -> statusBar.setBackgroundColor( ColorUtil.darkenColor( color ) ) - else -> statusBar.setBackgroundColor(color) } } else { when { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java index 036cc4da6..9ccd67422 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java @@ -7,6 +7,7 @@ import android.content.pm.PackageManager; import android.os.Build; import androidx.annotation.IntRange; +import androidx.annotation.NonNull; import java.util.Arrays; import java.util.Locale; @@ -16,19 +17,16 @@ import code.name.monkey.retromusic.util.PreferenceUtil; public class DeviceInfo { @SuppressLint("NewApi") - @SuppressWarnings("deprecation") private final String[] abis = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - ? Build.SUPPORTED_ABIS - : new String[] {Build.CPU_ABI, Build.CPU_ABI2}; + Build.SUPPORTED_ABIS; @SuppressLint("NewApi") private final String[] abis32Bits = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? Build.SUPPORTED_32_BIT_ABIS : null; + Build.SUPPORTED_32_BIT_ABIS; @SuppressLint("NewApi") private final String[] abis64Bits = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? Build.SUPPORTED_64_BIT_ABIS : null; + Build.SUPPORTED_64_BIT_ABIS; private final String baseTheme; @@ -138,6 +136,7 @@ public class DeviceInfo { + "\n"; } + @NonNull @Override public String toString() { return "App version: " diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 332e85e7c..9ede65f91 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -836,8 +836,7 @@ public class MusicService extends MediaBrowserServiceCompat // Request from an untrusted package: return an empty browser root return new BrowserRoot(AutoMediaIDHelper.MEDIA_ID_EMPTY_ROOT, null); } else { - /** - * By default return the browsable root. Treat the EXTRA_RECENT flag as a special case + /** By default return the browsable root. Treat the EXTRA_RECENT flag as a special case * and return the recent root instead. */ boolean isRecentRequest = false; @@ -1349,9 +1348,7 @@ public class MusicService extends MediaBrowserServiceCompat .putLong(MediaMetadataCompat.METADATA_KEY_YEAR, song.getYear()) .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size()); - } + metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size()); if (PreferenceUtil.INSTANCE.isAlbumArtOnLockScreen()) { final Point screenSize = RetroUtil.getScreenSize(MusicService.this); diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index b095e2b87..552c82aeb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -178,18 +178,16 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { .addAction(playPauseAction) .addAction(nextAction) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder.setStyle( - MediaStyle() - .setMediaSession(service.mediaSession.sessionToken) - .setShowActionsInCompactView(1, 2, 3) - ) - .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - if (Build.VERSION.SDK_INT <= - Build.VERSION_CODES.O && PreferenceUtil.isColoredNotification - ) { - builder.color = color - } + builder.setStyle( + MediaStyle() + .setMediaSession(service.mediaSession.sessionToken) + .setShowActionsInCompactView(1, 2, 3) + ) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + if (Build.VERSION.SDK_INT <= + Build.VERSION_CODES.O && PreferenceUtil.isColoredNotification + ) { + builder.color = color } if (stopped) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java index bcba52749..8ef4da132 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java @@ -102,10 +102,7 @@ public class ImageUtil { public static Drawable getVectorDrawable( @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { - if (Build.VERSION.SDK_INT >= 21) { - return res.getDrawable(resId, theme); - } - return VectorDrawableCompat.create(res, resId, theme); + return res.getDrawable(resId, theme); } /** Makes sure that {@code mTempBuffer} has at least length {@code size}. */ diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java index c846bc64f..71506e19c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java @@ -54,7 +54,7 @@ public class SAFUtil { public static final int REQUEST_SAF_PICK_TREE = 43; public static boolean isSAFRequired(File file) { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !file.canWrite(); + return !file.canWrite(); } public static boolean isSAFRequired(String path) { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java index 9bdf582f9..a4ccfa1f3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java @@ -209,10 +209,8 @@ public class CircularImageView extends AppCompatImageView { private void drawShadow(float shadowRadius, int shadowColor) { this.shadowRadius = shadowRadius; this.shadowColor = shadowColor; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { setLayerType(LAYER_TYPE_SOFTWARE, paintBorder); - } - paintBorder.setShadowLayer(shadowRadius, 0.0f, shadowRadius / 2, shadowColor); + paintBorder.setShadowLayer(shadowRadius, 0.0f, shadowRadius / 2, shadowColor); } private void updateShader() { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java index 6a95753f1..51c3acf80 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java @@ -40,12 +40,10 @@ public class StatusBarMarginFrameLayout extends FrameLayout { @NonNull @Override public WindowInsets onApplyWindowInsets(@NonNull WindowInsets insets) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); lp.topMargin = insets.getSystemWindowInsetTop(); lp.bottomMargin = insets.getSystemWindowInsetBottom(); setLayoutParams(lp); - } - return super.onApplyWindowInsets(insets); + return super.onApplyWindowInsets(insets); } } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt index 725782cad..0397779a0 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt @@ -91,21 +91,19 @@ object ATH { fun setTaskDescriptionColor(activity: Activity, @ColorInt color: Int) { var colorFinal = color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - // Task description requires fully opaque color - colorFinal = ColorUtil.stripAlpha(colorFinal) - // Sets color of entry in the system recents page - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - activity.setTaskDescription( - ActivityManager.TaskDescription( - activity.title as String?, - -1, - colorFinal - ) + // Task description requires fully opaque color + colorFinal = ColorUtil.stripAlpha(colorFinal) + // Sets color of entry in the system recents page + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + activity.setTaskDescription( + ActivityManager.TaskDescription( + activity.title as String?, + -1, + colorFinal ) - } else { - activity.setTaskDescription(ActivityManager.TaskDescription(activity.title as String?)) - } + ) + } else { + activity.setTaskDescription(ActivityManager.TaskDescription(activity.title as String?)) } } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt index 0822db409..a9a0d34d7 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt @@ -7,14 +7,6 @@ import android.os.Build */ object VersionUtils { - - /** - * @return true if device is running API >= 21 - */ - fun hasLollipop(): Boolean { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - } - /** * @return true if device is running API >= 23 */ From cbc29b553cbee2c8ed2734e713b97eebae330eee Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 28 Nov 2021 12:35:07 +0530 Subject: [PATCH 18/30] [Cleanup] Removed unused Classes --- .../retromusic/PeekingLinearLayoutManager.kt | 46 ------ .../retromusic/adapter/TranslatorsAdapter.kt | 66 -------- .../adapter/song/PlaylistSongAdapter.kt | 62 -------- .../misc/AppBarStateChangeListener.kt | 59 ------- .../retromusic/state/NowPlayingPanelState.kt | 8 - .../monkey/retromusic/util/RippleUtils.java | 147 ------------------ .../bottom_navigation_item_background.xml | 5 - ...bottom_navigation_item_background_mask.xml | 19 --- .../bottom_navigation_item_colors.xml | 5 - .../res/layout-sw600dp/item_list_no_image.xml | 64 -------- .../main/res/layout/activity_main_content.xml | 27 ---- .../main/res/layout/dialog_edit_lyrics.xml | 39 ----- .../main/res/layout/item_list_no_image.xml | 49 ------ 13 files changed, 596 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/PeekingLinearLayoutManager.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/TranslatorsAdapter.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/AppBarStateChangeListener.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/state/NowPlayingPanelState.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java delete mode 100644 app/src/main/res/drawable/bottom_navigation_item_background.xml delete mode 100644 app/src/main/res/drawable/bottom_navigation_item_background_mask.xml delete mode 100644 app/src/main/res/drawable/bottom_navigation_item_colors.xml delete mode 100644 app/src/main/res/layout-sw600dp/item_list_no_image.xml delete mode 100644 app/src/main/res/layout/activity_main_content.xml delete mode 100644 app/src/main/res/layout/dialog_edit_lyrics.xml delete mode 100644 app/src/main/res/layout/item_list_no_image.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/PeekingLinearLayoutManager.kt b/app/src/main/java/code/name/monkey/retromusic/PeekingLinearLayoutManager.kt deleted file mode 100644 index a7961ffd3..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/PeekingLinearLayoutManager.kt +++ /dev/null @@ -1,46 +0,0 @@ -package code.name.monkey.retromusic - -import android.content.Context -import android.util.AttributeSet -import android.view.ViewGroup -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView - -class PeekingLinearLayoutManager : LinearLayoutManager { - @JvmOverloads - constructor( - context: Context?, - @RecyclerView.Orientation orientation: Int = RecyclerView.VERTICAL, - reverseLayout: Boolean = false - ) : super(context, orientation, reverseLayout) - - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super( - context, - attrs, - defStyleAttr, - defStyleRes - ) - - override fun generateDefaultLayoutParams() = - scaledLayoutParams(super.generateDefaultLayoutParams()) - - override fun generateLayoutParams(lp: ViewGroup.LayoutParams?) = - scaledLayoutParams(super.generateLayoutParams(lp)) - - override fun generateLayoutParams(c: Context?, attrs: AttributeSet?) = - scaledLayoutParams(super.generateLayoutParams(c, attrs)) - - private fun scaledLayoutParams(layoutParams: RecyclerView.LayoutParams) = - layoutParams.apply { - when (orientation) { - HORIZONTAL -> width = (horizontalSpace * ratio).toInt() - VERTICAL -> height = (verticalSpace * ratio).toInt() - } - } - - private val horizontalSpace get() = width - paddingStart - paddingEnd - - private val verticalSpace get() = height - paddingTop - paddingBottom - - private val ratio = 0.8f // change to 0.7f for 70% -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/TranslatorsAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/TranslatorsAdapter.kt deleted file mode 100644 index 9630c25c4..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/TranslatorsAdapter.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2020 Hemanth Savarla. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - */ -package code.name.monkey.retromusic.adapter - -import android.app.Activity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.model.Contributor -import code.name.monkey.retromusic.util.RetroUtil -import code.name.monkey.retromusic.views.RetroShapeableImageView - -class TranslatorsAdapter( - private var contributors: List -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - return ViewHolder( - LayoutInflater.from(parent.context).inflate( - R.layout.item_contributor, - parent, - false - ) - ) - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val contributor = contributors[position] - holder.bindData(contributor) - holder.itemView.setOnClickListener { - RetroUtil.openUrl(it?.context as Activity, contributors[position].link) - } - } - - override fun getItemCount(): Int { - return contributors.size - } - - inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val title: TextView = itemView.findViewById(R.id.title) - val text: TextView = itemView.findViewById(R.id.text) - val image: RetroShapeableImageView = itemView.findViewById(R.id.icon) - - internal fun bindData(contributor: Contributor) { - title.text = contributor.name - text.text = contributor.summary - image.hide() - } - } -} 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 deleted file mode 100644 index 8f077d8ad..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2020 Hemanth Savarla. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - */ -package code.name.monkey.retromusic.adapter.song - -import android.view.MenuItem -import android.view.View -import androidx.fragment.app.FragmentActivity -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.db.PlaylistEntity -import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.dialogs.RemoveSongFromPlaylistDialog -import code.name.monkey.retromusic.interfaces.ICabHolder -import code.name.monkey.retromusic.model.Song - -class PlaylistSongAdapter( - private val playlist: PlaylistEntity, - activity: FragmentActivity, - dataSet: MutableList, - itemLayoutRes: Int, - iCabHolder: ICabHolder? -) : SongAdapter(activity, dataSet, itemLayoutRes, iCabHolder) { - - init { - this.setMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection) - } - - override fun createViewHolder(view: View): SongAdapter.ViewHolder { - return ViewHolder(view) - } - - open inner class ViewHolder(itemView: View) : SongAdapter.ViewHolder(itemView) { - - override var songMenuRes: Int - get() = R.menu.menu_item_playlist_song - set(value) { - super.songMenuRes = value - } - - override fun onSongMenuItemClick(item: MenuItem): Boolean { - when (item.itemId) { - R.id.action_remove_from_playlist -> { - RemoveSongFromPlaylistDialog.create(song.toSongEntity(playlist.playListId)) - .show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST") - return true - } - } - return super.onSongMenuItemClick(item) - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/AppBarStateChangeListener.kt b/app/src/main/java/code/name/monkey/retromusic/misc/AppBarStateChangeListener.kt deleted file mode 100644 index 6d57337f3..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/AppBarStateChangeListener.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc - -import com.google.android.material.appbar.AppBarLayout -import kotlin.math.abs - -/** - * @author Hemanth S (h4h13). - * https://stackoverflow.com/a/33891727 - */ - -abstract class AppBarStateChangeListener : AppBarLayout.OnOffsetChangedListener { - - private var mCurrentState = State.IDLE - - override fun onOffsetChanged(appBarLayout: AppBarLayout, i: Int) { - when { - i == 0 -> { - if (mCurrentState != State.EXPANDED) { - onStateChanged(appBarLayout, State.EXPANDED) - } - mCurrentState = State.EXPANDED - } - abs(i) >= appBarLayout.totalScrollRange -> { - if (mCurrentState != State.COLLAPSED) { - onStateChanged(appBarLayout, State.COLLAPSED) - } - mCurrentState = State.COLLAPSED - } - else -> { - if (mCurrentState != State.IDLE) { - onStateChanged(appBarLayout, State.IDLE) - } - mCurrentState = State.IDLE - } - } - } - - abstract fun onStateChanged(appBarLayout: AppBarLayout, state: State) - - enum class State { - EXPANDED, - COLLAPSED, - IDLE - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/state/NowPlayingPanelState.kt b/app/src/main/java/code/name/monkey/retromusic/state/NowPlayingPanelState.kt deleted file mode 100644 index b142f1436..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/state/NowPlayingPanelState.kt +++ /dev/null @@ -1,8 +0,0 @@ -package code.name.monkey.retromusic.state - -enum class NowPlayingPanelState { - EXPAND, - COLLAPSED_WITH, - COLLAPSED_WITHOUT, - HIDE, -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java deleted file mode 100644 index 335e46bac..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java +++ /dev/null @@ -1,147 +0,0 @@ -package code.name.monkey.retromusic.util; - -import android.annotation.TargetApi; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.os.Build; -import android.util.StateSet; - -import androidx.annotation.ColorInt; -import androidx.annotation.Nullable; -import androidx.core.graphics.ColorUtils; - -public class RippleUtils { - public static final boolean USE_FRAMEWORK_RIPPLE = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; - private static final int[] PRESSED_STATE_SET = { - android.R.attr.state_pressed, - }; - private static final int[] HOVERED_FOCUSED_STATE_SET = { - android.R.attr.state_hovered, android.R.attr.state_focused, - }; - private static final int[] FOCUSED_STATE_SET = { - android.R.attr.state_focused, - }; - private static final int[] HOVERED_STATE_SET = { - android.R.attr.state_hovered, - }; - - private static final int[] SELECTED_PRESSED_STATE_SET = { - android.R.attr.state_selected, android.R.attr.state_pressed, - }; - private static final int[] SELECTED_HOVERED_FOCUSED_STATE_SET = { - android.R.attr.state_selected, android.R.attr.state_hovered, android.R.attr.state_focused, - }; - private static final int[] SELECTED_FOCUSED_STATE_SET = { - android.R.attr.state_selected, android.R.attr.state_focused, - }; - private static final int[] SELECTED_HOVERED_STATE_SET = { - android.R.attr.state_selected, android.R.attr.state_hovered, - }; - private static final int[] SELECTED_STATE_SET = { - android.R.attr.state_selected, - }; - - private static final int[] ENABLED_PRESSED_STATE_SET = { - android.R.attr.state_enabled, android.R.attr.state_pressed - }; - - public static ColorStateList convertToRippleDrawableColor(@Nullable ColorStateList rippleColor) { - if (USE_FRAMEWORK_RIPPLE) { - int size = 2; - - final int[][] states = new int[size][]; - final int[] colors = new int[size]; - int i = 0; - - // Ideally we would define a different composite color for each state, but that causes the - // ripple animation to abort prematurely. - // So we only allow two base states: selected, and non-selected. For each base state, we only - // base the ripple composite on its pressed state. - - // Selected base state. - states[i] = SELECTED_STATE_SET; - colors[i] = getColorForState(rippleColor, SELECTED_PRESSED_STATE_SET); - i++; - - // Non-selected base state. - states[i] = StateSet.NOTHING; - colors[i] = getColorForState(rippleColor, PRESSED_STATE_SET); - i++; - - return new ColorStateList(states, colors); - } else { - int size = 10; - - final int[][] states = new int[size][]; - final int[] colors = new int[size]; - int i = 0; - - states[i] = SELECTED_PRESSED_STATE_SET; - colors[i] = getColorForState(rippleColor, SELECTED_PRESSED_STATE_SET); - i++; - - states[i] = SELECTED_HOVERED_FOCUSED_STATE_SET; - colors[i] = getColorForState(rippleColor, SELECTED_HOVERED_FOCUSED_STATE_SET); - i++; - - states[i] = SELECTED_FOCUSED_STATE_SET; - colors[i] = getColorForState(rippleColor, SELECTED_FOCUSED_STATE_SET); - i++; - - states[i] = SELECTED_HOVERED_STATE_SET; - colors[i] = getColorForState(rippleColor, SELECTED_HOVERED_STATE_SET); - i++; - - // Checked state. - states[i] = SELECTED_STATE_SET; - colors[i] = Color.TRANSPARENT; - i++; - - states[i] = PRESSED_STATE_SET; - colors[i] = getColorForState(rippleColor, PRESSED_STATE_SET); - i++; - - states[i] = HOVERED_FOCUSED_STATE_SET; - colors[i] = getColorForState(rippleColor, HOVERED_FOCUSED_STATE_SET); - i++; - - states[i] = FOCUSED_STATE_SET; - colors[i] = getColorForState(rippleColor, FOCUSED_STATE_SET); - i++; - - states[i] = HOVERED_STATE_SET; - colors[i] = getColorForState(rippleColor, HOVERED_STATE_SET); - i++; - - // Default state. - states[i] = StateSet.NOTHING; - colors[i] = Color.TRANSPARENT; - i++; - - return new ColorStateList(states, colors); - } - } - - @ColorInt - private static int getColorForState(@Nullable ColorStateList rippleColor, int[] state) { - int color; - if (rippleColor != null) { - color = rippleColor.getColorForState(state, rippleColor.getDefaultColor()); - } else { - color = Color.TRANSPARENT; - } - return USE_FRAMEWORK_RIPPLE ? doubleAlpha(color) : color; - } - - /** - * On API 21+, the framework composites a ripple color onto the display at about 50% opacity. - * Since we are providing precise ripple colors, cancel that out by doubling the opacity here. - */ - @ColorInt - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private static int doubleAlpha(@ColorInt int color) { - int alpha = Math.min(2 * Color.alpha(color), 255); - return ColorUtils.setAlphaComponent(color, alpha); - } -} diff --git a/app/src/main/res/drawable/bottom_navigation_item_background.xml b/app/src/main/res/drawable/bottom_navigation_item_background.xml deleted file mode 100644 index ff7e81356..000000000 --- a/app/src/main/res/drawable/bottom_navigation_item_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_navigation_item_background_mask.xml b/app/src/main/res/drawable/bottom_navigation_item_background_mask.xml deleted file mode 100644 index fd8fd117c..000000000 --- a/app/src/main/res/drawable/bottom_navigation_item_background_mask.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_navigation_item_colors.xml b/app/src/main/res/drawable/bottom_navigation_item_colors.xml deleted file mode 100644 index 330a0f98a..000000000 --- a/app/src/main/res/drawable/bottom_navigation_item_colors.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp/item_list_no_image.xml b/app/src/main/res/layout-sw600dp/item_list_no_image.xml deleted file mode 100644 index dfcbafa8b..000000000 --- a/app/src/main/res/layout-sw600dp/item_list_no_image.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml deleted file mode 100644 index cb62073d6..000000000 --- a/app/src/main/res/layout/activity_main_content.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_edit_lyrics.xml b/app/src/main/res/layout/dialog_edit_lyrics.xml deleted file mode 100644 index ac767afe3..000000000 --- a/app/src/main/res/layout/dialog_edit_lyrics.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -