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

Commit ddf21252 authored by Mykola Podolian's avatar Mykola Podolian Committed by Android (Google) Code Review
Browse files

Merge changes Ibdecabd1,If330dc9e into main

* changes:
  Added scale animation for taskbar pinning transition.
  Animate the bubble bar Y for task bar pinned/unpinned switches.
parents f871e64f 92d25cd2
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASK
import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_UNPINNED
import com.android.launcher3.taskbar.TaskbarDividerPopupView.Companion.createAndPopulate
import java.io.PrintWriter
import kotlin.jvm.optionals.getOrNull

/** Controls taskbar pinning through a popup view. */
class TaskbarPinningController(private val context: TaskbarActivityContext) :
@@ -119,7 +120,11 @@ class TaskbarPinningController(private val context: TaskbarActivityContext) :
            taskbarViewController.taskbarIconScaleForPinning.animateToValue(animateToValue),
            taskbarViewController.taskbarIconTranslationXForPinning.animateToValue(animateToValue),
        )

        controllers.bubbleControllers.getOrNull()?.bubbleBarViewController?.let {
            // if bubble bar is not visible no need to add it`s animations
            if (!it.isBubbleBarVisible) return@let
            animatorSet.playTogether(it.bubbleBarPinning.animateToValue(animateToValue))
        }
        animatorSet.interpolator = Interpolators.EMPHASIZED
        return animatorSet
    }
