Add translationX to overview state
States return ScaleAndTranslation instead of float[]. Also separate overview translate interpolator from overview scale interpolator. Change-Id: I5e65dde3f436055ff5e7f5736f1a4b712377b9cb
This commit is contained in:
parent
9244f518f2
commit
bc23440d73
|
@ -43,8 +43,8 @@ public class OverviewState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getOverviewScaleAndTranslationY(Launcher launcher) {
|
||||
return new float[] {1f, 0f};
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1f, 0f, 0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -52,7 +52,7 @@ public class BackgroundAppState extends OverviewState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getOverviewScaleAndTranslationY(Launcher launcher) {
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
// Initialize the recents view scale to what it would be when starting swipe up
|
||||
RecentsView recentsView = launcher.getOverviewPanel();
|
||||
recentsView.getTaskSize(sTempRect);
|
||||
|
@ -71,7 +71,7 @@ public class BackgroundAppState extends OverviewState {
|
|||
}
|
||||
}
|
||||
float scale = (float) appWidth / sTempRect.width();
|
||||
return new float[] { scale, 0f };
|
||||
return new ScaleAndTranslation(scale, 0f, 0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -56,7 +56,7 @@ public class OverviewState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
RecentsView recentsView = launcher.getOverviewPanel();
|
||||
Workspace workspace = launcher.getWorkspace();
|
||||
View workspacePage = workspace.getPageAt(workspace.getCurrentPage());
|
||||
|
@ -65,12 +65,12 @@ public class OverviewState extends LauncherState {
|
|||
recentsView.getTaskSize(sTempRect);
|
||||
float scale = (float) sTempRect.width() / workspacePageWidth;
|
||||
float parallaxFactor = 0.5f;
|
||||
return new float[]{scale, 0, -getDefaultSwipeHeight(launcher) * parallaxFactor};
|
||||
return new ScaleAndTranslation(scale, 0, -getDefaultSwipeHeight(launcher) * parallaxFactor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float[] getOverviewScaleAndTranslationY(Launcher launcher) {
|
||||
return new float[] {1f, 0f};
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1f, 0f, 0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
package com.android.quickstep;
|
||||
|
||||
import static android.view.View.TRANSLATION_Y;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
|
||||
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
|
@ -39,10 +38,6 @@ import android.view.MotionEvent;
|
|||
import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
|
@ -67,6 +62,10 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
|
|||
import java.util.function.BiPredicate;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
|
||||
/**
|
||||
* {@link ActivityControlHelper} for the in-launcher recents.
|
||||
*/
|
||||
|
@ -305,7 +304,7 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
|
|||
// starting to line up the side pages during swipe up)
|
||||
float prevRvScale = recentsView.getScaleX();
|
||||
float prevRvTransY = recentsView.getTranslationY();
|
||||
float targetRvScale = endState.getOverviewScaleAndTranslationY(launcher)[0];
|
||||
float targetRvScale = endState.getOverviewScaleAndTranslation(launcher).scale;
|
||||
SCALE_PROPERTY.set(recentsView, targetRvScale);
|
||||
recentsView.setTranslationY(0);
|
||||
ClipAnimationHelper clipHelper = new ClipAnimationHelper(launcher);
|
||||
|
|
|
@ -60,10 +60,10 @@ public class AllAppsState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
float[] scaleAndTranslation = LauncherState.OVERVIEW.getWorkspaceScaleAndTranslation(
|
||||
launcher);
|
||||
scaleAndTranslation[0] = 1;
|
||||
public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
ScaleAndTranslation scaleAndTranslation = LauncherState.OVERVIEW
|
||||
.getWorkspaceScaleAndTranslation(launcher);
|
||||
scaleAndTranslation.scale = 1;
|
||||
return scaleAndTranslation;
|
||||
}
|
||||
|
||||
|
@ -78,9 +78,9 @@ public class AllAppsState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getOverviewScaleAndTranslationY(Launcher launcher) {
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
float slightParallax = -launcher.getDeviceProfile().allAppsCellHeightPx * 0.3f;
|
||||
return new float[] {0.9f, slightParallax};
|
||||
return new ScaleAndTranslation(0.9f, 0f, slightParallax);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.android.launcher3.uioverrides;
|
|||
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
|
||||
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE;
|
||||
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE;
|
||||
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE;
|
||||
import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW;
|
||||
import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT;
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
|
@ -29,6 +30,7 @@ import android.view.animation.Interpolator;
|
|||
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherState.ScaleAndTranslation;
|
||||
import com.android.launcher3.LauncherStateManager.AnimationConfig;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
|
@ -54,9 +56,15 @@ public abstract class BaseRecentsViewStateController<T extends View>
|
|||
|
||||
@Override
|
||||
public void setState(@NonNull LauncherState state) {
|
||||
float[] scaleTranslationY = state.getOverviewScaleAndTranslationY(mLauncher);
|
||||
SCALE_PROPERTY.set(mRecentsView, scaleTranslationY[0]);
|
||||
mRecentsView.setTranslationY(scaleTranslationY[1]);
|
||||
ScaleAndTranslation scaleAndTranslation = state
|
||||
.getOverviewScaleAndTranslation(mLauncher);
|
||||
SCALE_PROPERTY.set(mRecentsView, scaleAndTranslation.scale);
|
||||
float translationX = scaleAndTranslation.translationX;
|
||||
if (mRecentsView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
|
||||
translationX = -translationX;
|
||||
}
|
||||
mRecentsView.setTranslationX(translationX);
|
||||
mRecentsView.setTranslationY(scaleAndTranslation.translationY);
|
||||
getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0);
|
||||
}
|
||||
|
||||
|
@ -83,28 +91,22 @@ public abstract class BaseRecentsViewStateController<T extends View>
|
|||
void setStateWithAnimationInternal(@NonNull final LauncherState toState,
|
||||
@NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) {
|
||||
PropertySetter setter = config.getPropertySetter(builder);
|
||||
float[] scaleTranslationY = toState.getOverviewScaleAndTranslationY(mLauncher);
|
||||
Interpolator scaleAndTransYInterpolator = getScaleAndTransYInterpolator(toState, builder);
|
||||
setter.setFloat(mRecentsView, SCALE_PROPERTY, scaleTranslationY[0],
|
||||
scaleAndTransYInterpolator);
|
||||
setter.setFloat(mRecentsView, View.TRANSLATION_Y, scaleTranslationY[1],
|
||||
scaleAndTransYInterpolator);
|
||||
ScaleAndTranslation scaleAndTranslation = toState.getOverviewScaleAndTranslation(mLauncher);
|
||||
Interpolator scaleInterpolator = builder.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR);
|
||||
setter.setFloat(mRecentsView, SCALE_PROPERTY, scaleAndTranslation.scale, scaleInterpolator);
|
||||
Interpolator translateInterpolator = builder.getInterpolator(
|
||||
ANIM_OVERVIEW_TRANSLATE, LINEAR);
|
||||
float translationX = scaleAndTranslation.translationX;
|
||||
if (mRecentsView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
|
||||
translationX = -translationX;
|
||||
}
|
||||
setter.setFloat(mRecentsView, View.TRANSLATION_X, translationX, translateInterpolator);
|
||||
setter.setFloat(mRecentsView, View.TRANSLATION_Y, scaleAndTranslation.translationY,
|
||||
translateInterpolator);
|
||||
setter.setFloat(mRecentsView, getContentAlphaProperty(), toState.overviewUi ? 1 : 0,
|
||||
builder.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the interpolator to use for the scale and translation Y animation for the view.
|
||||
*
|
||||
* @param toState state to animate to
|
||||
* @param builder animator set builder
|
||||
* @return interpolator for scale and trans Y recents view animation
|
||||
*/
|
||||
Interpolator getScaleAndTransYInterpolator(@NonNull final LauncherState toState,
|
||||
@NonNull AnimatorSetBuilder builder) {
|
||||
return builder.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get property for content alpha for the recents view.
|
||||
*
|
||||
|
|
|
@ -183,17 +183,17 @@ public class LauncherState {
|
|||
return Arrays.copyOf(sAllStates, sAllStates.length);
|
||||
}
|
||||
|
||||
public float[] getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
return new float[] {1, 0, 0};
|
||||
public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1, 0, 0);
|
||||
}
|
||||
|
||||
public float[] getHotseatScaleAndTranslation(Launcher launcher) {
|
||||
public ScaleAndTranslation getHotseatScaleAndTranslation(Launcher launcher) {
|
||||
// For most states, treat the hotseat as if it were part of the workspace.
|
||||
return getWorkspaceScaleAndTranslation(launcher);
|
||||
}
|
||||
|
||||
public float[] getOverviewScaleAndTranslationY(Launcher launcher) {
|
||||
return new float[] {1.1f, 0f};
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1.1f, 0f, 0f);
|
||||
}
|
||||
|
||||
public void onStateEnabled(Launcher launcher) {
|
||||
|
@ -281,4 +281,16 @@ public class LauncherState {
|
|||
|
||||
public abstract float getPageAlpha(int pageIndex);
|
||||
}
|
||||
|
||||
public static class ScaleAndTranslation {
|
||||
public float scale;
|
||||
public float translationX;
|
||||
public float translationY;
|
||||
|
||||
public ScaleAndTranslation(float scale, float translationX, float translationY) {
|
||||
this.scale = scale;
|
||||
this.translationX = translationX;
|
||||
this.translationY = translationY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import android.view.View;
|
|||
import android.view.animation.Interpolator;
|
||||
|
||||
import com.android.launcher3.LauncherState.PageAlphaProvider;
|
||||
import com.android.launcher3.LauncherState.ScaleAndTranslation;
|
||||
import com.android.launcher3.LauncherStateManager.AnimationConfig;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.anim.PropertySetter;
|
||||
|
@ -71,9 +72,10 @@ public class WorkspaceStateTransitionAnimation {
|
|||
*/
|
||||
private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter,
|
||||
AnimatorSetBuilder builder, AnimationConfig config) {
|
||||
float[] scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher);
|
||||
float[] hotseatScaleAndTranslation = state.getHotseatScaleAndTranslation(mLauncher);
|
||||
mNewScale = scaleAndTranslation[0];
|
||||
ScaleAndTranslation scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher);
|
||||
ScaleAndTranslation hotseatScaleAndTranslation = state.getHotseatScaleAndTranslation(
|
||||
mLauncher);
|
||||
mNewScale = scaleAndTranslation.scale;
|
||||
PageAlphaProvider pageAlphaProvider = state.getWorkspacePageAlphaProvider(mLauncher);
|
||||
final int childCount = mWorkspace.getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
|
@ -98,7 +100,7 @@ public class WorkspaceStateTransitionAnimation {
|
|||
dragLayer.mapCoordInSelfToDescendant(hotseat, workspacePivot);
|
||||
hotseat.setPivotX(workspacePivot[0]);
|
||||
hotseat.setPivotY(workspacePivot[1]);
|
||||
float hotseatScale = hotseatScaleAndTranslation[0];
|
||||
float hotseatScale = hotseatScaleAndTranslation.scale;
|
||||
propertySetter.setFloat(hotseat, SCALE_PROPERTY, hotseatScale, scaleInterpolator);
|
||||
|
||||
float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0;
|
||||
|
@ -114,14 +116,14 @@ public class WorkspaceStateTransitionAnimation {
|
|||
|
||||
Interpolator translationInterpolator = !playAtomicComponent ? LINEAR : ZOOM_OUT;
|
||||
propertySetter.setFloat(mWorkspace, View.TRANSLATION_X,
|
||||
scaleAndTranslation[1], translationInterpolator);
|
||||
scaleAndTranslation.translationX, translationInterpolator);
|
||||
propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y,
|
||||
scaleAndTranslation[2], translationInterpolator);
|
||||
scaleAndTranslation.translationY, translationInterpolator);
|
||||
|
||||
propertySetter.setFloat(hotseat, View.TRANSLATION_Y,
|
||||
hotseatScaleAndTranslation[2], translationInterpolator);
|
||||
hotseatScaleAndTranslation.translationX, translationInterpolator);
|
||||
propertySetter.setFloat(mWorkspace.getPageIndicator(), View.TRANSLATION_Y,
|
||||
hotseatScaleAndTranslation[2], translationInterpolator);
|
||||
hotseatScaleAndTranslation.translationY, translationInterpolator);
|
||||
|
||||
// Set scrim
|
||||
WorkspaceAndHotseatScrim scrim = mLauncher.getDragLayer().getScrim();
|
||||
|
|
|
@ -32,8 +32,9 @@ public class AnimatorSetBuilder {
|
|||
public static final int ANIM_WORKSPACE_SCALE = 1;
|
||||
public static final int ANIM_WORKSPACE_FADE = 2;
|
||||
public static final int ANIM_OVERVIEW_SCALE = 3;
|
||||
public static final int ANIM_OVERVIEW_FADE = 4;
|
||||
public static final int ANIM_ALL_APPS_FADE = 5;
|
||||
public static final int ANIM_OVERVIEW_TRANSLATE = 4;
|
||||
public static final int ANIM_OVERVIEW_FADE = 5;
|
||||
public static final int ANIM_ALL_APPS_FADE = 6;
|
||||
|
||||
public static final int FLAG_DONT_ANIMATE_OVERVIEW = 1 << 0;
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ public class SpringLoadedState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
DeviceProfile grid = launcher.getDeviceProfile();
|
||||
Workspace ws = launcher.getWorkspace();
|
||||
if (ws.getChildCount() == 0) {
|
||||
|
@ -50,7 +50,7 @@ public class SpringLoadedState extends LauncherState {
|
|||
|
||||
if (grid.isVerticalBarLayout()) {
|
||||
float scale = grid.workspaceSpringLoadShrinkFactor;
|
||||
return new float[] {scale, 0, 0};
|
||||
return new ScaleAndTranslation(scale, 0, 0);
|
||||
}
|
||||
|
||||
float scale = grid.workspaceSpringLoadShrinkFactor;
|
||||
|
@ -69,12 +69,12 @@ public class SpringLoadedState extends LauncherState {
|
|||
float myCenter = ws.getTop() + halfHeight;
|
||||
float cellTopFromCenter = halfHeight - ws.getChildAt(0).getTop();
|
||||
float actualCellTop = myCenter - cellTopFromCenter * scale;
|
||||
return new float[] { scale, 0, (desiredCellTop - actualCellTop) / scale};
|
||||
return new ScaleAndTranslation(scale, 0, (desiredCellTop - actualCellTop) / scale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float[] getHotseatScaleAndTranslation(Launcher launcher) {
|
||||
return new float[] {1, 0, 0};
|
||||
public ScaleAndTranslation getHotseatScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -66,9 +66,9 @@ public class AllAppsState extends LauncherState {
|
|||
}
|
||||
|
||||
@Override
|
||||
public float[] getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
return new float[] { 1f, 0,
|
||||
-launcher.getAllAppsController().getShiftRange() * PARALLAX_COEFFICIENT};
|
||||
public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
|
||||
return new ScaleAndTranslation(1f, 0,
|
||||
-launcher.getAllAppsController().getShiftRange() * PARALLAX_COEFFICIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue