Revert to overview coming from the side instead of bottom

Test: Visually checking all of these. As appropriate, repeat in 0, 2, 3
button modes, landscape/portrait/fake landscape, and 3P launcher
- Quick switch from home
- Home to overview
- Overview to home (swipe up)
- Overview to home (tap outside)
- Overview to home (back invocation)
- Quick switch from app
- Swipe up and hold from app
- Dismiss an app
- Empty recents
- Split select state to home
- Modal state to home
Fixes: 185411781

Change-Id: If00a22fee35c832a259bfc62808efbac5990ce2e
This commit is contained in:
Tony Wickham 2021-05-14 14:37:12 -07:00
parent 217e7100bc
commit 82d5a0681d
16 changed files with 53 additions and 154 deletions

View File

@ -29,10 +29,10 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY
import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.app.ActivityOptions;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.ComponentName;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.CancellationSignal;
@ -388,7 +388,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
@Override
public float[] getNormalOverviewScaleAndOffset() {
return SysUINavigationMode.getMode(this).hasGestures
? new float[] {1, NO_OFFSET, 1} : new float[] {1.1f, NO_OFFSET, NO_OFFSET};
? new float[] {1, 1} : new float[] {1.1f, NO_OFFSET};
}
@Override

View File

@ -25,7 +25,6 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TR
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
import static com.android.quickstep.views.RecentsView.TASK_PRIMARY_SPLIT_TRANSLATION;
@ -65,7 +64,6 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
float[] scaleAndOffset = state.getOverviewScaleAndOffset(mLauncher);
RECENTS_SCALE_PROPERTY.set(mRecentsView, scaleAndOffset[0]);
ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mRecentsView, scaleAndOffset[1]);
ADJACENT_PAGE_VERTICAL_OFFSET.set(mRecentsView, scaleAndOffset[2]);
TASK_SECONDARY_TRANSLATION.set(mRecentsView, 0f);
getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0);
@ -97,8 +95,6 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
config.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR));
setter.setFloat(mRecentsView, ADJACENT_PAGE_HORIZONTAL_OFFSET, scaleAndOffset[1],
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_X, LINEAR));
setter.setFloat(mRecentsView, ADJACENT_PAGE_VERTICAL_OFFSET, scaleAndOffset[2],
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR));
setter.setFloat(mRecentsView, TASK_SECONDARY_TRANSLATION, 0f,
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR));
PagedOrientationHandler orientationHandler =

View File

@ -96,6 +96,6 @@ public class BackgroundAppState extends OverviewState {
BaseDraggingActivity activity) {
return new float[] {
((RecentsView) activity.getOverviewPanel()).getMaxScaleForFullScreen(),
NO_OFFSET, NO_OFFSET};
NO_OFFSET};
}
}

View File

@ -78,6 +78,6 @@ public class OverviewModalTaskState extends OverviewState {
float scale = Math.min((float) modalTaskSize.height() / taskSize.y,
(float) modalTaskSize.width() / taskSize.x);
return new float[] {scale, NO_OFFSET, NO_OFFSET};
return new float[] {scale, NO_OFFSET};
}
}

View File

