From 5e08b889c143f73c2ed1a9dae6c0d1c725b493d0 Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Mon, 13 Dec 2021 10:53:40 +0530
Subject: [PATCH 01/29] Fixed some crashes
- Import playlist crash
- Create new backup crash
---
.../monkey/retromusic/dialogs/ImportPlaylistDialog.kt | 7 ++++++-
.../name/monkey/retromusic/extensions/CursorExtensions.kt | 8 ++++----
.../retromusic/fragments/settings/MainSettingsFragment.kt | 1 +
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/ImportPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/ImportPlaylistDialog.kt
index 1429aa5a1..058bdfe74 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/ImportPlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/ImportPlaylistDialog.kt
@@ -22,6 +22,7 @@ import code.name.monkey.retromusic.extensions.colorButtons
import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.fragments.LibraryViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
+import java.lang.Exception
class ImportPlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel()
@@ -30,7 +31,11 @@ class ImportPlaylistDialog : DialogFragment() {
return materialDialog(R.string.import_playlist)
.setMessage(R.string.import_playlist_message)
.setPositiveButton(R.string.import_label) { _, _ ->
- libraryViewModel.importPlaylists()
+ try {
+ libraryViewModel.importPlaylists()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
}
.create()
.colorButtons()
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/CursorExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/CursorExtensions.kt
index a72eb155c..531c2e0bb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/CursorExtensions.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/CursorExtensions.kt
@@ -20,7 +20,7 @@ import android.database.Cursor
internal fun Cursor.getInt(columnName: String): Int {
try {
- return this.getInt(this.getColumnIndex(columnName))
+ return getInt(getColumnIndexOrThrow(columnName))
} catch (ex: Throwable) {
throw IllegalStateException("invalid column $columnName", ex)
}
@@ -28,7 +28,7 @@ internal fun Cursor.getInt(columnName: String): Int {
internal fun Cursor.getLong(columnName: String): Long {
try {
- return this.getLong(this.getColumnIndex(columnName))
+ return getLong(getColumnIndexOrThrow(columnName))
} catch (ex: Throwable) {
throw IllegalStateException("invalid column $columnName", ex)
}
@@ -36,7 +36,7 @@ internal fun Cursor.getLong(columnName: String): Long {
internal fun Cursor.getString(columnName: String): String {
try {
- return this.getString(this.getColumnIndex(columnName))
+ return getString(getColumnIndexOrThrow(columnName))
} catch (ex: Throwable) {
throw IllegalStateException("invalid column $columnName", ex)
}
@@ -44,7 +44,7 @@ internal fun Cursor.getString(columnName: String): String {
internal fun Cursor.getStringOrNull(columnName: String): String? {
try {
- return this.getString(this.getColumnIndex(columnName))
+ return getString(getColumnIndexOrThrow(columnName))
} catch (ex: Throwable) {
throw IllegalStateException("invalid column $columnName", ex)
}
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 2a1d5fd22..5742d2950 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
@@ -99,5 +99,6 @@ class MainSettingsFragment : Fragment(), View.OnClickListener {
override fun onDestroyView() {
super.onDestroyView()
_binding = null
+ ViewCompat.setOnApplyWindowInsetsListener(requireActivity().window.decorView, null)
}
}
From aaabd8a20a66417ef233bb94b117b60231ef724c Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Mon, 13 Dec 2021 12:01:26 +0530
Subject: [PATCH 02/29] Set overScrollMode to never for API lower than S
---
.../retromusic/fragments/settings/AbsSettingsFragment.kt | 6 ++++++
.../retromusic/fragments/settings/MainSettingsFragment.kt | 1 +
app/src/main/res/layout-land/activity_album_tag_editor.xml | 1 +
app/src/main/res/layout-land/fragment_album_details.xml | 1 +
app/src/main/res/layout-land/fragment_artist_details.xml | 1 +
app/src/main/res/layout-land/fragment_banner_home.xml | 1 +
app/src/main/res/layout-land/fragment_home.xml | 1 +
app/src/main/res/layout-sw600dp/fragment_playing_queue.xml | 1 +
app/src/main/res/layout/activity_album_tag_editor.xml | 3 ++-
app/src/main/res/layout/activity_bug_report.xml | 1 +
app/src/main/res/layout/activity_donation.xml | 1 +
app/src/main/res/layout/activity_song_tag_editor.xml | 1 +
app/src/main/res/layout/fragment_about.xml | 1 +
app/src/main/res/layout/fragment_album_content.xml | 1 +
app/src/main/res/layout/fragment_album_details.xml | 1 +
app/src/main/res/layout/fragment_artist_content.xml | 1 +
app/src/main/res/layout/fragment_artist_details.xml | 1 +
app/src/main/res/layout/fragment_banner_home.xml | 1 +
app/src/main/res/layout/fragment_classic_player.xml | 3 ++-
app/src/main/res/layout/fragment_folder.xml | 1 +
app/src/main/res/layout/fragment_gradient_player.xml | 1 +
app/src/main/res/layout/fragment_home.xml | 1 +
.../res/layout/fragment_main_activity_recycler_view.xml | 1 +
app/src/main/res/layout/fragment_main_recycler.xml | 3 ++-
app/src/main/res/layout/fragment_main_settings.xml | 3 ++-
app/src/main/res/layout/fragment_player_album_cover.xml | 1 +
app/src/main/res/layout/fragment_playing_queue.xml | 1 +
app/src/main/res/layout/fragment_playlist_detail.xml | 1 +
app/src/main/res/layout/fragment_search.xml | 4 +++-
app/src/main/res/layout/home_content.xml | 3 ++-
app/src/main/res/layout/section_recycler_view.xml | 1 +
app/src/main/res/values-v31/donottranslate.xml | 1 +
app/src/main/res/values/donottranslate.xml | 1 +
33 files changed, 45 insertions(+), 6 deletions(-)
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 ab3987a37..87960912e 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
@@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.settings
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
+import android.os.Build
import android.os.Bundle
import android.view.View
import android.widget.Toast
@@ -25,6 +26,7 @@ import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
+import code.name.monkey.retromusic.BuildConfig
import code.name.monkey.retromusic.activities.OnThemeChangedListener
import code.name.monkey.retromusic.extensions.safeGetBottomInsets
import code.name.monkey.retromusic.preferences.*
@@ -67,6 +69,10 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setDivider(ColorDrawable(Color.TRANSPARENT))
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ listView.overScrollMode = View.OVER_SCROLL_NEVER
+ }
+
// CollapsingToolbarLayout consumes insets and insets are not passed to child views
// So we get insets from decor view
// 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 5742d2950..722b654ac 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
@@ -15,6 +15,7 @@
package code.name.monkey.retromusic.fragments.settings
import android.content.res.ColorStateList
+import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/res/layout-land/activity_album_tag_editor.xml b/app/src/main/res/layout-land/activity_album_tag_editor.xml
index 43b99d6aa..e474eec0b 100644
--- a/app/src/main/res/layout-land/activity_album_tag_editor.xml
+++ b/app/src/main/res/layout-land/activity_album_tag_editor.xml
@@ -53,6 +53,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
+ android:overScrollMode="@integer/overScrollMode"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml
index 2ab398e4c..7d68937a5 100644
--- a/app/src/main/res/layout-land/fragment_home.xml
+++ b/app/src/main/res/layout-land/fragment_home.xml
@@ -61,6 +61,7 @@
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
+ android:overScrollMode="@integer/overScrollMode"
android:transitionGroup="true"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
diff --git a/app/src/main/res/layout-sw600dp/fragment_playing_queue.xml b/app/src/main/res/layout-sw600dp/fragment_playing_queue.xml
index bdd18ae3c..7dae61e77 100644
--- a/app/src/main/res/layout-sw600dp/fragment_playing_queue.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_playing_queue.xml
@@ -42,6 +42,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
+ android:overScrollMode="@integer/overScrollMode"
android:paddingBottom="96dp"
android:scrollbars="none"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
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 5a40e8ee1..e3c4e3745 100755
--- a/app/src/main/res/layout/activity_album_tag_editor.xml
+++ b/app/src/main/res/layout/activity_album_tag_editor.xml
@@ -26,7 +26,8 @@
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
+ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
+ android:overScrollMode="@integer/overScrollMode">
+ android:overScrollMode="@integer/overScrollMode"
+ tools:listitem="@layout/item_list" />
diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml
index 56b086604..6521a4a0a 100644
--- a/app/src/main/res/layout/fragment_folder.xml
+++ b/app/src/main/res/layout/fragment_folder.xml
@@ -82,6 +82,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
+ android:overScrollMode="@integer/overScrollMode"
android:scrollbars="none"
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_gradient_player.xml b/app/src/main/res/layout/fragment_gradient_player.xml
index ea2e8b1e5..e9aad0649 100644
--- a/app/src/main/res/layout/fragment_gradient_player.xml
+++ b/app/src/main/res/layout/fragment_gradient_player.xml
@@ -150,6 +150,7 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:background="?attr/colorSurface"
+ android:overScrollMode="@integer/overScrollMode"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 618ed3995..1c8cf07d8 100755
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -61,6 +61,7 @@
android:layout_height="wrap_content"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
+ android:overScrollMode="@integer/overScrollMode"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
+ android:overScrollMode="@integer/overScrollMode"
+ android:transitionGroup="true" />
+ android:layout_height="wrap_content"
+ android:overScrollMode="@integer/overScrollMode">
diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml
index b3667fda7..70452fb5a 100644
--- a/app/src/main/res/layout/fragment_search.xml
+++ b/app/src/main/res/layout/fragment_search.xml
@@ -73,7 +73,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
- android:scrollbarSize="0dp">
+ android:scrollbars="none"
+ android:overScrollMode="@integer/overScrollMode">
diff --git a/app/src/main/res/layout/home_content.xml b/app/src/main/res/layout/home_content.xml
index 10f38720b..133954bcf 100644
--- a/app/src/main/res/layout/home_content.xml
+++ b/app/src/main/res/layout/home_content.xml
@@ -66,7 +66,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
- tools:itemCount="10"
+ android:overScrollMode="@integer/overScrollMode"
+ tools:itemCount="10"
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/item_album_card"
tools:spanCount="3" />
diff --git a/app/src/main/res/layout/section_recycler_view.xml b/app/src/main/res/layout/section_recycler_view.xml
index f554b90dd..5840f9afc 100644
--- a/app/src/main/res/layout/section_recycler_view.xml
+++ b/app/src/main/res/layout/section_recycler_view.xml
@@ -41,6 +41,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
+ android:overScrollMode="@integer/overScrollMode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clickable_area"
diff --git a/app/src/main/res/values-v31/donottranslate.xml b/app/src/main/res/values-v31/donottranslate.xml
index f4981725e..f39fb68c1 100644
--- a/app/src/main/res/values-v31/donottranslate.xml
+++ b/app/src/main/res/values-v31/donottranslate.xml
@@ -4,4 +4,5 @@
true
false
+ 0
\ No newline at end of file
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index eff1e1c7d..8b950ef3e 100755
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -28,4 +28,5 @@
false
true
+ 2
\ No newline at end of file
From 305b0753654733d60a3586da7694f2d3bcbeced3 Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Mon, 13 Dec 2021 15:01:44 +0530
Subject: [PATCH 03/29] [Tag Editor] Changed JAudioTagger to
https://github.com/Kaned1as/jaudiotagger - We should be able to read and
write to opus files - We should be able to set artwork to Flac and other
files
---
app/build.gradle | 2 +-
.../retromusic/activities/tageditor/TagWriter.kt | 14 +++++++-------
.../glide/audiocover/AudioFileCoverUtils.java | 3 ++-
3 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 8c2e9fda6..9fa7b981c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -153,7 +153,7 @@ dependencies {
implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0'
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
- implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3'
+ implementation 'com.github.Adonai:jaudiotagger:2.3.14'
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'
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 4fcea20f2..9bc20f100 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
@@ -21,8 +21,8 @@ import org.jaudiotagger.audio.exceptions.CannotWriteException
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException
import org.jaudiotagger.tag.TagException
+import org.jaudiotagger.tag.images.AndroidArtwork
import org.jaudiotagger.tag.images.Artwork
-import org.jaudiotagger.tag.images.ArtworkFactory
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
@@ -58,11 +58,11 @@ class TagWriter {
try {
albumArtFile = createAlbumArtFile(context).canonicalFile
info.artworkInfo.artwork.compress(
- Bitmap.CompressFormat.PNG,
- 0,
+ Bitmap.CompressFormat.JPEG,
+ 100,
FileOutputStream(albumArtFile)
)
- artwork = ArtworkFactory.createArtworkFromFile(albumArtFile)
+ artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
} catch (e: IOException) {
e.printStackTrace()
}
@@ -131,11 +131,11 @@ class TagWriter {
try {
albumArtFile = createAlbumArtFile(context).canonicalFile
info.artworkInfo.artwork.compress(
- Bitmap.CompressFormat.PNG,
- 0,
+ Bitmap.CompressFormat.JPEG,
+ 100,
FileOutputStream(albumArtFile)
)
- artwork = ArtworkFactory.createArtworkFromFile(albumArtFile)
+ artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
} catch (e: IOException) {
e.printStackTrace()
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java
index 5ffe040cc..5c7fa7aad 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java
@@ -14,6 +14,7 @@
package code.name.monkey.retromusic.glide.audiocover;
+import org.jaudiotagger.audio.exceptions.CannotReadException;
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
import org.jaudiotagger.audio.mp3.MP3File;
@@ -45,7 +46,7 @@ public class AudioFileCoverUtils {
}
}
// If there are any exceptions, we ignore them and continue to the other fallback method
- } catch (ReadOnlyFileException | InvalidAudioFrameException | TagException | IOException ignored) {
+ } catch (ReadOnlyFileException | InvalidAudioFrameException | TagException | IOException | CannotReadException ignored) {
}
// Method 2: look for album art in external files
From 4211ed1a9be2b22c60c1ac5148a41438470ad9cc Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Mon, 13 Dec 2021 16:06:48 +0530
Subject: [PATCH 04/29] [Tag Editor] Added artwork chooser for Song tag editor
---
.../tageditor/AbsTagEditorActivity.kt | 21 +-
.../tageditor/AlbumTagEditorActivity.kt | 70 ++---
.../tageditor/SongTagEditorActivity.kt | 90 +++++-
.../layout-land/activity_album_tag_editor.xml | 28 +-
.../layout-land/activity_song_tag_editor.xml | 291 ++++++++++++++++++
.../res/layout/activity_song_tag_editor.xml | 23 ++
6 files changed, 452 insertions(+), 71 deletions(-)
create mode 100644 app/src/main/res/layout-land/activity_song_tag_editor.xml
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
index cee65c013..cadbe840b 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
@@ -34,7 +34,6 @@ import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding
import code.name.monkey.appthemehelper.ThemeStore
-import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
@@ -60,14 +59,13 @@ import java.io.File
import java.util.*
abstract class AbsTagEditorActivity : AbsBaseActivity() {
- abstract val editorImage: ImageView?
+ abstract val editorImage: ImageView
val repository by inject()
lateinit var saveFab: MaterialButton
protected var id: Long = 0
private set
private var paletteColorPrimary: Int = 0
- private var isInNoImageMode: Boolean = false
private var songPaths: List? = null
private var savedSongPaths: List? = null
private val currentSongPath: String? = null
@@ -239,7 +237,7 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() {
getString(R.string.web_search),
getString(R.string.remove_cover)
)
- editorImage?.setOnClickListener { show }
+ editorImage.setOnClickListener { show }
}
private fun startImagePicker() {
@@ -306,17 +304,6 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() {
return super.onOptionsItemSelected(item)
}
- protected fun setNoImageMode() {
- isInNoImageMode = true
- setColors(
- intent.getIntExtra(
- EXTRA_PALETTE,
- ATHUtil.resolveColor(this, R.attr.colorPrimary)
- )
- )
- }
-
-
protected fun dataChanged() {
showFab()
}
@@ -335,9 +322,9 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() {
protected fun setImageBitmap(bitmap: Bitmap?, bgColor: Int) {
if (bitmap == null) {
- editorImage?.setImageResource(drawable.default_audio_art)
+ editorImage.setImageResource(drawable.default_audio_art)
} else {
- editorImage?.setImageBitmap(bitmap)
+ editorImage.setImageBitmap(bitmap)
}
setColors(bgColor)
}
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 18b73ed29..79a954055 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
@@ -63,41 +63,6 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(binding.editorImage) {
- override fun onResourceReady(
- resource: BitmapPaletteWrapper,
- transition: Transition?
- ) {
- getColor(resource.palette, Color.TRANSPARENT)
- albumArtBitmap = resource.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) }
- setImageBitmap(
- albumArtBitmap,
- getColor(
- resource.palette,
- ATHUtil.resolveColor(
- this@AlbumTagEditorActivity,
- R.attr.defaultFooterColor
- )
- )
- )
- deleteAlbumArt = false
- dataChanged()
- setResult(Activity.RESULT_OK)
- }
-
- override fun onLoadFailed(errorDrawable: Drawable?) {
- super.onLoadFailed(errorDrawable)
- Toast.makeText(this@AlbumTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
- .show()
- }
-
- override fun setResource(resource: BitmapPaletteWrapper?) {}
- })
- }
-
private var albumArtBitmap: Bitmap? = null
private var deleteAlbumArt: Boolean = false
@@ -171,6 +136,41 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(binding.editorImage) {
+ override fun onResourceReady(
+ resource: BitmapPaletteWrapper,
+ transition: Transition?
+ ) {
+ getColor(resource.palette, Color.TRANSPARENT)
+ albumArtBitmap = resource.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) }
+ setImageBitmap(
+ albumArtBitmap,
+ getColor(
+ resource.palette,
+ ATHUtil.resolveColor(
+ this@AlbumTagEditorActivity,
+ R.attr.defaultFooterColor
+ )
+ )
+ )
+ deleteAlbumArt = false
+ dataChanged()
+ setResult(Activity.RESULT_OK)
+ }
+
+ override fun onLoadFailed(errorDrawable: Drawable?) {
+ super.onLoadFailed(errorDrawable)
+ Toast.makeText(this@AlbumTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
+ .show()
+ }
+
+ override fun setResource(resource: BitmapPaletteWrapper?) {}
+ })
+ }
+
override fun save() {
val fieldKeyValueMap = EnumMap(FieldKey::class.java)
fieldKeyValueMap[FieldKey.ALBUM] = binding.albumText.text.toString()
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt
index 69c4c7cdc..cca36e9e0 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt
@@ -15,17 +15,33 @@
package code.name.monkey.retromusic.activities.tageditor
import android.annotation.SuppressLint
+import android.app.Activity
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.graphics.Color
+import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.widget.ImageView
+import android.widget.Toast
+import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding
import code.name.monkey.retromusic.extensions.appHandleColor
import code.name.monkey.retromusic.extensions.setTint
+import code.name.monkey.retromusic.glide.GlideApp
+import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
+import code.name.monkey.retromusic.model.ArtworkInfo
import code.name.monkey.retromusic.repository.SongRepository
+import code.name.monkey.retromusic.util.ImageUtil
import code.name.monkey.retromusic.util.MusicUtil
+import code.name.monkey.retromusic.util.RetroColorUtil
+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 org.koin.android.ext.android.inject
@@ -39,12 +55,14 @@ class SongTagEditorActivity : AbsTagEditorActivity
private val songRepository by inject()
+ private var albumArtBitmap: Bitmap? = null
+ private var deleteAlbumArt: Boolean = false
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpViews()
- setNoImageMode()
setSupportActionBar(binding.toolbar)
- binding.appBarLayout.statusBarForeground =
+ binding.appBarLayout?.statusBarForeground =
MaterialShapeDrawable.createWithElevationOverlay(this)
}
@@ -90,11 +108,30 @@ class SongTagEditorActivity : AbsTagEditorActivity
println(songTitle + songYear)
}
- override fun loadCurrentImage() {}
+ override fun loadCurrentImage() {
+ val bitmap = albumArt
+ setImageBitmap(
+ bitmap,
+ RetroColorUtil.getColor(
+ RetroColorUtil.generatePalette(bitmap),
+ ATHUtil.resolveColor(this, R.attr.defaultFooterColor)
+ )
+ )
+ deleteAlbumArt = false
+ }
- override fun searchImageOnWeb() {}
+ override fun searchImageOnWeb() {
+ searchWebFor(binding.songText.text.toString(), binding.artistText.text.toString())
+ }
- override fun deleteImage() {}
+ override fun deleteImage() {
+ setImageBitmap(
+ BitmapFactory.decodeResource(resources, R.drawable.default_audio_art),
+ ATHUtil.resolveColor(this, R.attr.defaultFooterColor)
+ )
+ deleteAlbumArt = true
+ dataChanged()
+ }
override fun save() {
val fieldKeyValueMap = EnumMap(FieldKey::class.java)
@@ -107,7 +144,12 @@ class SongTagEditorActivity : AbsTagEditorActivity
fieldKeyValueMap[FieldKey.LYRICS] = binding.lyricsText.text.toString()
fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = binding.albumArtistText.text.toString()
fieldKeyValueMap[FieldKey.COMPOSER] = binding.songComposerText.text.toString()
- writeValuesToFiles(fieldKeyValueMap, null)
+ writeValuesToFiles(fieldKeyValueMap, when {
+ deleteAlbumArt -> ArtworkInfo(id, null)
+ albumArtBitmap == null -> null
+ else -> ArtworkInfo(id, albumArtBitmap!!)
+ }
+ )
}
override fun getSongPaths(): List = listOf(songRepository.song(id).data)
@@ -115,6 +157,38 @@ class SongTagEditorActivity : AbsTagEditorActivity
override fun getSongUris(): List = listOf(MusicUtil.getSongFileUri(id))
override fun loadImageFromFile(selectedFile: Uri?) {
+ GlideApp.with(this@SongTagEditorActivity).asBitmapPalette().load(selectedFile)
+ .diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)
+ .into(object : ImageViewTarget(binding.editorImage) {
+ override fun onResourceReady(
+ resource: BitmapPaletteWrapper,
+ transition: Transition?
+ ) {
+ RetroColorUtil.getColor(resource.palette, Color.TRANSPARENT)
+ albumArtBitmap = resource.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) }
+ setImageBitmap(
+ albumArtBitmap,
+ RetroColorUtil.getColor(
+ resource.palette,
+ ATHUtil.resolveColor(
+ this@SongTagEditorActivity,
+ R.attr.defaultFooterColor
+ )
+ )
+ )
+ deleteAlbumArt = false
+ dataChanged()
+ setResult(Activity.RESULT_OK)
+ }
+
+ override fun onLoadFailed(errorDrawable: Drawable?) {
+ super.onLoadFailed(errorDrawable)
+ Toast.makeText(this@SongTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
+ .show()
+ }
+
+ override fun setResource(resource: BitmapPaletteWrapper?) {}
+ })
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
@@ -131,6 +205,6 @@ class SongTagEditorActivity : AbsTagEditorActivity
val TAG: String = SongTagEditorActivity::class.java.simpleName
}
- override val editorImage: ImageView?
- get() = null
+ override val editorImage: ImageView
+ get() = binding.editorImage
}
diff --git a/app/src/main/res/layout-land/activity_album_tag_editor.xml b/app/src/main/res/layout-land/activity_album_tag_editor.xml
index e474eec0b..18b98d1dc 100644
--- a/app/src/main/res/layout-land/activity_album_tag_editor.xml
+++ b/app/src/main/res/layout-land/activity_album_tag_editor.xml
@@ -3,7 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="?attr/colorSurface">
+ android:background="?attr/colorSurface"
+ android:fitsSystemWindows="true">
-
+ android:layout_height="match_parent">
+ app:cardElevation="8dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintDimensionRatio="1:1"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/imageContainer"
+ app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml
index cf6bea679..a6abea9ec 100755
--- a/app/src/main/res/layout/activity_song_tag_editor.xml
+++ b/app/src/main/res/layout/activity_song_tag_editor.xml
@@ -2,6 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="true"
android:focusable="true"
android:focusableInTouchMode="true">
@@ -33,6 +34,28 @@
android:orientation="vertical"
android:padding="16dp">
+
+
+
+
+
+
Date: Mon, 13 Dec 2021 17:49:31 +0530
Subject: [PATCH 05/29] Clearing SearchView also clears the search results
---
.../monkey/retromusic/fragments/search/SearchFragment.kt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
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 4cd181288..9e909e4d0 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
@@ -70,7 +70,10 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
setupRecyclerView()
binding.voiceSearch.setOnClickListener { startMicSearch() }
- binding.clearText.setOnClickListener { binding.searchView.clearText() }
+ binding.clearText.setOnClickListener {
+ binding.searchView.clearText()
+ searchAdapter.swapDataSet(listOf())
+ }
binding.searchView.apply {
addTextChangedListener(this@SearchFragment)
focusAndShowKeyboard()
From 87eb3c08c3cb0309a00d1b62e2800a581e17caee Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Tue, 14 Dec 2021 19:34:26 +0530
Subject: [PATCH 06/29] [Now Playing: Circle] Added Circular rotating album
cover to Circle theme
---
.../player/circle/CirclePlayerFragment.kt | 32 +++++++++++++++---
.../layout-land/fragment_circle_player.xml | 25 ++++++++++++++
.../res/layout/fragment_circle_player.xml | 33 +++++++++++++++----
3 files changed, 79 insertions(+), 11 deletions(-)
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 0d934398f..70a420d02 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
@@ -23,6 +23,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.widget.SeekBar
import androidx.appcompat.widget.Toolbar
@@ -38,6 +39,8 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
+import code.name.monkey.retromusic.glide.GlideApp
+import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
@@ -69,6 +72,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private var _binding: FragmentCirclePlayerBinding? = null
private val binding get() = _binding!!
+ private var rotateAnimator: ObjectAnimator? = null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
@@ -144,6 +149,17 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
}
+ private fun setupRotateAnimation() {
+ rotateAnimator = ObjectAnimator.ofFloat(binding.albumCover, View.ROTATION, 360F).apply {
+ interpolator = LinearInterpolator()
+ repeatCount = Animation.INFINITE
+ duration = 10000
+ if (MusicPlayerRemote.isPlaying){
+ start()
+ }
+ }
+ }
+
override fun onResume() {
super.onResume()
progressViewUpdateHelper.start()
@@ -153,10 +169,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
audioVolumeObserver?.register(AudioManager.STREAM_MUSIC, this)
val audioManager = audioManager
- if (audioManager != null) {
- binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
- binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
- }
+ binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
+ binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
binding.volumeSeekBar.setOnSeekArcChangeListener(this)
}
@@ -191,6 +205,11 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
override fun onPlayStateChanged() {
updatePlayPauseDrawableState()
+ if (MusicPlayerRemote.isPlaying) {
+ if (rotateAnimator?.isStarted == true) rotateAnimator?.resume() else rotateAnimator?.start()
+ } else {
+ rotateAnimator?.pause()
+ }
}
override fun onPlayingMetaChanged() {
@@ -202,6 +221,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
super.onServiceConnected()
updateSong()
updatePlayPauseDrawableState()
+ setupRotateAnimation()
}
private fun updateSong() {
@@ -215,6 +235,10 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
} else {
binding.songInfo.hide()
}
+ GlideApp.with(this)
+ .load(RetroGlideExtension.getSongModel(song))
+ .songCoverOptions(song)
+ .into(binding.albumCover)
}
private fun updatePlayPauseDrawableState() {
diff --git a/app/src/main/res/layout-land/fragment_circle_player.xml b/app/src/main/res/layout-land/fragment_circle_player.xml
index 07d734c6c..a13ac76fe 100644
--- a/app/src/main/res/layout-land/fragment_circle_player.xml
+++ b/app/src/main/res/layout-land/fragment_circle_player.xml
@@ -54,6 +54,31 @@
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black"
tools:layout_editor_absoluteY="24dp" />
+
+
+
-
-
+
+
+
+
+ app:layout_constraintStart_toStartOf="@+id/volumeSeekBar"
+ app:layout_constraintTop_toBottomOf="@+id/album_cover" />
Date: Tue, 14 Dec 2021 22:48:48 +0530
Subject: [PATCH 07/29] [Now Playing: Circle] Replaced SeekArc with Circular
Seekbar
[Now Playing: Circle] Replaced SeekArc with Circular Seekbar
---
app/build.gradle | 1 +
app/src/debug/res/values/donottranslate.xml | 1 +
app/src/main/AndroidManifest.xml | 2 +-
.../player/circle/CirclePlayerFragment.kt | 44 ++++++------
.../layout-land/fragment_circle_player.xml | 68 ++++++++-----------
.../res/layout/fragment_circle_player.xml | 64 ++++++++---------
app/src/main/res/values/donottranslate.xml | 1 +
7 files changed, 91 insertions(+), 90 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 9fa7b981c..1c5c52c52 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -160,5 +160,6 @@ dependencies {
implementation 'com.github.dhaval2404:imagepicker:2.1'
implementation 'me.zhanghai.android.fastscroll:library:1.1.7'
implementation 'cat.ereza:customactivityoncrash:2.3.0'
+ implementation 'me.tankery.lib:circularSeekBar:1.3.2'
debugImplementation 'com.github.amitshekhariitbhu:Android-Debug-Database:1.0.6'
}
\ No newline at end of file
diff --git a/app/src/debug/res/values/donottranslate.xml b/app/src/debug/res/values/donottranslate.xml
index 879226a34..7d3f0ee62 100644
--- a/app/src/debug/res/values/donottranslate.xml
+++ b/app/src/debug/res/values/donottranslate.xml
@@ -1,4 +1,5 @@
true
+ false
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 377342a16..20108f3d1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -22,7 +22,7 @@
-
+ android:padding="10dp"
+ app:layout_constraintBottom_toBottomOf="@id/volumeSeekBar"
+ app:layout_constraintEnd_toEndOf="@id/volumeSeekBar"
+ app:layout_constraintStart_toStartOf="@id/volumeSeekBar"
+ app:layout_constraintTop_toTopOf="@id/volumeSeekBar">
-
+
-
+
+
+
-
+
-
+
-
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/volumeSeekBar" />
true
2
+ true
\ No newline at end of file
From 4d31c4ccc3f0a9a6ecfe0c571b1de57337a61534 Mon Sep 17 00:00:00 2001
From: Prathamesh More
Date: Tue, 14 Dec 2021 23:18:42 +0530
Subject: [PATCH 08/29] Updated Open Source Licenses
---
app/src/main/assets/oldindex.html | 38 +++++++++------
.../retromusic/activities/LicenseActivity.kt | 31 ++++++------
.../retromusic/activities/WhatsNewActivity.kt | 12 +++--
.../monkey/retromusic/helper/M3UWriter.kt | 48 +++++++++----------
app/src/main/res/layout/activity_license.xml | 19 ++++----
5 files changed, 78 insertions(+), 70 deletions(-)
diff --git a/app/src/main/assets/oldindex.html b/app/src/main/assets/oldindex.html
index 367da632a..7f6f8d8f8 100644
--- a/app/src/main/assets/oldindex.html
+++ b/app/src/main/assets/oldindex.html
@@ -24,40 +24,48 @@
padding-top: 8px;
}
-
-
-
Phonograph by
Karim Abou Zeid
- Material Dialogs and Cab
- by Aidan Michael Follestad
AOSP Support Librariesby AOSP contributors
+ title="AOSP Support Libraries">AOSP Support Libraries by AOSP contributors
Glide by Sam Judd
Retrofit by Square team
+ OkHttp by Square team
+Koin by Arnaud Giuliani
+ Material Dialogs and Cab
+ by Aidan Michael Follestad
Material Contextual Action Bar by Aidan Michael Follestad
- OkHttp by Square team
-
- CircleImageView by Henning Dodenhof
-
- MaterialProgressBar by Zhang Hai
Android In-App Billing v3 Library by
Henning Dodenhof
Advanced RecyclerView by Haruki Hasegawa
- Android-ObservableScrollView by Soichiro
- Kashima
+Custom Activity on Crash by Eduard Ereza Martínez
+
+NanoHttpd by NanoHttpd Team
+Circular Seekbar by Tankery
+jAudioTagger by Kanedias
+Android Fast Scroll by Zhang Hai
+Image Picker by Dhaval Patel
+Material Intro by Jan Heinrich Reimer
+Slidr by Drew Heavner
Icons by Austin Andrews
Material Design City Wallpaper
-