diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.kt b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.kt
index 04e1905..b230fa6 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.kt
+++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.kt
@@ -38,7 +38,6 @@
 import com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW
 import com.android.launcher3.util.MultiPropertyFactory.MULTI_PROPERTY_VALUE
 import com.android.quickstep.util.AnimUtils
-import com.android.quickstep.views.ClearAllButton
 import com.android.quickstep.views.RecentsView
 import com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET
 import com.android.quickstep.views.RecentsView.CONTENT_ALPHA
@@ -288,8 +287,8 @@
         val clearAllButtonAlpha =
             if (state.areElementsVisible(launcher, LauncherState.CLEAR_ALL_BUTTON)) 1f else 0f
         propertySetter.setFloat(
-            recentsView.clearAllButton,
-            ClearAllButton.VISIBILITY_ALPHA,
+            recentsView.clearAllButton.visibilityAlphaProperty,
+            MULTI_PROPERTY_VALUE,
             clearAllButtonAlpha,
             LINEAR,
         )
diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
index 537092f..51f2a33 100644
--- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
+++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
@@ -52,7 +52,6 @@
 import com.android.launcher3.anim.PropertySetter;
 import com.android.launcher3.statemanager.StateManager.StateHandler;
 import com.android.launcher3.states.StateAnimationConfig;
-import com.android.quickstep.views.ClearAllButton;
 import com.android.quickstep.views.RecentsView;
 import com.android.quickstep.views.RecentsViewContainer;
 
