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

Commit c85088a8 authored by Omar Elmekkawy's avatar Omar Elmekkawy Committed by Android (Google) Code Review
Browse files

Merge "Add fadeIn animation for tiling divider being shown after overview." into main

parents 042e68e4 e156e73b
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -314,9 +314,7 @@ class DesktopTasksController(
                        RecentsTransitionStateListener.stateToString(state),
                    )
                    recentsTransitionState = state
                    snapEventHandler.onOverviewAnimationStateChange(
                        RecentsTransitionStateListener.isAnimating(state)
                    )
                    snapEventHandler.onOverviewAnimationStateChange(state)
                }
            }
        )
+3 −2
Original line number Diff line number Diff line
@@ -951,8 +951,9 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
    }

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

    @Override
+5 −2
Original line number 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.ReturnToDragStartAnimator
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.ShellMainThread
import com.android.wm.shell.transition.FocusTransitionObserver
@@ -125,9 +126,11 @@ class DesktopTilingDecorViewModel(
            ?.moveTiledPairToFront(taskInfo.taskId, isFocusedOnDisplay = true) ?: false
    }

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

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

    /** Shows the divider bar. */
    fun showDividerBar() {
    fun showDividerBar(isTilingVisibleAfterRecents: Boolean) {
        if (dividerShown) return
        val t = transactionSupplier.get()
        t.show(leash)
        t.apply()
        val dividerAnimatorT = transactionSupplier.get()
        val dividerAnimDuration =
            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
    }

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

    companion object {
        private const val DIVIDER_FADE_IN_ALPHA_DURATION = 300L
        private const val DIVIDER_FADE_IN_ALPHA_SLOW_DURATION = 900L
    }
}
+13 −10
Original line number 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.ReturnToDragStartAnimator
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.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellMainThread
@@ -102,13 +103,14 @@ class DesktopTilingWindowDecoration(

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

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

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

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

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

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

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

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

Loading