diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
index 453d6d4a5..e1a1b440b 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
@@ -46,7 +46,7 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat
*
* TODO: Use proper material attributes (Not the weird dimen attributes I currently have)
*
- * TODO: Test out material animation system
+ * TODO: Migrate to material animation system
*
* @author OxygenCobalt
*/
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
index de6ebe883..cf6213987 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
@@ -28,7 +28,9 @@ import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import androidx.transition.TransitionManager
import com.google.android.material.appbar.AppBarLayout
+import com.google.android.material.transition.MaterialFade
import java.lang.reflect.Field
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.AuxioAppBarLayout
@@ -111,7 +113,11 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
this.titleAnimator =
ValueAnimator.ofFloat(from, to).apply {
addUpdateListener { titleView.alpha = it.animatedValue as Float }
- duration = TOOLBAR_FADE_DURATION
+ duration = if (titleShown == true) {
+ context.resources.getInteger(R.integer.anim_fade_enter_duration).toLong()
+ } else {
+ context.resources.getInteger(R.integer.anim_fade_exit_duration).toLong()
+ }
start()
}
}
@@ -142,8 +148,6 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
companion object {
- private const val TOOLBAR_FADE_DURATION = 150L
-
private val TOOLBAR_TITLE_TEXT_FIELD: Field by
lazyReflectedField(Toolbar::class, "mTitleTextView")
}
diff --git a/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt b/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt
index f92dde359..c97cc803a 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/ImageGroup.kt
@@ -161,10 +161,10 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
if (isActivated) {
targetVis = VISIBLE
- targetDuration = 150L
+ targetDuration = context.resources.getInteger(R.integer.anim_fade_enter_duration).toLong()
} else {
targetVis = INVISIBLE
- targetDuration = 84L
+ targetDuration = context.resources.getInteger(R.integer.anim_fade_exit_duration).toLong()
}
if (selectionIndicator.visibility == targetVis) {
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 2ab20dbdd..0518ace78 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 @@ import android.animation.ValueAnimator
import android.content.Context
import android.util.AttributeSet
import com.google.android.material.button.MaterialButton
+import org.oxycblt.auxio.R
/**
* A [MaterialButton] that automatically morphs from a circle to a squircle shape appearance when it
@@ -46,7 +47,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
animator?.cancel()
animator =
ValueAnimator.ofFloat(currentCornerRadiusRatio, target).apply {
- duration = ACTIVATION_DURATION
+ duration = context.resources.getInteger(R.integer.anim_fade_enter_duration).toLong()
addUpdateListener { updateCornerRadiusRatio(animatedValue as Float) }
start()
}
@@ -56,8 +57,4 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
currentCornerRadiusRatio = ratio
shapeAppearanceModel = shapeAppearanceModel.withCornerSize { it.width() * ratio }
}
-
- companion object {
- const val ACTIVATION_DURATION = 150L
- }
}
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/ui/StyledSeekBar.kt b/app/src/main/java/org/oxycblt/auxio/playback/ui/StyledSeekBar.kt
index 6b32bde2a..b8ab58ea5 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/ui/StyledSeekBar.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/ui/StyledSeekBar.kt
@@ -70,7 +70,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
// Sanity check 2: Ensure that this value is within the duration and will not crash
// the app, and that the user is not currently seeking (which would cause the SeekBar
// to jump around).
- if (from <= durationDs && !isSelected) {
+ if (from <= durationDs && !isActivated) {
binding.seekBarSlider.value = from.toFloat()
// We would want to keep this in the callback, but the callback only fires when
@@ -106,13 +106,13 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
logD("Starting seek mode")
// User has begun seeking, place the SeekBar into a "Suspended" mode in which no
// position updates are sent and is indicated by the position value turning accented.
- isSelected = true
+ isActivated = true
}
override fun onStopTrackingTouch(slider: Slider) {
logD("Confirming seek")
// End of seek event, send off new value to callback.
- isSelected = false
+ isActivated = false
callback?.seekTo(slider.value.toLong())
}
diff --git a/app/src/main/java/org/oxycblt/auxio/ui/fastscroll/FastScrollRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/ui/fastscroll/FastScrollRecyclerView.kt
index ebc2c02d9..ea3f3bf58 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/fastscroll/FastScrollRecyclerView.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/fastscroll/FastScrollRecyclerView.kt
@@ -33,13 +33,17 @@ import androidx.core.view.isInvisible
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import androidx.transition.TransitionManager
+import com.google.android.material.transition.MaterialFade
import kotlin.math.abs
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.recycler.AuxioRecyclerView
+import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.getDimenSize
import org.oxycblt.auxio.util.getDrawableCompat
import org.oxycblt.auxio.util.isRtl
import org.oxycblt.auxio.util.isUnder
+import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat
/**
@@ -431,7 +435,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
showingThumb = true
- animateView(thumbView, 1f)
+ animateViewIn(thumbView)
}
private fun hideScrollbar() {
@@ -440,7 +444,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
showingThumb = false
- animateView(thumbView, 0f)
+ animateViewOut(thumbView)
}
private fun showPopup() {
@@ -449,7 +453,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
showingPopup = true
- animateView(popupView, 1f)
+ animateViewIn(popupView)
}
private fun hidePopup() {
@@ -458,11 +462,22 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
showingPopup = false
- animateView(popupView, 0f)
+ animateViewOut(popupView)
}
- private fun animateView(view: View, alpha: Float) {
- view.animate().alpha(alpha).setDuration(ANIM_MILLIS).start()
+ private fun animateViewIn(view: View) {
+ logD(view.translationX)
+ view.animate()
+ .alpha(1f)
+ .setDuration(context.resources.getInteger(R.integer.anim_fade_enter_duration).toLong())
+ .start()
+ }
+
+ private fun animateViewOut(view: View) {
+ view.animate()
+ .alpha(0f)
+ .setDuration(context.resources.getInteger(R.integer.anim_fade_exit_duration).toLong())
+ .start()
}
// --- LAYOUT STATE ---
diff --git a/app/src/main/res/color/sel_activatable_text_secondary.xml b/app/src/main/res/color/sel_activatable_text_secondary.xml
new file mode 100644
index 000000000..105bf5c7a
--- /dev/null
+++ b/app/src/main/res/color/sel_activatable_text_secondary.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/sel_selectable_text_secondary.xml b/app/src/main/res/color/sel_selectable_text_secondary.xml
index 339853789..1aa622c44 100644
--- a/app/src/main/res/color/sel_selectable_text_secondary.xml
+++ b/app/src/main/res/color/sel_selectable_text_secondary.xml
@@ -1,6 +1,5 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/sel_item_ripple_bg.xml b/app/src/main/res/drawable/sel_item_ripple_bg.xml
index 152b48a05..043323742 100644
--- a/app/src/main/res/drawable/sel_item_ripple_bg.xml
+++ b/app/src/main/res/drawable/sel_item_ripple_bg.xml
@@ -1,7 +1,7 @@
+ android:enterFadeDuration="@integer/anim_fade_enter_duration"
+ android:exitFadeDuration="@integer/anim_fade_exit_duration">
-
@@ -67,7 +67,7 @@
@@ -83,7 +83,7 @@
@@ -99,7 +99,7 @@
@@ -115,7 +115,7 @@
@@ -131,7 +131,7 @@
diff --git a/app/src/main/res/layout/view_seek_bar.xml b/app/src/main/res/layout/view_seek_bar.xml
index 982e02d28..60df96bb8 100644
--- a/app/src/main/res/layout/view_seek_bar.xml
+++ b/app/src/main/res/layout/view_seek_bar.xml
@@ -20,7 +20,7 @@
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginBottom="@dimen/spacing_tiny"
android:textAppearance="@style/TextAppearance.Auxio.BodySmall"
- android:textColor="@color/sel_selectable_text_secondary"
+ android:textColor="@color/sel_activatable_text_secondary"
tools:text="11:38" />
+ 150
+ 84
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b78c6fc6e..e73f10825 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -149,7 +149,7 @@
Loading your music library…
Monitoring your music library for changes…
Added to queue
- Developed by OxygenCobalt
+ Developed by Alexander Capehart
Search your library…