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

Commit 41e7328c authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing LauncherState not getting applied in some cases

> In case of swipe-up from homescreen, super method was not called everytime
> When swiping up from an app, repply() state was skipping as we didn't finish the
  last animation, leading to views staying visible and interactive
> Intercepting touch in RecentsView and pagesView based on visibility

Bug: 76467534

Change-Id: Ia5ef58d508b656f371a32cd2f1de00dd18c6aa5c
parent 76e2775b
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -207,6 +207,14 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
    @Override
    protected void updateSwipeCompleteAnimation(ValueAnimator animator, long expectedDuration,
            LauncherState targetState, float velocity, boolean isFling) {
        handleFirstSwipeToOverview(animator, expectedDuration, targetState, velocity, isFling);
        super.updateSwipeCompleteAnimation(animator, expectedDuration, targetState,
                velocity, isFling);
    }

    private void handleFirstSwipeToOverview(final ValueAnimator animator,
            final long expectedDuration, final LauncherState targetState, final float velocity,
            final boolean isFling) {
        if (mFromState == NORMAL && mToState == OVERVIEW && targetState == OVERVIEW) {
            mFinishFastOnSecondTouch = true;

@@ -248,8 +256,6 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr

            if (currentFraction < LINEAR_SCALE_LIMIT) {
                mAllAppsInterpolatorWrapper.baseInterpolator = LINEAR;
                super.updateSwipeCompleteAnimation(animator, expectedDuration, targetState,
                        velocity, isFling);
                return;
            }
            float extraValue = mAllAppsDampedInterpolator.getInterpolation(currentFraction) - 1;
@@ -267,8 +273,6 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
            return;
        }
        mFinishFastOnSecondTouch = false;
        super.updateSwipeCompleteAnimation(animator, expectedDuration, targetState,
                velocity, isFling);
    }

    @Override
+4 −0
Original line number Diff line number Diff line
@@ -749,6 +749,10 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
    }

    private void setupLauncherUiAfterSwipeUpAnimation() {
        if (mLauncherTransitionController != null) {
            mLauncherTransitionController.getAnimationPlayer().end();
            mLauncherTransitionController = null;
        }
        mActivityControlHelper.onSwipeUpComplete(mActivity);

        // Animate the first icon.
+8 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.util.FloatProperty;
import android.util.SparseBooleanArray;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;

@@ -275,6 +276,13 @@ public abstract class RecentsView<T extends BaseActivity>
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        // Do not let touch escape to siblings below this view.
        return true;
    }

    private void applyLoadPlan(RecentsTaskLoadPlan loadPlan) {
        if (mPendingAnimation != null) {
            mPendingAnimation.addEndListener((b) -> applyLoadPlan(loadPlan));
+12 −0
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package com.android.launcher3;

import static android.view.MotionEvent.ACTION_DOWN;

import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;

@@ -173,6 +176,15 @@ public class ShortcutAndWidgetContainer extends ViewGroup {
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (ev.getAction() == ACTION_DOWN && getAlpha() == 0) {
            // Dont let children handle touch, if we are not visible.
            return true;
        }
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean shouldDelayChildPressedState() {
        return false;