@ -59,7 +59,7 @@ public class OverviewState extends LauncherState {
@Override
public int getTransitionDuration(Context context) {
// In gesture modes, overview comes in all the way from the bottom, so give it more time.
// In gesture modes, overview comes in all the way from the side, so give it more time.
return SysUINavigationMode.INSTANCE.get(context).getMode().hasGestures ? 380 : 250;
}
@ -78,7 +78,7 @@ public class OverviewState extends LauncherState {
@Override
public float[] getOverviewScaleAndOffset(Launcher launcher) {
return new float[] {NO_SCALE, NO_OFFSET, NO_OFFSET};
return new float[] {NO_SCALE, NO_OFFSET};
}
@Override

View File

@ -23,10 +23,11 @@ import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.WorkspaceStateTransitionAnimation.getSpringScaleAnimator;
import static com.android.launcher3.anim.Interpolators.ACCEL;
import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT;
import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7;
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.FINAL_FRAME;
import static com.android.launcher3.anim.Interpolators.INSTANT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
@ -66,11 +67,11 @@ public class QuickstepAtomicAnimationFactory extends
// Scale recents takes before animating in
private static final float RECENTS_PREPARE_SCALE = 1.33f;
// Scale workspace takes before animating in
private static final float WORKSPACE_PREPARE_SCALE_GESTURES = 0.97f;
private static final float WORKSPACE_PREPARE_SCALE_BUTTONS = 0.92f;
// When the overview to home transition reaches this percentage, immediately hide overview and
// start animating away the scrim and animating in workspace.
private static final float OVERVIEW_TO_HOME_HARD_HAND_OFF = 0.4f;
private static final float WORKSPACE_PREPARE_SCALE = 0.92f;
// Constants to specify how to scroll RecentsView to the default page if it's not already there.
private static final int DEFAULT_PAGE = 0;
private static final int PER_PAGE_SCROLL_DURATION = 150;
private static final int MAX_PAGE_SCROLL_DURATION = 750;
// Due to use of physics, duration may differ between devices so we need to calculate and
// cache the value.
@ -85,33 +86,32 @@ public class QuickstepAtomicAnimationFactory extends
StateAnimationConfig config) {
RecentsView overview = mActivity.getOverviewPanel();
if (toState == NORMAL && fromState == OVERVIEW) {
final float workspacePrepareScale;
config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, DEACCEL);
config.setInterpolator(ANIM_SCRIM_FADE, LINEAR);
config.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL);
config.setInterpolator(ANIM_WORKSPACE_FADE, ACCEL);
if (SysUINavigationMode.getMode(mActivity).hasGestures
&& overview.getTaskViewCount() > 0) {
workspacePrepareScale = WORKSPACE_PREPARE_SCALE_GESTURES;
// Overview is going offscreen, so keep it at its current scale and opacity.
config.setInterpolator(ANIM_OVERVIEW_SCALE, FINAL_FRAME);
config.setInterpolator(ANIM_OVERVIEW_FADE, clampToProgress(
FINAL_FRAME, 0f, OVERVIEW_TO_HOME_HARD_HAND_OFF));
config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, clampToProgress(
DEACCEL, 0f, OVERVIEW_TO_HOME_HARD_HAND_OFF));
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, AGGRESSIVE_EASE_IN_OUT);
config.setInterpolator(ANIM_SCRIM_FADE, clampToProgress(
DEACCEL, OVERVIEW_TO_HOME_HARD_HAND_OFF, 1f));
config.setInterpolator(ANIM_WORKSPACE_SCALE, clampToProgress(
DEACCEL, OVERVIEW_TO_HOME_HARD_HAND_OFF, 1f));
config.setInterpolator(ANIM_WORKSPACE_FADE, clampToProgress(
INSTANT, OVERVIEW_TO_HOME_HARD_HAND_OFF, 1f));
config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X,
clampToProgress(FAST_OUT_SLOW_IN, 0, 0.75f));
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, FINAL_FRAME);
} else {
workspacePrepareScale = WORKSPACE_PREPARE_SCALE_BUTTONS;
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL_DEACCEL);
config.setInterpolator(ANIM_OVERVIEW_SCALE, clampToProgress(ACCEL, 0, 0.9f));
config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, LINEAR);
config.setInterpolator(ANIM_SCRIM_FADE, LINEAR);
config.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL);
config.setInterpolator(ANIM_WORKSPACE_FADE, ACCEL);
}
// Scroll RecentsView to page 0 as it goes offscreen, if necessary.
int numPagesToScroll = overview.getNextPage() - DEFAULT_PAGE;
long scrollDuration = Math.min(MAX_PAGE_SCROLL_DURATION,
numPagesToScroll * PER_PAGE_SCROLL_DURATION);
config.duration = Math.max(config.duration, scrollDuration);
overview.snapToPage(DEFAULT_PAGE, Math.toIntExact(config.duration));
Workspace workspace = mActivity.getWorkspace();
// Start from a higher workspace scale, but only if we're invisible so we don't jump.
boolean isWorkspaceVisible = workspace.getVisibility() == VISIBLE;
@ -122,14 +122,14 @@ public class QuickstepAtomicAnimationFactory extends
&& currentChild.getShortcutsAndWidgets().getAlpha() > 0;
}
if (!isWorkspaceVisible) {
workspace.setScaleX(workspacePrepareScale);
workspace.setScaleY(workspacePrepareScale);
workspace.setScaleX(WORKSPACE_PREPARE_SCALE);
workspace.setScaleY(WORKSPACE_PREPARE_SCALE);
}
Hotseat hotseat = mActivity.getHotseat();
boolean isHotseatVisible = hotseat.getVisibility() == VISIBLE && hotseat.getAlpha() > 0;
if (!isHotseatVisible) {
hotseat.setScaleX(workspacePrepareScale);
hotseat.setScaleY(workspacePrepareScale);
hotseat.setScaleX(WORKSPACE_PREPARE_SCALE);
hotseat.setScaleY(WORKSPACE_PREPARE_SCALE);
}
} else if ((fromState == NORMAL || fromState == HINT_STATE
|| fromState == HINT_STATE_TWO_BUTTON) && toState == OVERVIEW) {

View File

@ -43,7 +43,6 @@ import static com.android.launcher3.touch.BothAxesSwipeDetector.DIRECTION_UP;
import static com.android.launcher3.util.DisplayController.getSingleFrameMs;
import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.views.RecentsView.CONTENT_ALPHA;
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
@ -224,7 +223,6 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
// Set RecentView's initial properties.
RECENTS_SCALE_PROPERTY.set(mRecentsView, fromState.getOverviewScaleAndOffset(mLauncher)[0]);
ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mRecentsView, 1f);
ADJACENT_PAGE_VERTICAL_OFFSET.set(mRecentsView, 0f);
mRecentsView.setContentAlpha(1);
mRecentsView.setFullscreenProgress(fromState.getOverviewFullscreenProgress());
mLauncher.getActionsView().getVisibilityAlpha().setValue(

View File

@ -31,7 +31,6 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_F
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE;
import static com.android.launcher3.util.SystemUiController.UI_STATE_FULLSCREEN_TASK;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
@ -113,7 +112,6 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll
RECENTS_SCALE_PROPERTY.set(mOverviewPanel,
QUICK_SWITCH.getOverviewScaleAndOffset(mLauncher)[0] * 0.85f);
ADJACENT_PAGE_HORIZONTAL_OFFSET.set(mOverviewPanel, 1f);
ADJACENT_PAGE_VERTICAL_OFFSET.set(mOverviewPanel, 0f);
mOverviewPanel.setContentAlpha(1);
mCurrentAnimation = mLauncher.getStateManager()

View File

@ -23,8 +23,8 @@ import static com.android.quickstep.AbsSwipeUpHandler.RECENTS_ATTACH_DURATION;
import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS;
import static com.android.quickstep.SysUINavigationMode.getMode;
import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_FADE_ANIM;
import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_TRANSLATE_Y_ANIM;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_TRANSLATE_X_ANIM;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION;
@ -461,17 +461,17 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T
float fromTranslation = attached ? 1 : 0;
float toTranslation = attached ? 0 : 1;
mActivity.getStateManager()
.cancelStateElementAnimation(INDEX_RECENTS_TRANSLATE_Y_ANIM);
.cancelStateElementAnimation(INDEX_RECENTS_TRANSLATE_X_ANIM);
if (!recentsView.isShown() && animate) {
ADJACENT_PAGE_VERTICAL_OFFSET.set(recentsView, fromTranslation);
ADJACENT_PAGE_HORIZONTAL_OFFSET.set(recentsView, fromTranslation);
} else {
fromTranslation = ADJACENT_PAGE_VERTICAL_OFFSET.get(recentsView);
fromTranslation = ADJACENT_PAGE_HORIZONTAL_OFFSET.get(recentsView);
}
if (!animate) {
ADJACENT_PAGE_VERTICAL_OFFSET.set(recentsView, toTranslation);
ADJACENT_PAGE_HORIZONTAL_OFFSET.set(recentsView, toTranslation);
} else {
mActivity.getStateManager().createStateElementAnimation(
INDEX_RECENTS_TRANSLATE_Y_ANIM,
INDEX_RECENTS_TRANSLATE_X_ANIM,
fromTranslation, toTranslation).start();
}

View File

@ -23,7 +23,6 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TR
import static com.android.launcher3.states.StateAnimationConfig.ANIM_SCRIM_FADE;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
@ -89,8 +88,6 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState
config.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR));
setter.setFloat(mRecentsView, ADJACENT_PAGE_HORIZONTAL_OFFSET, scaleAndOffset[1],
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_X, LINEAR));
setter.setFloat(mRecentsView, ADJACENT_PAGE_VERTICAL_OFFSET, scaleAndOffset[2],
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR));
setter.setFloat(mRecentsView, TASK_SECONDARY_TRANSLATION, 0f,
config.getInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, LINEAR));

