Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e156e73b authored by Omar Elmekkawy's avatar Omar Elmekkawy
Browse files

Add fadeIn animation for tiling divider being shown after overview.

A fadeIn animation is only shown when the divider is drawn for the first
time.

This CL changes this behavior and now a fadeIn animation is shown after
entering freeform from Overview.

Flag: com.android.window.flags.enable_tile_resizing

com.android.window.flags.enable_windowing_transition_handlers_observers

com.android.window.flags.enable_windowing_transition_handlers_observers

Test: on device testing, animation now shows after overview

Bug: 402787301
Change-Id: I15927a90ff094d69d3e51acf0b9a5efbdd7c98d8
parent 7f43efda
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -314,9 +314,7 @@ class DesktopTasksController(
                        RecentsTransitionStateListener.stateToString(state),
                        RecentsTransitionStateListener.stateToString(state),
                    )
                    )
                    recentsTransitionState = state
                    recentsTransitionState = state
                    snapEventHandler.onOverviewAnimationStateChange(
                    snapEventHandler.onOverviewAnimationStateChange(state)
                        RecentsTransitionStateListener.isAnimating(state)
                    )
                }
                }
            }
            }
        )
        )
+3 −2
Original line number Original line Diff line number Diff line
@@ -951,8 +951,9 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
    }
    }


    @Override
    @Override
    public void onOverviewAnimationStateChange(boolean running) {
    public void onOverviewAnimationStateChange(
        mDesktopTilingDecorViewModel.onOverviewAnimationStateChange(running);
            @RecentsTransitionStateListener.RecentsTransitionState int state) {
        mDesktopTilingDecorViewModel.onOverviewAnimationStateChange(state);
    }
    }


    @Override
    @Override
+5 −2
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.wm.shell.desktopmode.DesktopTasksController
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.ReturnToDragStartAnimator
import com.android.wm.shell.desktopmode.ReturnToDragStartAnimator
import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler
import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler
import com.android.wm.shell.recents.RecentsTransitionStateListener
import com.android.wm.shell.shared.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.transition.FocusTransitionObserver
import com.android.wm.shell.transition.FocusTransitionObserver
@@ -125,9 +126,11 @@ class DesktopTilingDecorViewModel(
            ?.moveTiledPairToFront(taskInfo.taskId, isFocusedOnDisplay = true) ?: false
            ?.moveTiledPairToFront(taskInfo.taskId, isFocusedOnDisplay = true) ?: false
    }
    }


    fun onOverviewAnimationStateChange(isRunning: Boolean) {
    fun onOverviewAnimationStateChange(
        @RecentsTransitionStateListener.RecentsTransitionState state: Int
    ) {
        for (tilingHandler in tilingTransitionHandlerByDisplayId.valueIterator()) {
        for (tilingHandler in tilingTransitionHandlerByDisplayId.valueIterator()) {
            tilingHandler.onOverviewAnimationStateChange(isRunning)
            tilingHandler.onOverviewAnimationStateChange(state)
        }
        }
    }
    }


+29 −4
Original line number Original line Diff line number Diff line
@@ -203,11 +203,35 @@ class DesktopTilingDividerWindowManager(
    }
    }


    /** Shows the divider bar. */
    /** Shows the divider bar. */
    fun showDividerBar() {
    fun showDividerBar(isTilingVisibleAfterRecents: Boolean) {
        if (dividerShown) return
        if (dividerShown) return
        val t = transactionSupplier.get()
        val dividerAnimatorT = transactionSupplier.get()
        t.show(leash)
        val dividerAnimDuration =
        t.apply()
            if (isTilingVisibleAfterRecents) {
                DIVIDER_FADE_IN_ALPHA_SLOW_DURATION
            } else {
                DIVIDER_FADE_IN_ALPHA_DURATION
            }
        val dividerAnimator =
            ValueAnimator.ofFloat(0f, 1f).apply {
                duration = dividerAnimDuration
                addUpdateListener {
                    dividerAnimatorT.setAlpha(leash, animatedValue as Float).apply()
                }
                addListener(
                    object : AnimatorListenerAdapter() {
                        override fun onAnimationStart(animation: Animator) {
                            dividerAnimatorT.setAlpha(leash, 0f).show(leash).apply()
                        }

                        override fun onAnimationEnd(animation: Animator) {
                            dividerAnimatorT.setAlpha(leash, 1f).apply()
                            dividerShown = true
                        }
                    }
                )
            }
        dividerAnimator.start()
        dividerShown = true
        dividerShown = true
    }
    }


