diff options
author | Tony <twickham@google.com> | 2019-03-03 15:32:12 -0800 |
---|---|---|
committer | Tony <twickham@google.com> | 2019-03-03 15:43:50 -0800 |
commit | 4bb4b89b9a677ae3548fefdcbc11be9bd906c24a (patch) | |
tree | a2adacb392e5c6c4f23e55e634f6427017383840 | |
parent | 9db9d62b278c69ba62993696f0456ab5c0e39a95 (diff) | |
download | android_packages_apps_Trebuchet-4bb4b89b9a677ae3548fefdcbc11be9bd906c24a.tar.gz android_packages_apps_Trebuchet-4bb4b89b9a677ae3548fefdcbc11be9bd906c24a.tar.bz2 android_packages_apps_Trebuchet-4bb4b89b9a677ae3548fefdcbc11be9bd906c24a.zip |
Scale and translate hotseat with workspace instead of all apps
- Move the hotseat alongside workspace instead of on top of all apps in xml layout
- Set pivot point of hotseat to match the workspace's, and apply the same scale
- Translate the hotseat with the workspace instead of all apps
- SpringLoadedState does not scale or translate the hotseat
Change-Id: Ic45fe99f83f0e0012afa78073d9577e65da444e2
6 files changed, 44 insertions, 19 deletions
diff --git a/res/layout/launcher.xml b/res/layout/launcher.xml index 91c37054b..c9cea8062 100644 --- a/res/layout/launcher.xml +++ b/res/layout/launcher.xml @@ -38,6 +38,15 @@ android:theme="@style/HomeScreenElementTheme" launcher:pageIndicator="@+id/page_indicator" /> + <!-- DO NOT CHANGE THE ID --> + <com.android.launcher3.Hotseat + android:id="@+id/hotseat" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:theme="@style/HomeScreenElementTheme" + android:importantForAccessibility="no" + launcher:containerType="hotseat" /> + <include android:id="@+id/overview_panel" layout="@layout/overview_panel" @@ -71,15 +80,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - <!-- DO NOT CHANGE THE ID --> - <com.android.launcher3.Hotseat - android:id="@+id/hotseat" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:theme="@style/HomeScreenElementTheme" - android:importantForAccessibility="no" - launcher:containerType="hotseat" /> - </com.android.launcher3.dragndrop.DragLayer> </com.android.launcher3.LauncherRootView> diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 6d8561269..b49578b14 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -188,6 +188,13 @@ public class LauncherState { } /** + * @return Whether we should scale the hotseat as if it were part of the workspace. + */ + public boolean scaleHotseatWithWorkspace() { + return true; + } + + /** * Returns 2 floats designating how to transition overview: * scale for the current and adjacent pages * translationY factor where 0 is top aligned and 0.5 is centered vertically diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index a877141f4..119058d00 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -17,7 +17,6 @@ package com.android.launcher3; import static android.view.View.VISIBLE; - import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; @@ -298,6 +297,8 @@ public class LauncherStateManager { if (!isWorkspaceVisible) { workspace.setScaleX(0.92f); workspace.setScaleY(0.92f); + workspace.getHotseat().setScaleX(0.92f); + workspace.getHotseat().setScaleY(0.92f); } } } diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 3e094935d..1c595ab54 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -19,7 +19,6 @@ package com.android.launcher3; import static com.android.launcher3.LauncherAnimUtils.DRAWABLE_ALPHA; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; -import static com.android.launcher3.LauncherState.HOTSEAT_SEARCH_BOX; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_SCALE; import static com.android.launcher3.anim.Interpolators.LINEAR; @@ -35,6 +34,7 @@ import com.android.launcher3.LauncherState.PageAlphaProvider; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; +import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.graphics.WorkspaceAndHotseatScrim; /** @@ -84,12 +84,24 @@ public class WorkspaceStateTransitionAnimation { Interpolator fadeInterpolator = builder.getInterpolator(ANIM_WORKSPACE_FADE, pageAlphaProvider.interpolator); boolean playAtomicComponent = config.playAtomicComponent(); + Hotseat hotseat = mWorkspace.getHotseat(); if (playAtomicComponent) { Interpolator scaleInterpolator = builder.getInterpolator(ANIM_WORKSPACE_SCALE, ZOOM_OUT); propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, scaleInterpolator); + + if (state.scaleHotseatWithWorkspace()) { + DragLayer dragLayer = mLauncher.getDragLayer(); + int[] workspacePivot = new int[]{(int) mWorkspace.getPivotX(), + (int) mWorkspace.getPivotY()}; + dragLayer.getDescendantCoordRelativeToSelf(mWorkspace, workspacePivot); + dragLayer.mapCoordInSelfToDescendant(hotseat, workspacePivot); + hotseat.setPivotX(workspacePivot[0]); + hotseat.setPivotY(workspacePivot[1]); + propertySetter.setFloat(hotseat, SCALE_PROPERTY, mNewScale, scaleInterpolator); + } + float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0; - propertySetter.setViewAlpha(mLauncher.getHotseat(), hotseatIconsAlpha, - fadeInterpolator); + propertySetter.setViewAlpha(hotseat, hotseatIconsAlpha, fadeInterpolator); propertySetter.setViewAlpha(mLauncher.getWorkspace().getPageIndicator(), hotseatIconsAlpha, fadeInterpolator); } @@ -104,6 +116,12 @@ public class WorkspaceStateTransitionAnimation { scaleAndTranslation[1], translationInterpolator); propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, scaleAndTranslation[2], translationInterpolator); + if (state.scaleHotseatWithWorkspace()) { + propertySetter.setFloat(hotseat, View.TRANSLATION_Y, + scaleAndTranslation[2], translationInterpolator); + propertySetter.setFloat(mWorkspace.getPageIndicator(), View.TRANSLATION_Y, + scaleAndTranslation[2], translationInterpolator); + } // Set scrim WorkspaceAndHotseatScrim scrim = mLauncher.getDragLayer().getScrim(); diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index bcb5eec61..93bf69daf 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -124,12 +124,6 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil float shiftCurrent = progress * mShiftRange; mAppsView.setTranslationY(shiftCurrent); - float hotseatTranslation = -mShiftRange + shiftCurrent; - - if (!mIsVerticalLayout) { - mLauncher.getHotseat().setTranslationY(hotseatTranslation); - mLauncher.getWorkspace().getPageIndicator().setTranslationY(hotseatTranslation); - } // Use a light system UI (dark icons) if all apps is behind at least half of the // status bar. diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java index 35f7f8831..d49dfbb8f 100644 --- a/src/com/android/launcher3/states/SpringLoadedState.java +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -73,6 +73,11 @@ public class SpringLoadedState extends LauncherState { } @Override + public boolean scaleHotseatWithWorkspace() { + return false; + } + + @Override public void onStateEnabled(Launcher launcher) { Workspace ws = launcher.getWorkspace(); ws.showPageIndicatorAtCurrentScroll(); |