Skip to content
This repository was archived by the owner on Nov 21, 2024. It is now read-only.

Commit 600b33b

Browse files
committed
Move motion interpolation behind theme attrs
1 parent 600d1b8 commit 600b33b

File tree

8 files changed

+28
-48
lines changed

8 files changed

+28
-48
lines changed

Reply/app/src/main/java/com/materialstudies/reply/ui/compose/ComposeFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import com.materialstudies.reply.data.Email
3333
import com.materialstudies.reply.data.EmailStore
3434
import com.materialstudies.reply.databinding.ComposeRecipientChipBinding
3535
import com.materialstudies.reply.databinding.FragmentComposeBinding
36-
import com.materialstudies.reply.util.FastOutUltraSlowIn
36+
import com.materialstudies.reply.util.themeInterpolator
3737
import com.materialstudies.reply.util.transition.MaterialContainerTransition
3838
import kotlin.LazyThreadSafetyMode.NONE
3939

@@ -119,7 +119,7 @@ class ComposeFragment : Fragment() {
119119
binding.emailCardView
120120
)
121121
duration = resources.getInteger(R.integer.reply_motion_default_duration).toLong()
122-
interpolator = FastOutUltraSlowIn()
122+
interpolator = requireContext().themeInterpolator(R.attr.materialMotionInterpolator)
123123
}
124124
returnTransition = Slide().apply {
125125
duration = resources.getInteger(R.integer.reply_motion_micro_duration).toLong()

Reply/app/src/main/java/com/materialstudies/reply/ui/email/EmailFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import androidx.recyclerview.widget.GridLayoutManager
2727
import com.materialstudies.reply.R
2828
import com.materialstudies.reply.data.EmailStore
2929
import com.materialstudies.reply.databinding.FragmentEmailBinding
30-
import com.materialstudies.reply.util.FastOutUltraSlowIn
30+
import com.materialstudies.reply.util.themeInterpolator
3131
import com.materialstudies.reply.util.transition.MaterialContainerTransition
3232
import kotlin.LazyThreadSafetyMode.NONE
3333

@@ -96,14 +96,14 @@ class EmailFragment : Fragment() {
9696
correctForZOrdering = true
9797
).apply {
9898
duration = resources.getInteger(R.integer.reply_motion_default_duration).toLong()
99-
interpolator = FastOutUltraSlowIn()
99+
interpolator = requireContext().themeInterpolator(R.attr.materialMotionInterpolator)
100100
}
101101
sharedElementReturnTransition = MaterialContainerTransition(
102102
R.id.recycler_view,
103103
correctForZOrdering = true
104104
).apply {
105105
duration = resources.getInteger(R.integer.reply_motion_default_duration).toLong()
106-
interpolator = FastOutUltraSlowIn()
106+
interpolator = requireContext().themeInterpolator(R.attr.materialMotionInterpolator)
107107
}
108108
}
109109

Reply/app/src/main/java/com/materialstudies/reply/ui/nav/BottomNavDrawerFragment.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ import com.materialstudies.reply.R
3737
import com.materialstudies.reply.data.Account
3838
import com.materialstudies.reply.data.AccountStore
3939
import com.materialstudies.reply.databinding.FragmentBottomNavDrawerBinding
40-
import com.materialstudies.reply.util.FastOutUltraSlowIn
4140
import com.materialstudies.reply.util.lerp
4241
import com.materialstudies.reply.util.themeColor
42+
import com.materialstudies.reply.util.themeInterpolator
4343
import kotlin.LazyThreadSafetyMode.NONE
4444
import kotlin.math.abs
4545

@@ -128,7 +128,9 @@ class BottomNavDrawerFragment :
128128

129129
private var sandwichState: SandwichState = SandwichState.CLOSED
130130
private var sandwichAnim: ValueAnimator? = null
131-
private val sandwichInterp = FastOutUltraSlowIn()
131+
private val sandwichInterp by lazy(NONE) {
132+
requireContext().themeInterpolator(R.attr.materialMotionInterpolator)
133+
}
132134
// Progress value which drives the animation of the sandwiching account picker. Responsible
133135
// for both calling progress updates and state updates.
134136
private var sandwichProgress: Float = 0F

Reply/app/src/main/java/com/materialstudies/reply/util/ContextExtensions.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import android.content.Context
2121
import android.graphics.Color
2222
import android.graphics.drawable.Drawable
2323
import android.util.TypedValue
24+
import android.view.animation.AnimationUtils
25+
import android.view.animation.Interpolator
2426
import androidx.annotation.AttrRes
2527
import androidx.annotation.ColorInt
2628
import androidx.annotation.DrawableRes
@@ -47,12 +49,22 @@ fun Context.themeColor(
4749
* Retrieve a style from the current [android.content.res.Resources.Theme].
4850
*/
4951
@StyleRes
50-
fun Context.themeStyle(attr: Int): Int {
52+
fun Context.themeStyle(@AttrRes attr: Int): Int {
5153
val tv = TypedValue()
5254
theme.resolveAttribute(attr, tv, true)
5355
return tv.data
5456
}
5557

58+
@SuppressLint("Recycle")
59+
fun Context.themeInterpolator(@AttrRes attr: Int): Interpolator {
60+
return AnimationUtils.loadInterpolator(
61+
this,
62+
obtainStyledAttributes(intArrayOf(attr)).use {
63+
it.getResourceId(0, android.R.interpolator.fast_out_slow_in)
64+
}
65+
)
66+
}
67+
5668
fun Context.getDrawableOrNull(@DrawableRes id: Int?): Drawable? {
5769
return if (id == null || id == 0) null else AppCompatResources.getDrawable(this, id)
5870
}

Reply/app/src/main/java/com/materialstudies/reply/util/FastOutUltraSlowIn.kt

Lines changed: 0 additions & 38 deletions
This file was deleted.

Reply/app/src/main/res/values/attrs.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
<attr name="emphasisMediumAlpha" format="float"/>
2525
<attr name="emphasisDisabledAlpha" format="float"/>
2626

27+
<attr name="materialMotionInterpolator" format="reference"/>
28+
2729
<!--Custom view themes/styles-->
2830
<attr name="bottomNavigationDrawerStyle" format="reference" />
2931
<attr name="bottomNavigationDrawerNavigationViewTheme" format="reference" />

Reply/app/src/main/res/values/motion.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
<!--Motion-->
1818

19-
<integer name="reply_motion_default_duration">350</integer>
20-
<integer name="reply_motion_short_duration">250</integer>
19+
<integer name="reply_motion_default_duration">300</integer>
20+
<integer name="reply_motion_short_duration">225</integer>
2121
<integer name="reply_motion_micro_duration">175</integer>
2222

2323
</resources>

Reply/app/src/main/res/values/themes.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
<item name="emphasisMediumAlpha">0.60</item>
6363
<item name="emphasisDisabledAlpha">0.38</item>
6464

65+
<item name="materialMotionInterpolator">@android:interpolator/fast_out_slow_in</item>
66+
6567
<!--Styles-->
6668
<item name="bottomAppBarStyle">@style/Widget.MaterialComponents.BottomAppBar.PrimarySurface</item>
6769
<item name="bottomSheetStyle">@style/Widget.MaterialComponents.BottomSheet.Modal</item>

0 commit comments

Comments
 (0)