lawnchair
lawnchair copied to clipboard
[BUG] Surface Duo: app drawer crash if animations disabled
Describe the bug
Hi, I have found a bug with the app drawer animation on my Surface Duo (Android 11). I have completely disabled animations on the developer settings, and if I use only one screen swiping up to open the app drawer produces an exception. Strangely, it works if I use two screens or landscape mode.
Stacktrace:
Lawnchair bug report 5 may. 2022 15:33:54
version: 12.0.0 Dev (cc9735b) (120005)
commit: cc9735b
build.brand: surface
build.device: duo
build.display: 2022.115.10
build.fingerprint: surface/duo/duo:11/2022.115.10/202201150010:user/release-keys
build.hardware: surfaceduo
build.id: 2022.115.10
build.manufacturer: Microsoft
build.model: Surface Duo
build.product: duo
build.type: user
version.codename: REL
version.incremental: 202201150010
version.release: 11
version.sdk_int: 30
display.density_dpi: 340
error: Uncaught exception
java.lang.IllegalArgumentException: Animators cannot have negative duration: -506
at android.animation.ValueAnimator.setDuration(ValueAnimator.java:598)
at android.animation.ObjectAnimator.setDuration(ObjectAnimator.java:910)
at android.animation.ObjectAnimator.setDuration(ObjectAnimator.java:71)
at com.android.launcher3.anim.PendingAnimation.add(PendingAnimation.java:72)
at com.android.launcher3.anim.PendingAnimation.add(PendingAnimation.java:68)
at com.android.launcher3.allapps.AllAppsTransitionController.setStateWithAnimation(AllAppsTransitionController.java:169)
at com.android.launcher3.allapps.AllAppsTransitionController.setStateWithAnimation(AllAppsTransitionController.java:58)
at com.android.launcher3.statemanager.StateManager.createAnimationToNewWorkspaceInternal(StateManager.java:317)
at com.android.launcher3.statemanager.StateManager.createAnimationToNewWorkspace(StateManager.java:308)
at com.android.launcher3.uioverrides.touchcontrollers.PortraitStatesTouchController.initCurrentAnimation(PortraitStatesTouchController.java:197)
at com.android.launcher3.uioverrides.touchcontrollers.NoButtonNavbarToOverviewTouchController.initCurrentAnimation(NoButtonNavbarToOverviewTouchController.java:102)
at com.android.launcher3.touch.AbstractStateChangeTouchController.reinitCurrentAnimation(AbstractStateChangeTouchController.java:169)
at com.android.launcher3.touch.AbstractStateChangeTouchController.onDragStart(AbstractStateChangeTouchController.java:189)
at com.android.launcher3.uioverrides.touchcontrollers.NoButtonNavbarToOverviewTouchController.onDragStart(NoButtonNavbarToOverviewTouchController.java:112)
at com.android.launcher3.touch.SingleAxisSwipeDetector.reportDragStartInternal(SingleAxisSwipeDetector.java:173)
at com.android.launcher3.touch.BaseSwipeDetector.reportDragStart(BaseSwipeDetector.java:245)
at com.android.launcher3.touch.BaseSwipeDetector.setState(BaseSwipeDetector.java:217)
at com.android.launcher3.touch.BaseSwipeDetector.onTouchEvent(BaseSwipeDetector.java:174)
at com.android.launcher3.touch.AbstractStateChangeTouchController.onControllerTouchEvent(AbstractStateChangeTouchController.java:135)
at com.android.launcher3.touch.AbstractStateChangeTouchController.onControllerInterceptTouchEvent(AbstractStateChangeTouchController.java:117)
at com.android.launcher3.uioverrides.touchcontrollers.PortraitStatesTouchController.onControllerInterceptTouchEvent(PortraitStatesTouchController.java:247)
at com.android.launcher3.views.BaseDragLayer.findControllerToHandleTouch(BaseDragLayer.java:186)
at com.android.launcher3.views.BaseDragLayer.findActiveController(BaseDragLayer.java:196)
at com.android.launcher3.views.BaseDragLayer.onInterceptTouchEvent(BaseDragLayer.java:166)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2664)
at com.android.launcher3.views.BaseDragLayer.dispatchTouchEvent(BaseDragLayer.java:303)
at com.android.launcher3.dragndrop.DragLayer.dispatchTouchEvent(DragLayer.java:214)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:503)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1922)
at android.app.Activity.dispatchTouchEvent(Activity.java:4125)
at com.android.launcher3.Launcher.dispatchTouchEvent(Launcher.java:1948)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:461)
at android.view.View.dispatchPointerEvent(View.java:14582)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6135)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5938)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5429)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5604)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5661)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8213)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8150)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8111)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8391)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:8348)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:8430)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)
at android.view.Choreographer.doCallbacks(Choreographer.java:796)
at android.view.Choreographer.doFrame(Choreographer.java:724)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7724)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
As a workaround, I have traced the negative value the Animator is receiving as being generated by method AllAppsTransitionController.getShiftRange(). If I return the absolute value everything works perfectly, altought I don't know if that change has any collateral effect:
public class AllAppsTransitionController
implements StateHandler<LauncherState>, OnDeviceProfileChangeListener {
...
public float getShiftRange() {
//return mShiftRange;
return Math.abs(mShiftRange);
}
...
}
Steps to reproduce
Steps to reproduce the behavior:
- Make sure the device is using only one screen in portrait mode.
- Disable all animations on Settings > System > Developer settings.
- Open Lawnchair and swipe up to see all your apps. It should crash and restart.
Expected behavior
The app drawer is opened.
Screenshots
No response
Device information
- Device: Surface Duo
- OS: Android 11
- App version: 12.0.0 Alpha 5
Additional context
No response
This issue is stale because it has been open for 90 days with no activity. Remove stale label or comment or this will be closed in 7 days.
Just an update to this.
Opening (specifically) it no longer crashes the launcher with the latest test release. I am able to open it, configure settings, and interact with the desktop.
When I attempt to open the app drawer however, same crash error type.
This issue is stale because it has been open for 90 days with no activity. Remove stale label or comment or this will be closed in 7 days.
This issue was closed because it has been stale for 7 days with no activity.