@@ -98,8 +97,8 @@
     private void setProperties(RecentsState state, StateAnimationConfig config,
             PropertySetter setter) {
         float clearAllButtonAlpha = state.hasClearAllButton() ? 1 : 0;
-        setter.setFloat(mRecentsView.getClearAllButton(), ClearAllButton.VISIBILITY_ALPHA,
-                clearAllButtonAlpha, LINEAR);
+        setter.setFloat(mRecentsView.getClearAllButton().visibilityAlphaProperty,
+                MULTI_PROPERTY_VALUE, clearAllButtonAlpha, LINEAR);
         if (mRecentsView.getAddDeskButton() != null) {
             float addDeskButtonAlpha = state.hasAddDeskButton() ? 1 : 0;
             setter.setFloat(mRecentsView.getAddDeskButton().getVisibilityAlphaProperty(),
diff --git a/quickstep/src/com/android/quickstep/views/ClearAllButton.kt b/quickstep/src/com/android/quickstep/views/ClearAllButton.kt
index ef62597..6420ece 100644
--- a/quickstep/src/com/android/quickstep/views/ClearAllButton.kt
+++ b/quickstep/src/com/android/quickstep/views/ClearAllButton.kt
@@ -19,10 +19,12 @@
 import android.graphics.Canvas
 import android.graphics.Rect
 import android.util.AttributeSet
-import android.util.FloatProperty
+import android.view.View
 import android.widget.Button
 import com.android.launcher3.Flags.enableFocusOutline
 import com.android.launcher3.R
+import com.android.launcher3.util.MultiPropertyFactory
+import com.android.launcher3.util.MultiValueAlpha
 import com.android.quickstep.util.BorderAnimator
 import com.android.quickstep.util.BorderAnimator.Companion.createSimpleBorderAnimator
 import kotlin.math.abs
@@ -31,29 +33,46 @@
 class ClearAllButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
     Button(context, attrs) {
 
-    var scrollAlpha = 1f
-        set(value) {
-            field = value
-            updateAlpha()
+    private enum class Alpha {
+        SCROLL,
+        CONTENT,
+        VISIBILITY,
+        DISMISS,
+    }
+
+    private val clearAllButtonAlpha =
+        object : MultiValueAlpha(this, Alpha.entries.size) {
+            override fun apply(value: Float) {
+                super.apply(value)
+                isClickable = value >= 1f
+            }
         }
 
-    var contentAlpha = 1f
+    var scrollAlpha
         set(value) {
-            field = value
-            updateAlpha()
+            clearAllButtonAlpha.get(Alpha.SCROLL.ordinal).value = value
         }
+        get() = clearAllButtonAlpha.get(Alpha.SCROLL.ordinal).value
 
-    var visibilityAlpha = 1f
+    var contentAlpha
         set(value) {
-            field = value
-            updateAlpha()
+            clearAllButtonAlpha.get(Alpha.CONTENT.ordinal).value = value
         }
+        get() = clearAllButtonAlpha.get(Alpha.CONTENT.ordinal).value
 
-    var dismissAlpha = 1f
+    @JvmField
+    val visibilityAlphaProperty: MultiPropertyFactory<View>.MultiProperty =
+        clearAllButtonAlpha.get(Alpha.VISIBILITY.ordinal)
+
+    var dismissAlpha
         set(value) {
-            field = value
-            updateAlpha()
+            dismissAlphaProperty.value = value
         }
+        get() = dismissAlphaProperty.value
+
+    @JvmField
+    val dismissAlphaProperty: MultiPropertyFactory<View>.MultiProperty =
+        clearAllButtonAlpha.get(Alpha.DISMISS.ordinal)
 
     var fullscreenProgress = 1f
         set(value) {
@@ -198,12 +217,6 @@
             )
     }
 
-    private fun updateAlpha() {
-        val alpha = scrollAlpha * contentAlpha * visibilityAlpha * dismissAlpha
-        this.alpha = alpha
-        isClickable = alpha >= 1f
-    }
-
     fun getScrollAdjustment(fullscreenEnabled: Boolean, gridEnabled: Boolean): Float {
         var scrollAdjustment = 0f
         if (fullscreenEnabled) {
@@ -244,26 +257,4 @@
         if (fullscreenProgress > 0) endTranslation else 0f
 
     private fun getGridTrans(endTranslation: Float) = if (gridProgress > 0) endTranslation else 0f
-
-    companion object {
-        @JvmField
-        val VISIBILITY_ALPHA: FloatProperty<ClearAllButton> =
-            object : FloatProperty<ClearAllButton>("visibilityAlpha") {
-                override fun setValue(clearAllButton: ClearAllButton, value: Float) {
-                    clearAllButton.visibilityAlpha = value
-                }
-
-                override fun get(clearAllButton: ClearAllButton) = clearAllButton.visibilityAlpha
-            }
-
-        @JvmField
-        val DISMISS_ALPHA: FloatProperty<ClearAllButton> =
-            object : FloatProperty<ClearAllButton>("dismissAlpha") {
-                override fun setValue(clearAllButton: ClearAllButton, value: Float) {
-                    clearAllButton.dismissAlpha = value
-                }
-
-                override fun get(clearAllButton: ClearAllButton) = clearAllButton.dismissAlpha
-            }
-    }
 }
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 6b91df1..983c393 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -66,7 +66,6 @@
 import static com.android.quickstep.BaseContainerInterface.getTaskDimension;
 import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
 import static com.android.quickstep.util.LogUtils.splitFailureMessage;
-import static com.android.quickstep.views.ClearAllButton.DISMISS_ALPHA;
 import static com.android.quickstep.views.OverviewActionsView.HIDDEN_ACTIONS_IN_MENU;
 import static com.android.quickstep.views.OverviewActionsView.HIDDEN_DESKTOP;
 import static com.android.quickstep.views.OverviewActionsView.HIDDEN_NON_ZERO_ROTATION;
@@ -3962,7 +3961,8 @@
 
                 // Change alpha of clear all if translating grid to hide it
                 if (isClearAllHidden) {
-                    anim.setFloat(mClearAllButton, DISMISS_ALPHA, 0, LINEAR);
+                    anim.setFloat(mClearAllButton.dismissAlphaProperty, MULTI_PROPERTY_VALUE, 0,
+                            LINEAR);
                     anim.addListener(new AnimatorListenerAdapter() {
                         @Override
                         public void onAnimationEnd(Animator animation) {
