diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 000000000..7d8c77dc1
Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ
diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
index 42ad2a134..cf414c371 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
@@ -79,7 +79,7 @@ class MainActivity : AppCompatActivity() {
}
}
- override fun onNewIntent(intent: Intent?) {
+ override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
startIntentAction(intent)
}
diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt
index 3adfa6089..da251d8df 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt
@@ -146,8 +146,7 @@ class MainFragment :
// Emulate the elevated bottom sheet style.
background =
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
- fillColor = context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = context.getDimen(R.dimen.elevation_normal)
+ fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
}
// Apply bar insets for the queue's RecyclerView to use.
setOnApplyWindowInsetsListener { v, insets ->
@@ -277,7 +276,7 @@ class MainFragment :
// Reduce playback sheet elevation as it expands. This involves both updating the
// shadow elevation for older versions, and fading out the background drawable
// containing the elevation overlay.
- binding.playbackSheet.translationZ = elevationNormal * outPlaybackRatio
+ binding.playbackSheet.elevation = elevationNormal * outPlaybackRatio
playbackSheetBehavior.sheetBackgroundDrawable.alpha = (outPlaybackRatio * 255).toInt()
// Fade out the playback bar as the panel expands.
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/list/PlaylistDetailListAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/list/PlaylistDetailListAdapter.kt
index ca8a0657b..334f39703 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/list/PlaylistDetailListAdapter.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/list/PlaylistDetailListAdapter.kt
@@ -30,7 +30,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.IntegerTable
-import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.ItemEditHeaderBinding
import org.oxycblt.auxio.databinding.ItemEditableSongBinding
import org.oxycblt.auxio.list.EditableListListener
@@ -46,7 +45,6 @@ import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.util.context
import org.oxycblt.auxio.util.getAttrColorCompat
-import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.inflater
import org.oxycblt.auxio.util.logD
@@ -232,8 +230,7 @@ private constructor(private val binding: ItemEditableSongBinding) :
override val delete = binding.background
override val background =
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
- fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = binding.context.getDimen(R.dimen.elevation_normal)
+ fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
alpha = 0
}
diff --git a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt
index 792755dc7..75712201c 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt
@@ -461,7 +461,9 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
companion object {
val SIZING_CORNER_RADII =
arrayOf(
- R.dimen.size_corners_small, R.dimen.size_corners_small, R.dimen.size_corners_medium)
+ R.dimen.size_corners_small,
+ R.dimen.size_corners_medium,
+ R.dimen.size_corners_mid_large)
val SIZING_ICON_SIZE = arrayOf(R.dimen.size_icon_small, R.dimen.size_icon_medium, null)
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt
index 5c8c35ede..63b68925d 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-
+
package org.oxycblt.auxio.music.service
import android.content.Context
@@ -141,10 +141,8 @@ constructor(
is MediaSessionUID.Category -> return uid.toMediaItem(context)
is MediaSessionUID.Single ->
musicRepository.find(uid.uid)?.let { musicRepository.find(it.uid) }
-
is MediaSessionUID.Joined ->
musicRepository.find(uid.childUid)?.let { musicRepository.find(it.uid) }
-
null -> null
}
?: return null
@@ -179,40 +177,32 @@ constructor(
when (mediaSessionUID) {
MediaSessionUID.Category.ROOT ->
MediaSessionUID.Category.IMPORTANT.map { it.toMediaItem(context) }
-
MediaSessionUID.Category.SONGS ->
listSettings.songSort.songs(deviceLibrary.songs).map {
it.toMediaItem(context, null)
}
-
MediaSessionUID.Category.ALBUMS ->
listSettings.albumSort.albums(deviceLibrary.albums).map {
it.toMediaItem(context)
}
-
MediaSessionUID.Category.ARTISTS ->
listSettings.artistSort.artists(deviceLibrary.artists).map {
it.toMediaItem(context)
}
-
MediaSessionUID.Category.GENRES ->
listSettings.genreSort.genres(deviceLibrary.genres).map {
it.toMediaItem(context)
}
-
MediaSessionUID.Category.PLAYLISTS ->
userLibrary.playlists.map { it.toMediaItem(context) }
}
}
-
is MediaSessionUID.Single -> {
getChildMediaItems(mediaSessionUID.uid)
}
-
is MediaSessionUID.Joined -> {
getChildMediaItems(mediaSessionUID.childUid)
}
-
null -> {
return null
}
@@ -225,24 +215,20 @@ constructor(
val songs = listSettings.albumSongSort.songs(item.songs)
songs.map { it.toMediaItem(context, item) }
}
-
is Artist -> {
val albums = ARTIST_ALBUMS_SORT.albums(item.explicitAlbums + item.implicitAlbums)
val songs = listSettings.artistSongSort.songs(item.songs)
albums.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, item) }
}
-
is Genre -> {
val artists = GENRE_ARTISTS_SORT.artists(item.artists)
val songs = listSettings.genreSongSort.songs(item.songs)
artists.map { it.toMediaItem(context) } +
- songs.map { it.toMediaItem(context, null) }
+ songs.map { it.toMediaItem(context, null) }
}
-
is Playlist -> {
item.songs.map { it.toMediaItem(context, item) }
}
-
is Song,
null -> return null
}
@@ -339,8 +325,7 @@ constructor(
deviceLibrary.albums,
deviceLibrary.artists,
deviceLibrary.genres,
- userLibrary.playlists
- )
+ userLibrary.playlists)
val results = searchEngine.search(items, query)
for (entry in searchSubscribers.entries) {
if (entry.value == query) {
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt
index e21aebb63..7d0dfb1f9 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt
@@ -76,6 +76,10 @@ class PlaybackBarFragment : ViewBindingFragment() {
binding.playbackProgressBar.trackColor =
context.getColorCompat(R.color.sel_track).defaultColor
+ // binding.playbackProgressBar.wavelength = 48
+ // binding.playbackProgressBar.speed = 20
+ // binding.playbackProgressBar.amplitude = 5
+
// -- VIEWMODEL SETUP ---
collectImmediately(playbackModel.song, ::updateSong)
collectImmediately(playbackModel.isPlaying, ::updatePlaying)
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBottomSheetBehavior.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBottomSheetBehavior.kt
index a2ed51882..37934c0e1 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBottomSheetBehavior.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBottomSheetBehavior.kt
@@ -29,7 +29,6 @@ import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat
-import org.oxycblt.auxio.util.getDimen
/**
* The [BaseBottomSheetBehavior] for the playback bottom sheet. This bottom sheet
@@ -40,8 +39,8 @@ class PlaybackBottomSheetBehavior(context: Context, attributeSet: Attr
BaseBottomSheetBehavior(context, attributeSet) {
val sheetBackgroundDrawable =
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
- fillColor = context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = context.getDimen(R.dimen.elevation_normal)
+ fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerLow)
+ setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
}
init {
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt
index 350ec3daa..9bd554a59 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt
@@ -26,7 +26,6 @@ import androidx.core.view.isInvisible
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable
-import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.ItemEditableSongBinding
import org.oxycblt.auxio.list.EditClickListListener
import org.oxycblt.auxio.list.adapter.FlexibleListAdapter
@@ -37,7 +36,6 @@ import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.music.resolveNames
import org.oxycblt.auxio.util.context
import org.oxycblt.auxio.util.getAttrColorCompat
-import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.inflater
import org.oxycblt.auxio.util.logD
@@ -120,8 +118,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemEditableS
override val delete = binding.background
override val background =
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
- fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = binding.context.getDimen(R.dimen.elevation_normal) * 5
+ fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHighest)
alpha = 0
}
@@ -142,8 +139,8 @@ class QueueSongViewHolder private constructor(private val binding: ItemEditableS
LayerDrawable(
arrayOf(
MaterialShapeDrawable.createWithElevationOverlay(binding.context).apply {
- fillColor = binding.context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = binding.context.getDimen(R.dimen.elevation_normal)
+ fillColor =
+ binding.context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
},
background))
}
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueBottomSheetBehavior.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueBottomSheetBehavior.kt
index ddf70b00d..24f2cfd23 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueBottomSheetBehavior.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueBottomSheetBehavior.kt
@@ -28,7 +28,6 @@ import com.google.android.material.shape.MaterialShapeDrawable
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.BaseBottomSheetBehavior
import org.oxycblt.auxio.util.getAttrColorCompat
-import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.getDimenPixels
import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat
import org.oxycblt.auxio.util.systemBarInsetsCompat
@@ -65,8 +64,8 @@ class QueueBottomSheetBehavior(context: Context, attributeSet: Attribu
override fun createBackground(context: Context) =
MaterialShapeDrawable.createWithElevationOverlay(context).apply {
// The queue sheet's background is a static elevated background.
- fillColor = context.getAttrColorCompat(MR.attr.colorSurface)
- elevation = context.getDimen(R.dimen.elevation_normal)
+ fillColor = context.getAttrColorCompat(MR.attr.colorSurfaceContainerHigh)
+ setCornerSize(context.resources.getDimension(R.dimen.size_corners_mid_large))
}
override fun applyWindowInsets(child: View, insets: WindowInsets): WindowInsets {
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt
index 65caa80af..dfb87061e 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt
@@ -255,7 +255,7 @@ constructor(
mediaSession.setCustomLayout(layout)
}
- override fun invalidate(ids: Map){
+ override fun invalidate(ids: Map) {
for (id in ids) {
mediaSession.notifyChildrenChanged(id.key, id.value, null)
}
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/ui/AnimatedMaterialButton.kt b/app/src/main/java/org/oxycblt/auxio/playback/ui/AnimatedMaterialButton.kt
index 14d4f78a9..87380055d 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/ui/AnimatedMaterialButton.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/ui/AnimatedMaterialButton.kt
@@ -21,6 +21,7 @@ package org.oxycblt.auxio.playback.ui
import android.animation.ValueAnimator
import android.content.Context
import android.util.AttributeSet
+import android.view.animation.AnimationUtils
import com.google.android.material.button.MaterialButton
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.RippleFixMaterialButton
@@ -64,6 +65,9 @@ class AnimatedMaterialButton : RippleFixMaterialButton {
animator =
ValueAnimator.ofFloat(currentCornerRadiusRatio, targetRadius).apply {
duration = context.getInteger(R.integer.anim_fade_enter_duration).toLong()
+ interpolator =
+ AnimationUtils.loadInterpolator(
+ context, android.R.interpolator.fast_out_slow_in)
addUpdateListener { updateCornerRadiusRatio(animatedValue as Float) }
start()
}
diff --git a/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt b/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt
index e823bb338..ec2d6ac99 100644
--- a/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt
+++ b/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt
@@ -1,2 +1,19 @@
+/*
+ * Copyright (c) 2024 Auxio Project
+ * Tasker.kt is part of Auxio.
+ *
+ * This program 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 program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
package org.oxycblt.auxio.tasker
-
diff --git a/app/src/main/res/drawable/ic_pause_48.xml b/app/src/main/res/drawable/ic_pause_48.xml
new file mode 100644
index 000000000..76e9b9f6e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_pause_48.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_play_48.xml b/app/src/main/res/drawable/ic_play_48.xml
new file mode 100644
index 000000000..d163cd960
--- /dev/null
+++ b/app/src/main/res/drawable/ic_play_48.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_skip_next_40.xml b/app/src/main/res/drawable/ic_skip_next_40.xml
new file mode 100644
index 000000000..28ca513fc
--- /dev/null
+++ b/app/src/main/res/drawable/ic_skip_next_40.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_skip_prev_40.xml b/app/src/main/res/drawable/ic_skip_prev_40.xml
new file mode 100644
index 000000000..d21330db7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_skip_prev_40.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_splash_anim.xml b/app/src/main/res/drawable/ic_splash_anim.xml
index b2b705d9f..b96ab0ed5 100644
--- a/app/src/main/res/drawable/ic_splash_anim.xml
+++ b/app/src/main/res/drawable/ic_splash_anim.xml
@@ -8,9 +8,7 @@
android:viewportHeight="108">
+ android:pivotY="56">
-
-
diff --git a/app/src/main/res/drawable/sel_playing_state_48.xml b/app/src/main/res/drawable/sel_playing_state_48.xml
new file mode 100644
index 000000000..d9b283a03
--- /dev/null
+++ b/app/src/main/res/drawable/sel_playing_state_48.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-h480dp/fragment_playback_panel.xml b/app/src/main/res/layout-h480dp/fragment_playback_panel.xml
index 4157231ac..a31cbcd62 100644
--- a/app/src/main/res/layout-h480dp/fragment_playback_panel.xml
+++ b/app/src/main/res/layout-h480dp/fragment_playback_panel.xml
@@ -102,11 +102,14 @@
@@ -45,10 +44,10 @@
+ android:layout_height="wrap_content"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 140539c9b..1ee68e73f 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -16,8 +16,8 @@
192dp
256dp
- 8dp
- 16dp
+ 12dp
+ 14dp
24dp
48dp
@@ -36,7 +36,7 @@
2sp
- 3dp
+ 6dp
78dp
64dp
diff --git a/app/src/main/res/values/styles_core.xml b/app/src/main/res/values/styles_core.xml
index f43098404..6cc3b58da 100644
--- a/app/src/main/res/values/styles_core.xml
+++ b/app/src/main/res/values/styles_core.xml
@@ -18,7 +18,7 @@
-
+
+