Merge "Do not run unfold taskbar animation when in portrait" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
41b7f53805
@@ -49,6 +49,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;
|
||||
|
||||
@@ -185,8 +186,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),
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.launcher3.BaseQuickstepLauncher;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
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;
|
||||
@@ -74,8 +75,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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -143,18 +144,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,0 +1,30 @@
|
||||
/*
|
||||
* 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user