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:
Tony 2019-03-19 13:30:25 -05:00
parent 9244f518f2
commit bc23440d73
11 changed files with 80 additions and 64 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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.
*

View File

@ -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;
}
}
}

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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