@@ -327,5 +351,6 @@ class DesktopTilingDividerWindowManager(


    companion object {
    companion object {
        private const val DIVIDER_FADE_IN_ALPHA_DURATION = 300L
        private const val DIVIDER_FADE_IN_ALPHA_DURATION = 300L
        private const val DIVIDER_FADE_IN_ALPHA_SLOW_DURATION = 900L
    }
    }
}
}
+13 −10
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.wm.shell.desktopmode.DesktopTasksController.SnapPosition
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.ReturnToDragStartAnimator
import com.android.wm.shell.desktopmode.ReturnToDragStartAnimator
import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler
import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler
import com.android.wm.shell.recents.RecentsTransitionStateListener
import com.android.wm.shell.shared.FocusTransitionListener
import com.android.wm.shell.shared.FocusTransitionListener
import com.android.wm.shell.shared.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.annotations.ShellMainThread
@@ -102,13 +103,14 @@ class DesktopTilingWindowDecoration(


    var leftTaskResizingHelper: AppResizingHelper? = null
    var leftTaskResizingHelper: AppResizingHelper? = null
    var rightTaskResizingHelper: AppResizingHelper? = null
    var rightTaskResizingHelper: AppResizingHelper? = null
    private var isTilingManagerInitialised = false
    @VisibleForTesting var isTilingManagerInitialised = false
    @VisibleForTesting
    @VisibleForTesting
    var desktopTilingDividerWindowManager: DesktopTilingDividerWindowManager? = null
    var desktopTilingDividerWindowManager: DesktopTilingDividerWindowManager? = null
    private lateinit var dividerBounds: Rect
    private lateinit var dividerBounds: Rect
    private var isDarkMode = false
    private var isDarkMode = false
    private var isResizing = false
    private var isResizing = false
    private var isTilingFocused = false
    private var isTilingFocused = false
    private var isTilingVisibleAfterRecents = false


    fun onAppTiled(
    fun onAppTiled(
        taskInfo: RunningTaskInfo,
        taskInfo: RunningTaskInfo,
@@ -435,7 +437,6 @@ class DesktopTilingWindowDecoration(
    ) {
    ) {
        var leftTaskBroughtToFront = false
        var leftTaskBroughtToFront = false
        var rightTaskBroughtToFront = false
        var rightTaskBroughtToFront = false

        for (change in info.changes) {
        for (change in info.changes) {
            change.taskInfo?.let {
            change.taskInfo?.let {
                if (it.isFullscreen || isMinimized(change.mode, info.type)) {
                if (it.isFullscreen || isMinimized(change.mode, info.type)) {
@@ -455,7 +456,8 @@ class DesktopTilingWindowDecoration(
        }
        }


        if (leftTaskBroughtToFront && rightTaskBroughtToFront) {
        if (leftTaskBroughtToFront && rightTaskBroughtToFront) {
            desktopTilingDividerWindowManager?.showDividerBar()
            desktopTilingDividerWindowManager?.showDividerBar(isTilingVisibleAfterRecents)
            isTilingVisibleAfterRecents = false
        }
        }
    }
    }


@@ -468,10 +470,7 @@ class DesktopTilingWindowDecoration(
    }
    }


    private fun isMinimized(changeMode: Int, infoType: Int): Boolean {
    private fun isMinimized(changeMode: Int, infoType: Int): Boolean {
        return (changeMode == TRANSIT_TO_BACK &&
        return changeMode == TRANSIT_TO_BACK && infoType == TRANSIT_MINIMIZE
            (infoType == TRANSIT_MINIMIZE ||
                infoType == TRANSIT_TO_BACK ||
                infoType == TRANSIT_OPEN))
    }
    }


    private fun isEnteringPip(change: Change, transitType: Int): Boolean {
    private fun isEnteringPip(change: Change, transitType: Int): Boolean {
@@ -688,12 +687,16 @@ class DesktopTilingWindowDecoration(
        appResizingHelper.dispose()
        appResizingHelper.dispose()
    }
    }


    fun onOverviewAnimationStateChange(isRunning: Boolean) {
    fun onOverviewAnimationStateChange(
        @RecentsTransitionStateListener.RecentsTransitionState state: Int
    ) {
        if (!isTilingManagerInitialised) return
        if (!isTilingManagerInitialised) return
        if (isRunning) {
        if (RecentsTransitionStateListener.isRunning(state)) {
            isTilingVisibleAfterRecents = true
            desktopTilingDividerWindowManager?.hideDividerBar()
            desktopTilingDividerWindowManager?.hideDividerBar()
        } else if (allTiledTasksVisible()) {
        } else if (allTiledTasksVisible()) {
            desktopTilingDividerWindowManager?.showDividerBar()
            desktopTilingDividerWindowManager?.showDividerBar(isTilingVisibleAfterRecents)
            isTilingVisibleAfterRecents = false
        }
        }
    }
    }


Loading