+11 −0
Original line number Diff line number Diff line
@@ -303,6 +303,17 @@ public class BubbleBarView extends FrameLayout {
        }
    }

    /**
     * Set the bubble icons size and spacing between the bubbles and the borders of the bubble
     * bar.
     */
    public void setIconSizeAndPaddingForPinning(float newIconSize, float newBubbleBarPadding) {
        mBubbleBarPadding = newBubbleBarPadding;
        mIconScale = newIconSize / mIconSize;
        updateBubblesLayoutProperties(mBubbleBarLocation);
        invalidate();
    }

    /**
     * Sets new icon sizes and newBubbleBarPadding between icons and bubble bar borders.
     *
+78 −5
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@ package com.android.launcher3.taskbar.bubbles;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;

import static com.android.launcher3.Utilities.mapRange;
import static com.android.launcher3.taskbar.TaskbarPinningController.PINNING_PERSISTENT;
import static com.android.launcher3.taskbar.TaskbarPinningController.PINNING_TRANSIENT;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.content.res.Resources;
@@ -42,12 +46,14 @@ import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.taskbar.TaskbarActivityContext;
import com.android.launcher3.taskbar.TaskbarControllers;
import com.android.launcher3.taskbar.TaskbarInsetsController;
import com.android.launcher3.taskbar.TaskbarSharedState;
import com.android.launcher3.taskbar.TaskbarStashController;
import com.android.launcher3.taskbar.bubbles.animation.BubbleBarViewAnimator;
import com.android.launcher3.taskbar.bubbles.flyout.BubbleBarFlyoutController;
import com.android.launcher3.taskbar.bubbles.flyout.BubbleBarFlyoutPositioner;
import com.android.launcher3.taskbar.bubbles.flyout.FlyoutCallbacks;
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.MultiPropertyFactory;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.quickstep.SystemUiProxy;
@@ -106,6 +112,10 @@ public class BubbleBarViewController {
            this::updateTranslationY);
    private final AnimatedFloat mBubbleOffsetY = new AnimatedFloat(
            this::updateBubbleOffsetY);
    private final AnimatedFloat mBubbleBarPinning = new AnimatedFloat(pinningProgress -> {
        updateTranslationY();
        setBubbleBarScaleAndPadding(pinningProgress);
    });

    // Modified when swipe up is happening on the bubble bar or task bar.
    private float mBubbleBarSwipeUpTranslationY;
@@ -125,8 +135,9 @@ public class BubbleBarViewController {
    private BubbleBarViewAnimator mBubbleBarViewAnimator;
    private final FrameLayout mBubbleBarContainer;
    private BubbleBarFlyoutController mBubbleBarFlyoutController;

    private TaskbarSharedState mTaskbarSharedState;
    private final TimeSource mTimeSource = System::currentTimeMillis;
    private final int mTaskbarTranslationDelta;

    @Nullable
    private BubbleBarBoundsChangeListener mBoundsChangeListener;
@@ -140,11 +151,13 @@ public class BubbleBarViewController {
        mBubbleBarAlpha = new MultiValueAlpha(mBarView, 1 /* num alpha channels */);
        mIconSize = activity.getResources().getDimensionPixelSize(
                R.dimen.bubblebar_icon_size);
        mTaskbarTranslationDelta = getBubbleBarTranslationDeltaForTaskbar(activity);
    }

    /** Initializes controller. */
    public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers,
            TaskbarViewPropertiesProvider taskbarViewPropertiesProvider) {
        mTaskbarSharedState = controllers.getSharedState();
        mBubbleStashController = bubbleControllers.bubbleStashController;
        mBubbleBarController = bubbleControllers.bubbleBarController;
        mBubbleDragController = bubbleControllers.bubbleDragController;
@@ -172,6 +185,10 @@ public class BubbleBarViewController {
                        mBoundsChangeListener.onBoundsChanged();
                    }
                });
        float pinningValue = DisplayController.isTransientTaskbar(mActivity)
                ? PINNING_TRANSIENT
                : PINNING_PERSISTENT;
        mBubbleBarPinning.updateValue(pinningValue);
        mBarView.setController(new BubbleBarView.Controller() {
            @Override
            public float getBubbleBarTranslationY() {
@@ -227,6 +244,11 @@ public class BubbleBarViewController {
        };
    }

    /** Returns animated float property responsible for pinning transition animation. */
    public AnimatedFloat getBubbleBarPinning() {
        return mBubbleBarPinning;
    }

    private BubbleBarFlyoutPositioner createFlyoutPositioner() {
        return new BubbleBarFlyoutPositioner() {

@@ -605,9 +627,11 @@ public class BubbleBarViewController {
        updateBubbleBarIconSizeAndPadding(newIconSize, newPadding, animate);
    }


    private int getBubbleBarIconSizeFromDeviceProfile(Resources res) {
        DeviceProfile deviceProfile = mActivity.getDeviceProfile();
        return getBubbleBarIconSizeFromDeviceProfile(res, mActivity.getDeviceProfile());
    }

    private int getBubbleBarIconSizeFromDeviceProfile(Resources res, DeviceProfile deviceProfile) {
        DisplayMetrics dm = res.getDisplayMetrics();
        float smallIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_SMALL_DP, dm);
@@ -622,7 +646,10 @@ public class BubbleBarViewController {
    }

    private int getBubbleBarPaddingFromDeviceProfile(Resources res) {
        DeviceProfile deviceProfile = mActivity.getDeviceProfile();
        return getBubbleBarPaddingFromDeviceProfile(res, mActivity.getDeviceProfile());
    }

    private int getBubbleBarPaddingFromDeviceProfile(Resources res, DeviceProfile deviceProfile) {
        DisplayMetrics dm = res.getDisplayMetrics();
        float mediumIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_MEDIUM_DP, dm);
@@ -663,7 +690,53 @@ public class BubbleBarViewController {

    private void updateTranslationY() {
        mBarView.setTranslationY(mBubbleBarTranslationY.value + mBubbleBarSwipeUpTranslationY
                + mBubbleBarStashTranslationY);
                + mBubbleBarStashTranslationY + getBubbleBarTranslationYForTaskbarPinning());
    }

    /** Computes translation y for taskbar pinning. */
    private float getBubbleBarTranslationYForTaskbarPinning() {
        if (mTaskbarSharedState == null) return 0f;
        float pinningProgress = mBubbleBarPinning.value;
        if (mTaskbarSharedState.startTaskbarVariantIsTransient) {
            return mapRange(pinningProgress, /* min = */ 0f, mTaskbarTranslationDelta);
        } else {
            return mapRange(pinningProgress, -mTaskbarTranslationDelta, /* max = */ 0f);
        }
    }

    private void setBubbleBarScaleAndPadding(float pinningProgress) {
        Resources res = mActivity.getResources();
        // determine icon scale for pinning
        int persistentIconSize = res.getDimensionPixelSize(
                R.dimen.bubblebar_icon_size_persistent_taskbar);
        int transientIconSize = getBubbleBarIconSizeFromDeviceProfile(res,
                mActivity.getTransientTaskbarDeviceProfile());
        float pinningIconSize = mapRange(pinningProgress, transientIconSize, persistentIconSize);

        // determine bubble bar padding for pinning
        int persistentPadding = res.getDimensionPixelSize(
                R.dimen.bubblebar_icon_spacing_persistent_taskbar);
        int transientPadding = getBubbleBarPaddingFromDeviceProfile(res,
                mActivity.getTransientTaskbarDeviceProfile());
        float pinningPadding = mapRange(pinningProgress, transientPadding, persistentPadding);
        mBarView.setIconSizeAndPaddingForPinning(pinningIconSize, pinningPadding);
    }

    /**
     * Calculates the vertical difference in the bubble bar positions for pinned and transient
     * taskbar modes.
     */
    private int getBubbleBarTranslationDeltaForTaskbar(TaskbarActivityContext activity) {
        Resources res = activity.getResources();
        int persistentBubbleSize = res
                .getDimensionPixelSize(R.dimen.bubblebar_icon_size_persistent_taskbar);
        int persistentSpacingSize = res
                .getDimensionPixelSize(R.dimen.bubblebar_icon_spacing_persistent_taskbar);
        int persistentBubbleBarSize = persistentBubbleSize + persistentSpacingSize * 2;
        int persistentTaskbarHeight = activity.getPersistentTaskbarDeviceProfile().taskbarHeight;
        int persistentBubbleBarY = (persistentTaskbarHeight - persistentBubbleBarSize) / 2;
        int transientBubbleBarY = activity.getTransientTaskbarDeviceProfile().taskbarBottomMargin;
        return transientBubbleBarY - persistentBubbleBarY;
    }

    private void updateScaleX(float scale) {