diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 4f85957052..a5716ea69c 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -22,4 +22,5 @@ 500dp 250dp + -30dp diff --git a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java index f34aa85c97..f1da817488 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java @@ -22,6 +22,7 @@ import android.view.View; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; +import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; @@ -49,10 +50,12 @@ public class OverviewState extends LauncherState { } RecentsView rv = launcher.getOverviewPanel(); + float overlap = 0; if (rv.getCurrentPage() >= rv.getFirstTaskIndex()) { Utilities.scaleRectAboutCenter(pageRect, WORKSPACE_SCALE_ON_SCROLL); + overlap = launcher.getResources().getDimension(R.dimen.workspace_overview_offset_x); } - return getScaleAndTranslationForPageRect(launcher, pageRect); + return getScaleAndTranslationForPageRect(launcher, overlap, pageRect); } @Override @@ -77,15 +80,23 @@ public class OverviewState extends LauncherState { return launcher.getOverviewPanel(); } - public static float[] getScaleAndTranslationForPageRect(Launcher launcher, Rect pageRect) { + public static float[] getScaleAndTranslationForPageRect(Launcher launcher, float offsetX, + Rect pageRect) { Workspace ws = launcher.getWorkspace(); float childWidth = ws.getNormalChildWidth(); Rect insets = launcher.getDragLayer().getInsets(); float scale = pageRect.width() / childWidth; + float translationX = offsetX / scale; + if (Utilities.isRtl(launcher.getResources())) { + translationX = -translationX; + } + float halfHeight = ws.getHeight() / 2; float childTop = halfHeight - scale * (halfHeight - ws.getPaddingTop() - insets.top); - return new float[] {scale, pageRect.top - childTop}; + float translationY = pageRect.top - childTop; + + return new float[] {scale, translationX, translationY}; } } diff --git a/quickstep/src/com/android/launcher3/uioverrides/WorkspaceCard.java b/quickstep/src/com/android/launcher3/uioverrides/WorkspaceCard.java index 990d28648f..9f7cffeeba 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/WorkspaceCard.java +++ b/quickstep/src/com/android/launcher3/uioverrides/WorkspaceCard.java @@ -39,7 +39,7 @@ import com.android.quickstep.RecentsView.ScrollState; public class WorkspaceCard extends FrameLayout implements PageCallbacks, OnClickListener { private final Rect mTempRect = new Rect(); - private final float[] mEvaluatedFloats = new float[2]; + private final float[] mEvaluatedFloats = new float[3]; private final FloatArrayEvaluator mEvaluator = new FloatArrayEvaluator(mEvaluatedFloats); // UI related information @@ -151,21 +151,25 @@ public class WorkspaceCard extends FrameLayout implements PageCallbacks, OnClick @Override public int onPageScroll(ScrollState scrollState) { - setTranslationX(scrollState.distanceFromScreenCenter); - float factor = scrollState.linearInterpolation; float scale = factor * WORKSPACE_SCALE_ON_SCROLL + (1 - factor); setScaleX(scale); setScaleY(scale); + float translateX = scrollState.distanceFromScreenCenter; if (mIsWorkspaceScrollingEnabled) { initUiData(); mEvaluator.evaluate(factor, mScaleAndTranslatePage0, mScaleAndTranslatePage1); mWorkspace.setScaleX(mEvaluatedFloats[0]); mWorkspace.setScaleY(mEvaluatedFloats[0]); - mWorkspace.setTranslationY(mEvaluatedFloats[1]); + mWorkspace.setTranslationX(mEvaluatedFloats[1]); + mWorkspace.setTranslationY(mEvaluatedFloats[2]); + translateX += mEvaluatedFloats[1]; } + + setTranslationX(translateX); + return SCROLL_TYPE_WORKSPACE; } @@ -174,13 +178,15 @@ public class WorkspaceCard extends FrameLayout implements PageCallbacks, OnClick return; } + float overlap = getResources().getDimension(R.dimen.workspace_overview_offset_x); + RecentsView.getPageRect(mLauncher, mTempRect); mScaleAndTranslatePage0 = OverviewState - .getScaleAndTranslationForPageRect(mLauncher, mTempRect); + .getScaleAndTranslationForPageRect(mLauncher, 0, mTempRect); Rect scaledDown = new Rect(mTempRect); Utilities.scaleRectAboutCenter(scaledDown, WORKSPACE_SCALE_ON_SCROLL); mScaleAndTranslatePage1 = OverviewState - .getScaleAndTranslationForPageRect(mLauncher, scaledDown); + .getScaleAndTranslationForPageRect(mLauncher, overlap, scaledDown); mUIDataValid = true; } } diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 2beaca1023..a1f58791bb 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -137,7 +137,7 @@ public class LauncherState { } public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { - return new float[] {1, 0}; + return new float[] {1, 0, 0}; } public float getHoseatAlpha(Launcher launcher) { diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 80818f2bb8..9ed86eda41 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -123,10 +123,8 @@ public class WorkspaceStateTransitionAnimation { * Starts a transition animation for the workspace. */ private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter) { - float[] scaleAndTranslationY = state.getWorkspaceScaleAndTranslation(mLauncher); - mNewScale = scaleAndTranslationY[0]; - final float finalWorkspaceTranslationY = scaleAndTranslationY[1]; - + float[] scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher); + mNewScale = scaleAndTranslation[0]; PageAlphaProvider pageAlphaProvider = state.getWorkspacePageAlphaProvider(mLauncher); final int childCount = mWorkspace.getChildCount(); for (int i = 0; i < childCount; i++) { @@ -135,8 +133,10 @@ public class WorkspaceStateTransitionAnimation { } propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_IN); + propertySetter.setFloat(mWorkspace, View.TRANSLATION_X, + scaleAndTranslation[1], Interpolators.ZOOM_IN); propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, - finalWorkspaceTranslationY, Interpolators.ZOOM_IN); + scaleAndTranslation[2], Interpolators.ZOOM_IN); float hotseatAlpha = state.getHoseatAlpha(mLauncher); propertySetter.setViewAlpha(mWorkspace.createHotseatAlphaAnimator(hotseatAlpha), diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java index 995cdaa336..da656db135 100644 --- a/src/com/android/launcher3/states/SpringLoadedState.java +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -70,7 +70,7 @@ 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, (desiredCellTop - actualCellTop) / scale}; + return new float[] { scale, 0, (desiredCellTop - actualCellTop) / scale}; } @Override diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java index d67156fef1..485e97b2b8 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java @@ -68,7 +68,7 @@ public class AllAppsState extends LauncherState { @Override public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { - return new float[] { 1f, + return new float[] { 1f, 0, -launcher.getAllAppsController().getShiftRange() * AllAppsTransitionController.PARALLAX_COEFFICIENT}; } diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java index 73f208e8f7..19967aeb74 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java @@ -59,7 +59,7 @@ public class OverviewState extends LauncherState { int workspaceOffsetTopEdge = workspaceTop + ((workspaceBottom - workspaceTop) - scaledHeight) / 2; int overviewOffsetTopEdge = overviewTop + (overviewBottom - overviewTop - scaledHeight) / 2; - return new float[] {SCALE_FACTOR, -workspaceOffsetTopEdge + overviewOffsetTopEdge }; + return new float[] {SCALE_FACTOR, 0, -workspaceOffsetTopEdge + overviewOffsetTopEdge }; } @Override