From e187b1391226e4ff694f2f2776a0a615791ebfd1 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 23 Nov 2021 11:17:26 +0530 Subject: [PATCH 01/14] Fixed File deletion on A10 --- .../code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt | 4 ++-- .../main/java/code/name/monkey/retromusic/util/MusicUtil.kt | 2 +- 2 files changed, 3 insertions(+), 3 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 dc643849..ddc586b9 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 @@ -90,9 +90,9 @@ class DeleteSongsDialog : DialogFragment() { if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) { MusicPlayerRemote.playNextSong() } - if (VersionUtils.hasQ()) { + if (VersionUtils.hasR()) { dismiss() - MusicUtil.deleteTracksQ(requireActivity(), songs) + MusicUtil.deleteTracksR(requireActivity(), songs) reloadTabs() } else if (!SAFUtil.isSAFRequiredForSongs(songs)) { CoroutineScope(Dispatchers.IO).launch { 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 d9a66e21..67198aae 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 @@ -525,7 +525,7 @@ object MusicUtil : KoinComponent { } @RequiresApi(Build.VERSION_CODES.R) - fun deleteTracksQ(activity: Activity, songs: List) { + fun deleteTracksR(activity: Activity, songs: List) { val pendingIntent = MediaStore.createDeleteRequest(activity.contentResolver, songs.map { getSongFileUri(it.id) }) From 5db550ccd2ead3e7a994f2013b668caf038f9886 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 23 Nov 2021 11:20:07 +0530 Subject: [PATCH 02/14] Enable Material You by default on A12 --- .../java/code/name/monkey/retromusic/util/PreferenceUtil.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 8a8e3041..35dd5c41 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 @@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat import androidx.core.content.edit import androidx.preference.PreferenceManager import androidx.viewpager.widget.ViewPager +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.* import code.name.monkey.retromusic.extensions.getIntRes import code.name.monkey.retromusic.extensions.getStringOrDefault @@ -615,5 +616,5 @@ object PreferenceUtil { .getInt(CROSS_FADE_DURATION, 0) val materialYou - get() = sharedPreferences.getBoolean(MATERIAL_YOU, false) + get() = sharedPreferences.getBoolean(MATERIAL_YOU, VersionUtils.hasS()) } From c8afb6025484ce29a909e3f125477ae551695069 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 23 Nov 2021 11:22:37 +0530 Subject: [PATCH 03/14] Material3 button styles to Permission activity --- app/src/main/res/layout/activity_permission.xml | 3 +-- app/src/main/res/layout/item_permission.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml index a58d6980..2279dd6e 100644 --- a/app/src/main/res/layout/activity_permission.xml +++ b/app/src/main/res/layout/activity_permission.xml @@ -59,14 +59,13 @@ diff --git a/app/src/main/res/layout/item_permission.xml b/app/src/main/res/layout/item_permission.xml index b4be1a71..44d92346 100644 --- a/app/src/main/res/layout/item_permission.xml +++ b/app/src/main/res/layout/item_permission.xml @@ -54,12 +54,11 @@ Date: Tue, 23 Nov 2021 11:25:28 +0530 Subject: [PATCH 04/14] Fixed Sleep Timer crash --- .../code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e454d4a6..214bef24 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 @@ -138,7 +138,7 @@ class SleepTimerDialog : DialogFragment() { } private fun makeTimerPendingIntent(flag: Int): PendingIntent? { - return PendingIntent.getService(requireActivity(), 0, makeTimerIntent(), flag) + return PendingIntent.getService(requireActivity(), 0, makeTimerIntent(), flag or PendingIntent.FLAG_IMMUTABLE) } private fun makeTimerIntent(): Intent { From 50c7d4aeb7b0e6c437e036012924a5baacec8d62 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 23 Nov 2021 11:31:50 +0530 Subject: [PATCH 05/14] Fixed Main Settings bottom insets --- .../retromusic/fragments/settings/AbsSettingsFragment.kt | 1 - .../retromusic/fragments/settings/MainSettingsFragment.kt | 6 ++++++ app/src/main/res/layout/fragment_main_settings.xml | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 94775a27..1fd169bc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -66,7 +66,6 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setDivider(ColorDrawable(Color.TRANSPARENT)) - listView.overScrollMode = View.OVER_SCROLL_NEVER // This is a workaround as CollapsingToolbarLayout consumes insets and // insets are not passed to child views // https://github.com/material-components/material-components-android/issues/1310 diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index c507a259..00935fdf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -19,15 +19,18 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentMainSettingsBinding +import code.name.monkey.retromusic.extensions.addBottomInsets import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.RetroUtil class MainSettingsFragment : Fragment(), View.OnClickListener { @@ -84,6 +87,9 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { binding.buyPremium.setTextColor(it) binding.diamondIcon.imageTintList = ColorStateList.valueOf(it) } + if (!RetroUtil.isLandscape()) { + binding.container.updatePadding(bottom = RetroUtil.getNavigationBarHeight()) + } } override fun onDestroyView() { diff --git a/app/src/main/res/layout/fragment_main_settings.xml b/app/src/main/res/layout/fragment_main_settings.xml index d538c45f..966b543d 100644 --- a/app/src/main/res/layout/fragment_main_settings.xml +++ b/app/src/main/res/layout/fragment_main_settings.xml @@ -8,6 +8,7 @@ android:transitionGroup="true"> From e0b396037437d5b6ddb96864e2d9b0a00804645f Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 23 Nov 2021 14:52:46 +0530 Subject: [PATCH 06/14] Better Edge-to-edge support & fixed some visual glitches --- .../base/AbsSlidingMusicPanelActivity.kt | 5 ++- .../tageditor/AlbumTagEditorActivity.kt | 4 ++- .../tageditor/SongTagEditorActivity.kt | 6 ++-- .../retromusic/extensions/ViewExtensions.kt | 2 +- .../retromusic/fragments/LibraryViewModel.kt | 20 +++++++---- .../fragments/about/AboutFragment.kt | 2 +- .../fragments/base/AbsRecyclerViewFragment.kt | 7 ++-- .../fragments/other/DetailListFragment.kt | 4 +-- .../fragments/other/LyricsFragment.kt | 3 +- .../fragments/queue/PlayingQueueFragment.kt | 5 +++ .../fragments/search/SearchFragment.kt | 3 ++ .../views/insets/InsetsConstraintLayout.kt | 23 ++++++++++++ .../views/insets/InsetsRecyclerView.kt | 30 ++++++++++++++++ .../res/layout-land/fragment_banner_home.xml | 4 +-- .../main/res/layout-land/fragment_home.xml | 6 ++-- .../res/layout/activity_album_tag_editor.xml | 3 +- .../res/layout/activity_song_tag_editor.xml | 5 +-- .../res/layout/fragment_album_content.xml | 4 +-- .../res/layout/fragment_artist_content.xml | 4 +-- .../main/res/layout/fragment_banner_home.xml | 4 +-- app/src/main/res/layout/fragment_folder.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 4 +-- .../res/layout/fragment_main_recycler.xml | 2 +- .../res/layout/fragment_playlist_detail.xml | 2 +- app/src/main/res/layout/fragment_search.xml | 35 +++++++------------ .../main/res/layout/fragment_user_info.xml | 6 ++-- .../name/monkey/appthemehelper/ThemeStore.kt | 2 +- 27 files changed, 124 insertions(+), 73 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsRecyclerView.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 7b456a38..abc44d4b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -129,7 +129,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { if (RetroUtil.isLandscape()) { binding.slidingPanel.drawAboveSystemBarsWithPadding(true) } - binding.fragmentContainer.addBottomInsets() chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() @@ -350,7 +349,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { binding.bottomNavigationView.translationY = 0F } binding.bottomNavigationView.bringToFront() - libraryViewModel.setFabMargin(heightOfBarWithTabs - 2 * windowInsets.safeGetBottomInsets()) + libraryViewModel.setFabMargin(dip(R.dimen.mini_player_height_expanded)) } else { println("Details") if (animate) { @@ -367,7 +366,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { dip(R.dimen.bottom_nav_height).toFloat() binding.slidingPanel.bringToFront() } - libraryViewModel.setFabMargin(heightOfBar - 2 * windowInsets.safeGetBottomInsets()) + libraryViewModel.setFabMargin(dip(R.dimen.mini_player_height)) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index 53acf609..bd6bf459 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -44,6 +44,7 @@ import code.name.monkey.retromusic.util.RetroColorUtil.getColor import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.target.ImageViewTarget import com.bumptech.glide.request.transition.Transition +import com.google.android.material.shape.MaterialShapeDrawable import org.jaudiotagger.tag.FieldKey import java.util.* @@ -101,8 +102,9 @@ class AlbumTagEditorActivity : AbsTagEditorActivity super.onCreate(savedInstanceState) setUpViews() setNoImageMode() - binding.toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) setSupportActionBar(binding.toolbar) + binding.appBarLayout.statusBarForeground = + MaterialShapeDrawable.createWithElevationOverlay(this) } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index 8571fe8b..270db658 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -237,6 +237,6 @@ data class InitialPadding( val right: Int, val bottom: Int ) -private fun recordInitialPaddingForView(view: View) = InitialPadding( +fun recordInitialPaddingForView(view: View) = InitialPadding( view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom ) 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 8a5aea2c..a021fe70 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 @@ -14,6 +14,7 @@ */ package code.name.monkey.retromusic.fragments +import android.animation.ValueAnimator import android.widget.Toast import androidx.lifecycle.* import code.name.monkey.retromusic.* @@ -42,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 { @@ -337,11 +338,18 @@ class LibraryViewModel( } fun setFabMargin(bottomMargin: Int) { - fabMargin.postValue( - // Normal Margin - DensityUtil.dip2px(App.getContext(), 16F) + - bottomMargin - ) + val currentValue = DensityUtil.dip2px(App.getContext(), 16F) + + bottomMargin + if (currentValue != fabMargin.value) { + ValueAnimator.ofInt(fabMargin.value!!, currentValue).apply { + addUpdateListener { + fabMargin.postValue( + it.animatedValue as Int + ) + } + start() + } + } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt index 3bbe5e39..dd022378 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt @@ -49,7 +49,7 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { // insets are not passed to child views // https://github.com/material-components/material-components-android/issues/1310 if (!RetroUtil.isLandscape()) { - binding.root.updatePadding(bottom = RetroUtil.getNavigationBarHeight()) + binding.aboutContent.root.updatePadding(bottom = RetroUtil.getNavigationBarHeight()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index c667b2fb..51dfccdd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -22,7 +22,6 @@ import androidx.appcompat.widget.Toolbar import androidx.core.view.doOnPreDraw import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams -import androidx.core.view.updatePadding import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.common.ATHToolbarActivity @@ -161,11 +160,9 @@ abstract class AbsRecyclerViewFragment, LM : Recycle val itemCount: Int = adapter?.itemCount ?: 0 if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) { - val height = dip(R.dimen.mini_player_height_expanded) - binding.recyclerView.updatePadding(0, 0, 0, height) + binding.recyclerView.updatePadding(bottom = dip(R.dimen.mini_player_height_expanded)) } else { - val height = dip(R.dimen.mini_player_height) - binding.recyclerView.updatePadding(0, 0, 0, height) + binding.recyclerView.updatePadding(bottom = dip(R.dimen.mini_player_height)) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt index 49f22678..b28d903c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt @@ -89,7 +89,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de override fun onChanged() { super.onChanged() val height = dipToPix(52f) - binding.recyclerView.setPadding(0, 0, 0, height.toInt()) + binding.recyclerView.updatePadding(bottom = height.toInt()) } }) } @@ -204,7 +204,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de if (RetroUtil.isTablet()) { return if (RetroUtil.isLandscape()) 6 else 4 } - return 2 + return if (RetroUtil.isLandscape()) 4 else 2 } override fun onArtist(artistId: Long, view: View) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt index 4b43f4ea..e06a7672 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt @@ -379,6 +379,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) { override fun onDestroyView() { super.onDestroyView() - (requireActivity() as MainActivity).expandPanel() + if (MusicPlayerRemote.playingQueue.isNotEmpty()) + (requireActivity() as MainActivity).expandPanel() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index 8ec96e2e..0bc6846d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt @@ -23,7 +23,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter import code.name.monkey.retromusic.databinding.FragmentPlayingQueueBinding import code.name.monkey.retromusic.extensions.accentColor @@ -172,6 +174,8 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q } playingQueueAdapter = null super.onDestroy() + if (MusicPlayerRemote.playingQueue.isNotEmpty()) + (requireActivity() as MainActivity).expandPanel() } private fun setupToolbar() { @@ -191,6 +195,7 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q findNavController().navigateUp() } setNavigationIcon(R.drawable.ic_keyboard_backspace_black) + ToolbarContentTintHelper.colorBackButton(this) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt index e9b176fc..4cd18128 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt @@ -40,6 +40,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.views.addAlpha import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup +import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.textfield.TextInputEditText import com.google.android.material.transition.MaterialSharedAxis import java.util.* @@ -96,6 +97,8 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa bottomMargin = it } }) + binding.appBarLayout.statusBarForeground = + MaterialShapeDrawable.createWithElevationOverlay(requireContext()) } private fun setupChips() { 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 new file mode 100644 index 00000000..101624be --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsConstraintLayout.kt @@ -0,0 +1,23 @@ +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, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + init { + if (!RetroUtil.isLandscape()) + drawAboveSystemBarsWithPadding() + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsRecyclerView.kt b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsRecyclerView.kt new file mode 100644 index 00000000..3f56b8f8 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsRecyclerView.kt @@ -0,0 +1,30 @@ +package code.name.monkey.retromusic.views.insets + +import android.content.Context +import android.util.AttributeSet +import androidx.annotation.Px +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding +import code.name.monkey.retromusic.util.RetroUtil + +class InsetsRecyclerView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RecyclerView(context, attrs, defStyleAttr) { + init { + if (!RetroUtil.isLandscape()) + drawAboveSystemBarsWithPadding() + } + + fun updatePadding( + @Px left: Int = paddingLeft, + @Px top: Int = paddingTop, + @Px right: Int = paddingRight, + @Px bottom: Int = paddingBottom + ) { + setPadding(left, top, right, bottom) + if (!RetroUtil.isLandscape()) + drawAboveSystemBarsWithPadding() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index 521aab72..6b8571a4 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -66,7 +66,7 @@ android:transitionGroup="true" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - - + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index f3fe8fab..2ab398e4 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -59,14 +59,12 @@ android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginStart="@dimen/toolbar_margin_horizontal" - android:layout_marginEnd="@dimen/toolbar_margin_horizontal" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" android:transitionGroup="true" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album_tag_editor.xml b/app/src/main/res/layout/activity_album_tag_editor.xml index e418b247..5a40e8ee 100755 --- a/app/src/main/res/layout/activity_album_tag_editor.xml +++ b/app/src/main/res/layout/activity_album_tag_editor.xml @@ -5,8 +5,7 @@ android:layout_height="match_parent" android:background="?attr/colorSurface" android:fitsSystemWindows="true" - android:orientation="vertical" - tools:ignore="UnusedAttribute"> + android:orientation="vertical"> @@ -20,8 +18,7 @@ style="@style/Toolbar" app:navigationIcon="@drawable/ic_keyboard_backspace_black" app:title="@string/action_tag_editor" - app:titleTextAppearance="@style/ToolbarTextAppearanceNormal" - tools:ignore="UnusedAttribute" /> + app:titleTextAppearance="@style/ToolbarTextAppearanceNormal" /> - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_artist_content.xml b/app/src/main/res/layout/fragment_artist_content.xml index 9415be12..ca171cdf 100644 --- a/app/src/main/res/layout/fragment_artist_content.xml +++ b/app/src/main/res/layout/fragment_artist_content.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index 27066559..67cf3c34 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -63,7 +63,7 @@ android:focusableInTouchMode="true" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml index 02d0b133..56b08660 100644 --- a/app/src/main/res/layout/fragment_folder.xml +++ b/app/src/main/res/layout/fragment_folder.xml @@ -77,7 +77,7 @@ tools:visibility="visible" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_recycler.xml b/app/src/main/res/layout/fragment_main_recycler.xml index cf7d9816..d3cb8564 100644 --- a/app/src/main/res/layout/fragment_main_recycler.xml +++ b/app/src/main/res/layout/fragment_main_recycler.xml @@ -38,7 +38,7 @@ - - + android:layout_height="wrap_content" + android:fitsSystemWindows="true"> @@ -30,7 +29,7 @@ - - - - + - - - - + - - + Date: Tue, 23 Nov 2021 21:30:34 +0530 Subject: [PATCH 07/14] Targeting Android 11, Android 12 foreground service restrictions causes multiple crashes --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a536de93..1bac73b8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 30 renderscriptTargetApi 29//must match target sdk and build tools vectorDrawables.useSupportLibrary = true @@ -154,7 +154,7 @@ dependencies { implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5' implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3' - implementation 'com.anjlab.android.iab.v3:library:2.0.1' + implementation 'com.anjlab.android.iab.v3:library:2.0.3' implementation 'com.r0adkll:slidableactivity:2.1.0' implementation 'com.heinrichreimersoftware:material-intro:2.0.0' implementation 'com.github.dhaval2404:imagepicker:1.7.1' From 4fbcb5d77fb6d4efa33a75a568a803e355ed801d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 24 Nov 2021 00:37:16 +0530 Subject: [PATCH 08/14] Added file selection from system file picker for restore --- .../fragments/backup/BackupFragment.kt | 60 ++++++++++++------- .../fragments/backup/BackupViewModel.kt | 5 +- .../monkey/retromusic/helper/BackupHelper.kt | 31 +++++++--- app/src/main/res/layout/fragment_backup.xml | 36 +++-------- 4 files changed, 74 insertions(+), 58 deletions(-) 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 2415f812..3b887056 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 @@ -1,10 +1,12 @@ package code.name.monkey.retromusic.fragments.backup +import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.view.MenuItem import android.view.View import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import androidx.fragment.app.Fragment @@ -16,9 +18,11 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.backup.BackupAdapter import code.name.monkey.retromusic.databinding.FragmentBackupBinding import code.name.monkey.retromusic.helper.BackupHelper +import code.name.monkey.retromusic.helper.sanitize import code.name.monkey.retromusic.util.BackupUtil import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.input.input +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.io.File @@ -42,25 +46,16 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC backupAdapter?.swapDataset(listOf()) } backupViewModel.loadBackups() - setupButtons() - } - - private fun setupButtons() { - binding.createBackup.setOnClickListener { - MaterialDialog(requireContext()).show { - title(res = R.string.action_rename) - input(prefill = System.currentTimeMillis().toString()) { _, text -> - // Text submitted with the action button - lifecycleScope.launch { - BackupHelper.createBackup(requireContext(), text.toString()) - backupViewModel.loadBackups() - } - } - positiveButton(android.R.string.ok) - negativeButton(R.string.action_cancel) - setTitle(R.string.title_new_backup) + val openFilePicker = registerForActivityResult(ActivityResultContracts.OpenDocument()) { + lifecycleScope.launch(Dispatchers.IO) { + backupViewModel.restoreBackup(requireActivity(), requireContext().contentResolver.openInputStream(it)) } - + } + binding.createBackup.setOnClickListener { + showCreateBackupDialog() + } + binding.restoreBackup.setOnClickListener { + openFilePicker.launch(arrayOf("application/octet-stream")) } } @@ -76,7 +71,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC private fun checkIsEmpty() { val isEmpty = backupAdapter!!.itemCount == 0 - binding.empty.isVisible = isEmpty + binding.emptyText.isVisible = isEmpty binding.backupTitle.isVisible = !isEmpty binding.backupRecyclerview.isVisible = !isEmpty } @@ -88,13 +83,31 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC } } + @SuppressLint("CheckResult") + private fun showCreateBackupDialog() { + MaterialDialog(requireContext()).show { + cornerRadius(res = R.dimen.m3_card_corner_radius) + title(res = R.string.action_rename) + input(prefill = System.currentTimeMillis().toString()) { _, text -> + // Text submitted with the action button + lifecycleScope.launch { + BackupHelper.createBackup(requireContext(), text.sanitize()) + backupViewModel.loadBackups() + } + } + positiveButton(android.R.string.ok) + negativeButton(R.string.action_cancel) + setTitle(R.string.title_new_backup) + } + } + override fun onBackupClicked(file: File) { AlertDialog.Builder(requireContext()) .setTitle(R.string.restore) .setMessage(R.string.restore_message) .setPositiveButton(R.string.restore) { _, _ -> lifecycleScope.launch { - backupViewModel.restoreBackup(requireActivity(), file) + backupViewModel.restoreBackup(requireActivity(), file.inputStream()) } } .setNegativeButton(android.R.string.cancel, null) @@ -102,6 +115,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC .show() } + @SuppressLint("CheckResult") override fun onBackupMenuClicked(file: File, menuItem: MenuItem): Boolean { when (menuItem.itemId) { R.id.action_delete -> { @@ -119,7 +133,11 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC } R.id.action_share -> { activity?.startActivity( - Intent.createChooser(BackupUtil.createShareFileIntent(file, requireContext()), null)) + Intent.createChooser( + BackupUtil.createShareFileIntent(file, requireContext()), + null + ) + ) return true } R.id.action_rename -> { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index d2194749..920e70c9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -9,6 +9,7 @@ import code.name.monkey.retromusic.helper.BackupHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File +import java.io.InputStream import kotlin.system.exitProcess @@ -24,8 +25,8 @@ class BackupViewModel : ViewModel() { } } - suspend fun restoreBackup(activity: Activity, file: File) { - BackupHelper.restoreBackup(activity, file) + suspend fun restoreBackup(activity: Activity, inputStream: InputStream?) { + BackupHelper.restoreBackup(activity, inputStream) withContext(Dispatchers.Main) { val intent = Intent( activity, 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 02eff857..e72dd9f1 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 @@ -15,7 +15,7 @@ import java.util.zip.ZipOutputStream object BackupHelper { suspend fun createBackup(context: Context, name: String) { val backupFile = - File(backupRootPath + name + APPEND_EXTENSION) + File(backupRootPath + File.separator + name + APPEND_EXTENSION) if (backupFile.parentFile?.exists() != true) { backupFile.parentFile?.mkdirs() } @@ -28,7 +28,7 @@ object BackupHelper { } } - private fun zipAll(zipItems: List, backupFile: File) { + private suspend fun zipAll(zipItems: List, backupFile: File) { try { ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out -> for (zipItem in zipItems) { @@ -36,13 +36,17 @@ object BackupHelper { BufferedInputStream(fi).use { origin -> val entry = ZipEntry(zipItem.zipPath) out.putNextEntry(entry) - origin.copyTo(out, 1024) + origin.copyTo(out) } } } } } catch (exception: FileNotFoundException) { - Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT).show() + exception.printStackTrace() + withContext(Dispatchers.Main) { + Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT) + .show() + } } } @@ -72,9 +76,9 @@ object BackupHelper { } } - suspend fun restoreBackup(context: Context, file: File) { + suspend fun restoreBackup(context: Context, inputStream: InputStream?) { withContext(Dispatchers.IO) { - ZipInputStream(FileInputStream(file)).use { + ZipInputStream(inputStream).use { var entry = it.nextEntry while (entry != null) { if (entry.isDatabaseEntry()) restoreDatabase(context, it, entry) @@ -156,4 +160,17 @@ object BackupHelper { } } -data class ZipItem(val filePath: String, val zipPath: String) \ No newline at end of file +data class ZipItem(val filePath: String, val zipPath: String) + +fun CharSequence.sanitize(): String { + return toString().replace("/", "_") + .replace(":", "_") + .replace("*", "_") + .replace("?", "_") + .replace("\"", "_") + .replace("<", "_") + .replace(">", "_") + .replace("|", "_") + .replace("\\", "_") + .replace("&", "_") +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_backup.xml b/app/src/main/res/layout/fragment_backup.xml index c24a3399..9e1a3c9f 100644 --- a/app/src/main/res/layout/fragment_backup.xml +++ b/app/src/main/res/layout/fragment_backup.xml @@ -3,8 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> + android:layout_height="match_parent"> - - - - - - + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> \ No newline at end of file From 16f76bc12de1b4077889346c2f89843462ead906 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 24 Nov 2021 01:39:15 +0530 Subject: [PATCH 09/14] Updated Kotlin & Room --- app/build.gradle | 2 +- .../java/code/name/monkey/retromusic/repository/Repository.kt | 1 + build.gradle | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1bac73b8..ea332561 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -110,7 +110,7 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" - def room_version = "2.3.0" + def room_version = '2.4.0-beta02' implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index d8652bc3..8c1454b6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -72,6 +72,7 @@ interface Repository { suspend fun genresHome(): Home suspend fun playlists(): Home suspend fun homeSections(): List + @ExperimentalCoroutinesApi suspend fun homeSectionsFlow(): Flow>> suspend fun playlist(playlistId: Long): Playlist suspend fun fetchPlaylistWithSongs(): List diff --git a/build.gradle b/build.gradle index b9557bed..04b4fbcd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.5.31' + ext.kotlin_version = '1.6.0' repositories { mavenCentral() google() From 94a84b0b241d78f2c50264e7eb0101856226a3a0 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 24 Nov 2021 19:53:19 +0530 Subject: [PATCH 10/14] Circular fab when Material You is enabled --- app/src/main/res/values-v31/styles.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml index f8479c49..b5c3c71c 100644 --- a/app/src/main/res/values-v31/styles.xml +++ b/app/src/main/res/values-v31/styles.xml @@ -8,6 +8,9 @@ @color/transparent @color/transparent false + + @style/Widget.MaterialComponents.FloatingActionButton + @drawable/popup_background From 976d9d53cc704d27f0a37c896bd8681279ce71f6 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 24 Nov 2021 20:58:35 +0530 Subject: [PATCH 11/14] Code Cleanup --- .../retromusic/fragments/backup/BackupFragment.kt | 1 - app/src/main/res/layout/fragment_backup.xml | 15 --------------- 2 files changed, 16 deletions(-) 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 3b887056..11e8a7f0 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 @@ -71,7 +71,6 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC private fun checkIsEmpty() { val isEmpty = backupAdapter!!.itemCount == 0 - binding.emptyText.isVisible = isEmpty binding.backupTitle.isVisible = !isEmpty binding.backupRecyclerview.isVisible = !isEmpty } diff --git a/app/src/main/res/layout/fragment_backup.xml b/app/src/main/res/layout/fragment_backup.xml index 9e1a3c9f..fa22e3f2 100644 --- a/app/src/main/res/layout/fragment_backup.xml +++ b/app/src/main/res/layout/fragment_backup.xml @@ -1,7 +1,6 @@ @@ -59,18 +58,4 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/backup_title" /> - - - \ No newline at end of file From 6f7e97ac09b4210072d43bccd4d4b5f130a49ebb Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 25 Nov 2021 01:45:34 +0530 Subject: [PATCH 12/14] Fixed Bottom Toolbar not clickable in now playing when Shuffle is clicked --- .../activities/base/AbsSlidingMusicPanelActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index abc44d4b..fea75a46 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -234,7 +234,9 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { super.onQueueChanged() // Mini player should be hidden in Playing Queue // it may pop up if hideBottomSheet is called - if (currentFragment(R.id.fragment_container) !is PlayingQueueFragment) { + if (currentFragment(R.id.fragment_container) !is PlayingQueueFragment && + bottomSheetBehavior.state != STATE_EXPANDED + ) { hideBottomSheet(MusicPlayerRemote.playingQueue.isEmpty()) } } From d080a5e944c477f31f8accc425527ab09942cabb Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 25 Nov 2021 10:39:41 +0530 Subject: [PATCH 13/14] Updated versionCode & versionName --- app/build.gradle | 4 ++-- app/src/main/assets/retro-changelog.html | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ea332561..5f306e7b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 10543 - versionName '5.4.0 ' + "_" + getDate() + versionCode 10544 + versionName '5.4.1 ' + "_" + getDate() buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 74e2f6e1..c77c13f4 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -64,7 +64,7 @@
Date
-

v5.1.0Beta

+

v5.4.0Beta

What's New

  • Material You
  • @@ -73,6 +73,7 @@

Improved

    +
  • Improved Animations
  • Improved Crossfade
From d09f4b7ef4c5b23d226b66267bc8d0afb43ba6a3 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 25 Nov 2021 11:51:42 +0530 Subject: [PATCH 14/14] Fix Build Error: Escaping Apostrophe --- app/src/main/res/values-fr-rFR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a0dc33db..55955511 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -241,7 +241,7 @@ Aucun morceau Normal Paroles normales - %s N'est pas répertorié dans le stockage des médias.]]> + %s N\'est pas répertorié dans le stockage des médias.]]> Non jouée récemment Rien à scanner. Rien à afficher