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

Commit 27f95592 authored by Jon Miranda's avatar Jon Miranda
Browse files

Revert "Revert "Sync hotseat/taskbar handoff""

This reverts commit efca5c86.

Reason for revert: ANR no longer happening

Bug: 223789074
Bug: 223443781
Bug: 202507555
Change-Id: I03bfe8642ef4ed0f9e8fbd543141d39c66375604
parent efca5c86
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ android_library {
        "androidx.test.uiautomator_uiautomator",
        "androidx.preference_preference",
        "SystemUISharedLib",
        "SystemUIAnimationLib",
    ],
    srcs: [
        "tests/tapl/**/*.java",
@@ -196,6 +197,7 @@ android_library {
        "lottie",
        "SystemUISharedLib",
        "SystemUI-statsd",
        "SystemUIAnimationLib",
    ],
    manifest: "quickstep/AndroidManifest.xml",
    min_sdk_version: "current",
@@ -287,6 +289,7 @@ android_library {
        "SystemUISharedLib",
        "Launcher3CommonDepsLib",
        "QuickstepResLib",
        "SystemUIAnimationLib",
    ],
    manifest: "quickstep/AndroidManifest.xml",
    platform_apis: true,
+35 −0
Original line number Diff line number Diff line
@@ -29,13 +29,16 @@ import androidx.annotation.NonNull;

import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.LauncherState;
import com.android.launcher3.Utilities;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.quickstep.AnimatedFloat;
import com.android.quickstep.RecentsAnimationCallbacks;
import com.android.quickstep.RecentsAnimationController;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.animation.ViewRootSync;
import com.android.systemui.shared.recents.model.ThumbnailData;

import java.util.HashMap;
@@ -76,6 +79,9 @@ import java.util.function.Supplier;

    private boolean mShouldDelayLauncherStateAnim;

    // We skip any view synchronizations during init/destroy.
    private boolean mCanSyncViews;

    private final StateManager.StateListener<LauncherState> mStateListener =
            new StateManager.StateListener<LauncherState>() {

@@ -102,6 +108,8 @@ import java.util.function.Supplier;
            };

    public void init(TaskbarControllers controllers, BaseQuickstepLauncher launcher) {
        mCanSyncViews = false;

        mControllers = controllers;
        mLauncher = launcher;

@@ -121,9 +129,13 @@ import java.util.function.Supplier;
        updateStateForFlag(FLAG_RESUMED, launcher.hasBeenResumed());
        mLauncherState = launcher.getStateManager().getState();
        applyState(0);

        mCanSyncViews = true;
    }

    public void onDestroy() {
        mCanSyncViews = false;

        mIconAlignmentForResumedState.finishAnimation();
        mIconAlignmentForGestureState.finishAnimation();
        mIconAlignmentForLauncherState.finishAnimation();
@@ -131,6 +143,8 @@ import java.util.function.Supplier;
        mIconAlphaForHome.setConsumer(null);
        mLauncher.getHotseat().setIconsAlpha(1f);
        mLauncher.getStateManager().removeStateListener(mStateListener);

        mCanSyncViews = true;
    }

    public Animator createAnimToLauncher(@NonNull LauncherState toState,
@@ -380,6 +394,27 @@ import java.util.function.Supplier;
            return;
        }
        float alignment = alignmentSupplier.get();
        float currentValue = mIconAlphaForHome.getValue();
        boolean taskbarWillBeVisible = alignment < 1;
        boolean firstFrameVisChanged = (taskbarWillBeVisible && Float.compare(currentValue, 1) != 0)
                || (!taskbarWillBeVisible && Float.compare(currentValue, 0) != 0);

        // Sync the first frame where we swap taskbar and hotseat.
        if (firstFrameVisChanged && mCanSyncViews && !Utilities.IS_RUNNING_IN_TEST_HARNESS) {
            DeviceProfile dp = mLauncher.getDeviceProfile();

            // Do all the heavy work before the sync.
            mControllers.taskbarViewController.createIconAlignmentControllerIfNotExists(dp);

            ViewRootSync.synchronizeNextDraw(mLauncher.getHotseat(),
                    mControllers.taskbarActivityContext.getDragLayer(),
                    () -> updateIconAlignment(alignment));
        } else {
            updateIconAlignment(alignment);
        }
    }

    private void updateIconAlignment(float alignment) {
        mControllers.taskbarViewController.setLauncherIconAlignment(
                alignment, mLauncher.getDeviceProfile());

+11 −3
Original line number Diff line number Diff line
@@ -191,6 +191,16 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
                + mTaskbarIconTranslationYForStash.value);
    }

    /**
     * Creates the icon alignment controller if it does not already exist.
     * @param launcherDp Launcher device profile.
     */
    public void createIconAlignmentControllerIfNotExists(DeviceProfile launcherDp) {
        if (mIconAlignControllerLazy == null) {
            mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
        }
    }

    /**
     * Sets the taskbar icon alignment relative to Launcher hotseat icons
     * @param alignmentRatio [0, 1]
@@ -198,9 +208,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
     *                       1 => fully aligned
     */
    public void setLauncherIconAlignment(float alignmentRatio, DeviceProfile launcherDp) {
        if (mIconAlignControllerLazy == null) {
            mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
        }
        createIconAlignmentControllerIfNotExists(launcherDp);
        mIconAlignControllerLazy.setPlayFraction(alignmentRatio);
        if (alignmentRatio <= 0 || alignmentRatio >= 1) {
            // Cleanup lazy controller so that it is created again in next animation