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

Commit 66caf412 authored by Nick Chameyev's avatar Nick Chameyev
Browse files

Migrate unfold animation to Shell transitions [Part 2]

Adds real unfold animation for full-screen tasks when
doing the Shell unfold transition. When folding
the animation is done using the previous approach:
by listening TaskOrganizer and modifying the surfaces
without actually starting Shell transitions.

Common logic that handles surface modifications is
extracted to FullscreenUnfoldTaskAnimator.

Bug: 204925795
Test: folding/unfolding with a fullscreen app
  when Shell transitions enabled/disabled
Change-Id: I6d086b4df84d37ae61a46956bc99f0c925aa1755
parent a49154ec
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<!-- Should be the same as in packages/apps/Launcher3/res/color-v31/taskbar_background.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/system_neutral1_500" android:lStar="35" />
    <item android:color="@android:color/system_neutral1_500" android:lStar="15" />
</selector>
 No newline at end of file
+0 −19
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Matches taskbar color -->
    <item android:color="@android:color/system_neutral2_500" android:lStar="35" />
</selector>
+10 −9
Original line number Diff line number Diff line
@@ -319,26 +319,27 @@ public abstract class WMShellBaseModule {
    @WMSingleton
    @Provides
    static Optional<FullscreenUnfoldController> provideFullscreenUnfoldController(
            @DynamicOverride Optional<FullscreenUnfoldController> fullscreenUnfoldController,
            @DynamicOverride Lazy<Optional<FullscreenUnfoldController>> fullscreenUnfoldController,
            Optional<ShellUnfoldProgressProvider> progressProvider) {
        if (progressProvider.isPresent()
                && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) {
            return fullscreenUnfoldController;
            return fullscreenUnfoldController.get();
        }
        return Optional.empty();
    }

    @BindsOptionalOf
    @DynamicOverride
    abstract UnfoldTransitionHandler optionalUnfoldTransitionHandler();

    @WMSingleton
    @Provides
    static Optional<UnfoldTransitionHandler> provideUnfoldTransitionHandler(
            Optional<ShellUnfoldProgressProvider> progressProvider,
            TransactionPool transactionPool,
            Transitions transitions,
            @ShellMainThread ShellExecutor executor) {
        if (progressProvider.isPresent()) {
            return Optional.of(
                    new UnfoldTransitionHandler(progressProvider.get(), transactionPool, executor,
                            transitions));
            @DynamicOverride Lazy<Optional<UnfoldTransitionHandler>> handler) {
        if (progressProvider.isPresent()
                && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) {
            return handler.get();
        }
        return Optional.empty();
    }
+30 −6
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ import com.android.wm.shell.splitscreen.StageTaskUnfoldController;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
import com.android.wm.shell.unfold.UnfoldBackgroundController;
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator;

import java.util.Optional;

@@ -347,15 +349,37 @@ public class WMShellModule {
    @Provides
    @DynamicOverride
    static FullscreenUnfoldController provideFullscreenUnfoldController(
            Context context,
            Optional<ShellUnfoldProgressProvider> progressProvider,
            Lazy<UnfoldBackgroundController> unfoldBackgroundController,
            DisplayInsetsController displayInsetsController,
            Optional<UnfoldTransitionHandler> unfoldTransitionHandler,
            FullscreenUnfoldTaskAnimator fullscreenUnfoldTaskAnimator,
            UnfoldBackgroundController unfoldBackgroundController,
            @ShellMainThread ShellExecutor mainExecutor
    ) {
        return new FullscreenUnfoldController(context, mainExecutor,
                unfoldBackgroundController.get(), progressProvider.get(),
                displayInsetsController);
        return new FullscreenUnfoldController(mainExecutor,
                unfoldBackgroundController, progressProvider.get(),
                unfoldTransitionHandler.get(), fullscreenUnfoldTaskAnimator);
    }

    @Provides
    static FullscreenUnfoldTaskAnimator provideFullscreenUnfoldTaskAnimator(
            Context context,
            DisplayInsetsController displayInsetsController
    ) {
        return new FullscreenUnfoldTaskAnimator(context, displayInsetsController);
    }

    @WMSingleton
    @Provides
    @DynamicOverride
    static UnfoldTransitionHandler provideUnfoldTransitionHandler(
            Optional<ShellUnfoldProgressProvider> progressProvider,
            FullscreenUnfoldTaskAnimator animator,
            UnfoldBackgroundController backgroundController,
            TransactionPool transactionPool,
            Transitions transitions,
            @ShellMainThread ShellExecutor executor) {
        return new UnfoldTransitionHandler(progressProvider.get(), animator,
                transactionPool, backgroundController, executor, transitions);
    }

    @Provides
+4 −2
Original line number Diff line number Diff line
@@ -76,6 +76,8 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
                taskInfo.taskId);
        final Point positionInParent = taskInfo.positionInParent;
        mDataByTaskId.put(taskInfo.taskId, new TaskData(leash, positionInParent));
        mAnimatableTasksListener.onTaskAppeared(taskInfo);

        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
        mSyncQueue.runInSync(t -> {
            // Reset several properties back to fullscreen (PiP, for example, leaves all these
@@ -87,15 +89,15 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
            t.show(leash);
        });

        mAnimatableTasksListener.onTaskAppeared(taskInfo);
        updateRecentsForVisibleFullscreenTask(taskInfo);
    }

    @Override
    public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
        mAnimatableTasksListener.onTaskInfoChanged(taskInfo);

        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;

        mAnimatableTasksListener.onTaskInfoChanged(taskInfo);
        updateRecentsForVisibleFullscreenTask(taskInfo);

        final TaskData data = mDataByTaskId.get(taskInfo.taskId);
Loading