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

Commit fe9ec740 authored by Nick Chameyev's avatar Nick Chameyev
Browse files

Do not run unfold taskbar animation when in portrait

Limits taskbar icons translation animation
only when the display is in natural orientation.

Bug: 219958588
Test: fold/unfold in portrait and landscape
Change-Id: I33e26829ae37f1df39e8c7234f98d20eb7993b93
parent c1d401d1
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.view.Gravity;
import android.view.RoundedCorner;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.widget.FrameLayout;
import android.widget.Toast;

@@ -178,8 +179,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
                new TaskbarDragLayerController(this, mDragLayer),
                new TaskbarViewController(this, taskbarView),
                new TaskbarScrimViewController(this, taskbarScrimView),
                new TaskbarUnfoldAnimationController(unfoldTransitionProgressProvider,
                        mWindowManager),
                new TaskbarUnfoldAnimationController(this, unfoldTransitionProgressProvider,
                        mWindowManager, WindowManagerGlobal.getWindowManagerService()),
                new TaskbarKeyguardController(this),
                new StashedHandleViewController(this, stashedHandleView),
                new TaskbarStashController(this),
+5 −2
Original line number Diff line number Diff line
@@ -40,8 +40,8 @@ import androidx.annotation.Nullable;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.unfold.NonDestroyableScopedUnfoldTransitionProgressProvider;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.SettingsCache;
@@ -78,8 +78,11 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen
    private final SimpleBroadcastReceiver mShutdownReceiver;

    // The source for this provider is set when Launcher is available
    // We use 'non-destroyable' version here so the original provider won't be destroyed
    // as it is tied to the activity lifecycle, not the taskbar lifecycle.
    // It's destruction/creation will be managed by the activity.
    private final ScopedUnfoldTransitionProgressProvider mUnfoldProgressProvider =
            new ScopedUnfoldTransitionProgressProvider();
            new NonDestroyableScopedUnfoldTransitionProgressProvider();

    private TaskbarActivityContext mTaskbarActivityContext;
    private StatefulActivity mActivity;
+17 −8
Original line number Diff line number Diff line
@@ -15,12 +15,14 @@
 */
package com.android.launcher3.taskbar;

import android.view.IWindowManager;
import android.view.View;
import android.view.WindowManager;

import com.android.quickstep.util.LauncherViewsMoveFromCenterTranslationApplier;
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener;
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;

import java.io.PrintWriter;
@@ -31,14 +33,18 @@ import java.io.PrintWriter;
public class TaskbarUnfoldAnimationController implements
        TaskbarControllers.LoggableTaskbarController {

    private final ScopedUnfoldTransitionProgressProvider mUnfoldTransitionProgressProvider;
    private final ScopedUnfoldTransitionProgressProvider mScopedUnfoldTransitionProgressProvider;
    private final NaturalRotationUnfoldProgressProvider mNaturalUnfoldTransitionProgressProvider;
    private final UnfoldMoveFromCenterAnimator mMoveFromCenterAnimator;
    private final TransitionListener mTransitionListener = new TransitionListener();
    private TaskbarViewController mTaskbarViewController;

    public TaskbarUnfoldAnimationController(ScopedUnfoldTransitionProgressProvider
            unfoldTransitionProgressProvider, WindowManager windowManager) {
        mUnfoldTransitionProgressProvider = unfoldTransitionProgressProvider;
    public TaskbarUnfoldAnimationController(BaseTaskbarContext context,
            ScopedUnfoldTransitionProgressProvider source,
            WindowManager windowManager, IWindowManager iWindowManager) {
        mScopedUnfoldTransitionProgressProvider = source;
        mNaturalUnfoldTransitionProgressProvider =
                new NaturalRotationUnfoldProgressProvider(context, iWindowManager, source);
        mMoveFromCenterAnimator = new UnfoldMoveFromCenterAnimator(windowManager,
                new LauncherViewsMoveFromCenterTranslationApplier());
    }
@@ -48,18 +54,21 @@ public class TaskbarUnfoldAnimationController implements
     * @param taskbarControllers references to all other taskbar controllers
     */
    public void init(TaskbarControllers taskbarControllers) {
        mNaturalUnfoldTransitionProgressProvider.init();
        mTaskbarViewController = taskbarControllers.taskbarViewController;
        mTaskbarViewController.addOneTimePreDrawListener(() ->
                mUnfoldTransitionProgressProvider.setReadyToHandleTransition(true));
        mUnfoldTransitionProgressProvider.addCallback(mTransitionListener);
                mScopedUnfoldTransitionProgressProvider.setReadyToHandleTransition(true));
        mNaturalUnfoldTransitionProgressProvider.addCallback(mTransitionListener);
    }

    /**
     * Destroys the controller
     */
    public void onDestroy() {
        mUnfoldTransitionProgressProvider.setReadyToHandleTransition(false);
        mUnfoldTransitionProgressProvider.removeCallback(mTransitionListener);
        mScopedUnfoldTransitionProgressProvider.setReadyToHandleTransition(false);
        mNaturalUnfoldTransitionProgressProvider.removeCallback(mTransitionListener);
        mNaturalUnfoldTransitionProgressProvider.destroy();
        mTaskbarViewController = null;
    }

    @Override
+5 −14
Original line number Diff line number Diff line
@@ -20,13 +20,14 @@ import static com.android.launcher3.Utilities.squaredHypot;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.quickstep.AnimatedFloat.VALUE;

import android.annotation.NonNull;
import android.graphics.Rect;
import android.util.FloatProperty;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnPreDrawListener;

import androidx.core.view.OneShotPreDrawListener;

import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeviceProfile;
@@ -142,18 +143,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
     * drawing a frame and invoked only once
     * @param listener callback that will be invoked before drawing the next frame
     */
    public void addOneTimePreDrawListener(Runnable listener) {
        mTaskbarView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                final ViewTreeObserver viewTreeObserver = mTaskbarView.getViewTreeObserver();
                if (viewTreeObserver.isAlive()) {
                    listener.run();
                    viewTreeObserver.removeOnPreDrawListener(this);
                }
                return true;
            }
        });
    public void addOneTimePreDrawListener(@NonNull Runnable listener) {
        OneShotPreDrawListener.add(mTaskbarView, listener);
    }

    public Rect getIconLayoutBounds() {
+30 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.
 */
package com.android.launcher3.taskbar.unfold;

import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;

/**
 * ScopedUnfoldTransitionProgressProvider that doesn't propagate destroy method
 */
public class NonDestroyableScopedUnfoldTransitionProgressProvider extends
        ScopedUnfoldTransitionProgressProvider {

    @Override
    public void destroy() {
        // no-op
    }
}