View File

@ -126,7 +126,7 @@ public class RecentsState implements BaseState<RecentsState> {
}
public float[] getOverviewScaleAndOffset(RecentsActivity activity) {
return new float[] { NO_SCALE, NO_OFFSET, NO_OFFSET };
return new float[] { NO_SCALE, NO_OFFSET };
}
/**
@ -170,7 +170,7 @@ public class RecentsState implements BaseState<RecentsState> {
@Override
public float[] getOverviewScaleAndOffset(RecentsActivity activity) {
return new float[] { NO_SCALE, NO_OFFSET, 1 };
return new float[] { NO_SCALE, 1 };
}
}
}

View File

@ -15,7 +15,7 @@
*/
package com.android.quickstep.util;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_VERTICAL_OFFSET;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import android.animation.Animator;
import android.animation.ObjectAnimator;
@ -31,7 +31,7 @@ public class RecentsAtomicAnimationFactory<ACTIVITY_TYPE extends StatefulActivit
extends AtomicAnimationFactory<STATE_TYPE> {
public static final int INDEX_RECENTS_FADE_ANIM = AtomicAnimationFactory.NEXT_INDEX + 0;
public static final int INDEX_RECENTS_TRANSLATE_Y_ANIM = AtomicAnimationFactory.NEXT_INDEX + 1;
public static final int INDEX_RECENTS_TRANSLATE_X_ANIM = AtomicAnimationFactory.NEXT_INDEX + 1;
private static final int MY_ANIM_COUNT = 2;
@ -48,14 +48,14 @@ public class RecentsAtomicAnimationFactory<ACTIVITY_TYPE extends StatefulActivit
case INDEX_RECENTS_FADE_ANIM:
return ObjectAnimator.ofFloat(mActivity.getOverviewPanel(),
RecentsView.CONTENT_ALPHA, values);
case INDEX_RECENTS_TRANSLATE_Y_ANIM: {
case INDEX_RECENTS_TRANSLATE_X_ANIM: {
RecentsView rv = mActivity.getOverviewPanel();
return new SpringAnimationBuilder(mActivity)
.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE)
.setDampingRatio(0.8f)
.setStiffness(250)
.setValues(values)
.build(rv, ADJACENT_PAGE_VERTICAL_OFFSET);
.build(rv, ADJACENT_PAGE_HORIZONTAL_OFFSET);
}
default:
return super.createStateElementAnimation(index, values);

View File

@ -231,22 +231,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
};
public static final FloatProperty<RecentsView> ADJACENT_PAGE_VERTICAL_OFFSET =
new FloatProperty<RecentsView>("adjacentPageVerticalOffset") {
@Override
public void setValue(RecentsView recentsView, float v) {
if (recentsView.mAdjacentPageVerticalOffset != v) {
recentsView.mAdjacentPageVerticalOffset = v;
recentsView.updateVerticalPageOffsets();
}
}
@Override
public Float get(RecentsView recentsView) {
return recentsView.mAdjacentPageVerticalOffset;
}
};
/**
* Can be used to tint the color of the RecentsView to simulate a scrim that can views
* excluded from. Really should be a proper scrim.
@ -276,8 +260,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
@Override
public void setValue(RecentsView recentsView, float v) {
recentsView.setTaskViewsResistanceTranslation(v);
recentsView.mLastComputedTaskBottomPushOutDistance = null;
recentsView.updateVerticalPageOffsets();
}
@Override
@ -327,11 +309,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
view.setScaleY(scale);
view.mLastComputedTaskStartPushOutDistance = null;
view.mLastComputedTaskEndPushOutDistance = null;
view.mLastComputedTaskBottomPushOutDistance = null;
view.mLiveTileTaskViewSimulator.recentsViewScale.value = scale;
view.setTaskViewsResistanceTranslation(view.mTaskViewsSecondaryTranslation);
view.updatePageOffsets();
view.updateVerticalPageOffsets();
}
@Override
@ -370,7 +350,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
// How much a task that is directly offscreen will be pushed out due to RecentsView scale/pivot.
protected Float mLastComputedTaskStartPushOutDistance = null;
protected Float mLastComputedTaskEndPushOutDistance = null;
protected Float mLastComputedTaskBottomPushOutDistance = null;
protected boolean mEnableDrawingLiveTile = false;
protected final Rect mTempRect = new Rect();
protected final RectF mTempRectF = new RectF();
@ -415,7 +394,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
private boolean mOverviewFullscreenEnabled;
private float mAdjacentPageHorizontalOffset = 0;
private float mAdjacentPageVerticalOffset = 0;
protected float mTaskViewsSecondaryTranslation = 0;
protected float mTaskViewsPrimarySplitTranslation = 0;
protected float mTaskViewsSecondarySplitTranslation = 0;
@ -1214,7 +1192,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
// Update the set of visible task's data
loadVisibleTaskData(TaskView.FLAG_UPDATE_ALL);
setTaskModalness(0);
updateVerticalPageOffsets();
setColorTint(0);
}
@ -2733,9 +2710,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
setTaskModalness(mTaskModalness);
mLastComputedTaskStartPushOutDistance = null;
mLastComputedTaskEndPushOutDistance = null;
mLastComputedTaskBottomPushOutDistance = null;
updatePageOffsets();
updateVerticalPageOffsets();
setImportantForAccessibility(isModal() ? IMPORTANT_FOR_ACCESSIBILITY_NO
: IMPORTANT_FOR_ACCESSIBILITY_AUTO);
}
@ -2752,7 +2727,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
float midpointOffsetSize = 0;
float leftOffsetSize = midpoint - 1 >= 0
? -getHorizontalOffsetSize(midpoint - 1, midpoint, offset)
? getHorizontalOffsetSize(midpoint - 1, midpoint, offset)
: 0;
float rightOffsetSize = midpoint + 1 < count
? getHorizontalOffsetSize(midpoint + 1, midpoint, offset)
@ -2889,64 +2864,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
return distanceToOffscreen * offsetProgress;
}
private void updateVerticalPageOffsets() {
float offset = mAdjacentPageVerticalOffset;
int count = getTaskViewCount();
TaskView runningTask = mRunningTaskId == -1 || !mRunningTaskTileHidden
? null : getTaskView(mRunningTaskId);
int midpoint = runningTask == null ? -1 : indexOfChild(runningTask);
float offsetSize = getVerticalOffsetSize(offset);
float midpointOffsetSize = 0;
for (int i = 0; i < count; i++) {
float translation = i == midpoint
? midpointOffsetSize
: offsetSize;
int directionFactor = mOrientationHandler.getSecondaryTranslationDirectionFactor() * -1;
translation *= directionFactor;
TaskView child = getTaskViewAt(i);
FloatProperty translationProperty = child.getSecondaryTaskOffsetTranslationProperty();
translationProperty.set(child, translation);
if (LIVE_TILE.get() && mEnableDrawingLiveTile && i == getRunningTaskIndex()) {
mLiveTileTaskViewSimulator.taskSecondaryTranslation.value = translation;
redrawLiveTile();
}
}
}
/**
* Computes the distance to offset the given child such that it is completely offscreen when
* translating away from its position in overview.
* @param offsetProgress From 0 to 1 where 0 means no offset and 1 means offset offscreen.
*/
private float getVerticalOffsetSize(float offsetProgress) {
if (offsetProgress == 0) {
// Don't bother calculating everything below if we won't offset anyway.
return 0;
}
// First, find the distance to offscreen from the normal (centered) task position.
mTempRectF.set(mLastComputedTaskSize);
RectF taskPosition = mTempRectF;
float desiredTop = getHeight();
float distanceToOffscreen = desiredTop - taskPosition.top;
// Next, we need to account for the resistance translation if any (e.g. long swipe up).
float translationY = mTaskViewsSecondaryTranslation;
distanceToOffscreen -= translationY;
// Finally, we need to account for RecentsView scale, because it moves tasks based on its
// pivot. To do this, we move the task position to where it would be offscreen at scale = 1
// (computed above), then we apply the scale via getMatrix() to determine how much that
// moves the task from its desired position, and adjust the computed distance accordingly.
if (mLastComputedTaskBottomPushOutDistance == null) {
taskPosition.offsetTo(0, desiredTop + translationY);
getMatrix().mapRect(taskPosition);
mLastComputedTaskBottomPushOutDistance = (taskPosition.top - desiredTop) / getScaleY();
}
distanceToOffscreen -= mLastComputedTaskBottomPushOutDistance;
return distanceToOffscreen * offsetProgress;
}
protected void setTaskViewsResistanceTranslation(float translation) {
mTaskViewsSecondaryTranslation = translation;
for (int i = 0; i < getTaskViewCount(); i++) {
@ -3598,11 +3515,11 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
int overScrollShift = getOverScrollShift();
if (mAdjacentPageVerticalOffset > 0) {
if (mAdjacentPageHorizontalOffset > 0) {
// Don't dampen the scroll (due to overscroll) if the adjacent tasks are offscreen, so
// that the page can move freely given there's no visual indication why it shouldn't.
overScrollShift = (int) Utilities.mapRange(mAdjacentPageVerticalOffset, overScrollShift,
getUndampedOverScrollShift());
overScrollShift = (int) Utilities.mapRange(mAdjacentPageHorizontalOffset,
overScrollShift, getUndampedOverScrollShift());
}
return getScrollForPage(pageIndex) - mOrientationHandler.getPrimaryScroll(this)
+ overScrollShift;

View File

@ -1133,11 +1133,6 @@ public class TaskView extends FrameLayout implements Reusable {
TASK_OFFSET_TRANSLATION_X, TASK_OFFSET_TRANSLATION_Y);
}
public FloatProperty<TaskView> getSecondaryTaskOffsetTranslationProperty() {
return getPagedOrientationHandler().getSecondaryValue(
TASK_OFFSET_TRANSLATION_X, TASK_OFFSET_TRANSLATION_Y);
}
public FloatProperty<TaskView> getTaskResistanceTranslationProperty() {
return getPagedOrientationHandler().getSecondaryValue(
TASK_RESISTANCE_TRANSLATION_X, TASK_RESISTANCE_TRANSLATION_Y);

View File

@ -2801,7 +2801,7 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
* @see LauncherState#getOverviewScaleAndOffset(Launcher)
*/
public float[] getNormalOverviewScaleAndOffset() {
return new float[] {NO_SCALE, NO_OFFSET, NO_OFFSET};
return new float[] {NO_SCALE, NO_OFFSET};
}
/**

View File

@ -172,12 +172,10 @@ public abstract class LauncherState implements BaseState<LauncherState> {
}
/**
* Returns an array of three elements.
* Returns an array of two elements.
* The first specifies the scale for the overview
* The second is the factor ([0, 1], 0 => center-screen; 1 => offscreen) by which overview
* should be shifted horizontally.
* The third is the factor ([0, 1], 0 => center-screen; 1 => offscreen) by which overview
* should be shifted vertically.
*/
public float[] getOverviewScaleAndOffset(Launcher launcher) {
return launcher.getNormalOverviewScaleAndOffset();