summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/com/android/launcher3/ButtonDropTarget.java6
-rw-r--r--src/com/android/launcher3/CellLayout.java6
-rw-r--r--src/com/android/launcher3/DropTargetBar.java4
-rw-r--r--src/com/android/launcher3/PagedView.java13
-rw-r--r--src/com/android/launcher3/Workspace.java11
-rw-r--r--src/com/android/launcher3/WorkspaceStateTransitionAnimation.java60
-rw-r--r--src/com/android/launcher3/allapps/AllAppsCaretController.java7
-rw-r--r--src/com/android/launcher3/allapps/AllAppsTransitionController.java15
-rw-r--r--src/com/android/launcher3/anim/Interpolators.java90
-rw-r--r--src/com/android/launcher3/compat/AnimatorSetCompat.java4
-rw-r--r--src/com/android/launcher3/dragndrop/DragLayer.java4
-rw-r--r--src/com/android/launcher3/dragndrop/DragView.java4
-rw-r--r--src/com/android/launcher3/folder/FolderIcon.java11
-rw-r--r--src/com/android/launcher3/folder/FolderPagedView.java4
-rw-r--r--src/com/android/launcher3/graphics/GradientView.java4
-rw-r--r--src/com/android/launcher3/graphics/PreloadIconDrawable.java5
-rw-r--r--src/com/android/launcher3/notification/Interpolators.java37
-rw-r--r--src/com/android/launcher3/notification/NotificationMainView.java8
-rw-r--r--src/com/android/launcher3/touch/SwipeDetector.java21
-rw-r--r--src/com/android/launcher3/util/WallpaperOffsetInterpolator.java4
-rw-r--r--src/com/android/launcher3/widget/BaseWidgetSheet.java15
-rw-r--r--src/com/android/launcher3/widget/WidgetsBottomSheet.java8
23 files changed, 153 insertions, 190 deletions
diff --git a/build.gradle b/build.gradle
index 2376146fd..a1b3a6037 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.1'
+ classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
}
}
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index 6f404086b..d8c4efaa4 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -37,10 +37,9 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.LinearInterpolator;
import android.widget.TextView;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragOptions;
@@ -240,8 +239,7 @@ public abstract class ButtonDropTarget extends TextView
};
dragLayer.animateView(d.dragView, from, to, scale, 1f, 1f, 0.1f, 0.1f,
DRAG_VIEW_DROP_DURATION,
- new DecelerateInterpolator(2),
- new LinearInterpolator(), onAnimationEndRunnable,
+ Interpolators.DEACCEL_2, Interpolators.LINEAR, onAnimationEndRunnable,
DragLayer.ANIMATION_END_DISAPPEAR, null);
}
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index 2ab08b2eb..3162286c1 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -44,12 +44,13 @@ import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
-import android.view.animation.DecelerateInterpolator;
+
import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.accessibility.DragAndDropAccessibilityDelegate;
import com.android.launcher3.accessibility.FolderAccessibilityHelper;
import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.PropertyListBuilder;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.PreviewBackground;
@@ -59,6 +60,7 @@ import com.android.launcher3.util.GridOccupancy;
import com.android.launcher3.util.ParcelableSparseArray;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -223,7 +225,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler {
mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * grid.iconSizePx);
// Initialize the data structures used for the drag visualization.
- mEaseOutInterpolator = new DecelerateInterpolator(2.5f); // Quint ease out
+ mEaseOutInterpolator = Interpolators.DEACCEL_2_5; // Quint ease out
mDragCell[0] = mDragCell[1] = -1;
for (int i = 0; i < mDragOutlines.length; i++) {
mDragOutlines[i] = new Rect(-1, -1, -1, -1);
diff --git a/src/com/android/launcher3/DropTargetBar.java b/src/com/android/launcher3/DropTargetBar.java
index 2f8374a5e..3eca5cd44 100644
--- a/src/com/android/launcher3/DropTargetBar.java
+++ b/src/com/android/launcher3/DropTargetBar.java
@@ -26,9 +26,9 @@ import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
-import android.view.animation.AccelerateInterpolator;
import android.widget.LinearLayout;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragOptions;
@@ -40,7 +40,7 @@ import java.util.ArrayList;
public class DropTargetBar extends LinearLayout implements DragController.DragListener {
protected static final int DEFAULT_DRAG_FADE_DURATION = 175;
- protected static final TimeInterpolator DEFAULT_INTERPOLATOR = new AccelerateInterpolator();
+ protected static final TimeInterpolator DEFAULT_INTERPOLATOR = Interpolators.ACCEL;
private final Runnable mFadeAnimationEndRunnable = new Runnable() {
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index f55455b7e..4240a30b4 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -46,6 +46,7 @@ import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Interpolator;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.PropertyListBuilder;
import com.android.launcher3.pageindicators.PageIndicator;
import com.android.launcher3.touch.OverScroll;
@@ -214,7 +215,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
*/
protected void init() {
mScroller = new LauncherScroller(getContext());
- setDefaultInterpolator(new ScrollInterpolator());
+ setDefaultInterpolator(Interpolators.SCROLL);
mCurrentPage = 0;
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
@@ -1766,16 +1767,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
return PAGE_SNAP_ANIMATION_DURATION;
}
- public static class ScrollInterpolator implements Interpolator {
- public ScrollInterpolator() {
- }
-
- public float getInterpolation(float t) {
- t -= 1.0f;
- return t*t*t*t*t + 1;
- }
- }
-
// We want the duration of the page snap animation to be influenced by the distance that
// the screen has to travel, however, we don't want this duration to be effected in a
// purely linear fashion. Instead, we use this method to moderate the effect that the distance
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 900e5bfa9..b0a33c8bd 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -16,8 +16,8 @@
package com.android.launcher3;
-import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
@@ -56,8 +56,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
import android.widget.Toast;
import com.android.launcher3.Launcher.LauncherOverlay;
@@ -68,6 +66,7 @@ import com.android.launcher3.accessibility.OverviewAccessibilityDelegate;
import com.android.launcher3.accessibility.OverviewScreenAccessibilityDelegate;
import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper;
import com.android.launcher3.anim.AnimationLayerSet;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.badge.FolderBadgeInfo;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.config.FeatureFlags;
@@ -1163,8 +1162,6 @@ public class Workspace extends PagedView
super.shouldFlingForVelocity(velocityX);
}
- private final Interpolator mAlphaInterpolator = new DecelerateInterpolator(3f);
-
/**
* The overlay scroll is being controlled locally, just update our overlay effect
*/
@@ -1189,7 +1186,7 @@ public class Workspace extends PagedView
scroll = Math.max(scroll - offset, 0);
scroll = Math.min(1, scroll / (1 - offset));
- float alpha = 1 - mAlphaInterpolator.getInterpolation(scroll);
+ float alpha = 1 - Interpolators.DEACCEL_3.getInterpolation(scroll);
float transX = mLauncher.getDragLayer().getMeasuredWidth() * scroll;
transX *= 1 - slip;
@@ -1541,7 +1538,7 @@ public class Workspace extends PagedView
}
public void snapToPageFromOverView(int whichPage) {
- snapToPage(whichPage, OVERVIEW_TRANSITION_MS, new ZoomInInterpolator());
+ snapToPage(whichPage, OVERVIEW_TRANSITION_MS, Interpolators.ZOOM_IN);
}
private void onStartStateTransition(LauncherState state) {
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index 0ccb8ad91..fcccdf985 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -30,10 +30,10 @@ import android.content.res.Resources;
import android.util.Property;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
-import android.view.animation.DecelerateInterpolator;
import com.android.launcher3.LauncherStateManager.AnimationConfig;
import com.android.launcher3.anim.AnimationLayerSet;
+import com.android.launcher3.anim.Interpolators;
/**
* A convenience class to update a view's visibility state after an alpha animation.
@@ -86,58 +86,12 @@ class AlphaUpdateListener extends AnimatorListenerAdapter implements ValueAnimat
}
/**
- * This interpolator emulates the rate at which the perceived scale of an object changes
- * as its distance from a camera increases. When this interpolator is applied to a scale
- * animation on a view, it evokes the sense that the object is shrinking due to moving away
- * from the camera.
- */
-class ZInterpolator implements TimeInterpolator {
- private float focalLength;
-
- public ZInterpolator(float foc) {
- focalLength = foc;
- }
-
- public float getInterpolation(float input) {
- return (1.0f - focalLength / (focalLength + input)) /
- (1.0f - focalLength / (focalLength + 1.0f));
- }
-}
-
-/**
- * The exact reverse of ZInterpolator.
- */
-class InverseZInterpolator implements TimeInterpolator {
- private ZInterpolator zInterpolator;
- public InverseZInterpolator(float foc) {
- zInterpolator = new ZInterpolator(foc);
- }
- public float getInterpolation(float input) {
- return 1 - zInterpolator.getInterpolation(1 - input);
- }
-}
-
-/**
- * InverseZInterpolator compounded with an ease-out.
- */
-class ZoomInInterpolator implements TimeInterpolator {
- private final InverseZInterpolator inverseZInterpolator = new InverseZInterpolator(0.35f);
- private final DecelerateInterpolator decelerate = new DecelerateInterpolator(3.0f);
-
- public float getInterpolation(float input) {
- return decelerate.getInterpolation(inverseZInterpolator.getInterpolation(input));
- }
-}
-
-/**
* Manages the animations between each of the workspace states.
*/
public class WorkspaceStateTransitionAnimation {
private static final PropertySetter NO_ANIM_PROPERTY_SETTER = new PropertySetter();
- private final ZoomInInterpolator mZoomInInterpolator = new ZoomInInterpolator();
-
public final int mWorkspaceScrimAlpha;
private final Launcher mLauncher;
@@ -197,13 +151,13 @@ public class WorkspaceStateTransitionAnimation {
propertySetter.setViewAlpha(mWorkspace.createHotseatAlphaAnimator(finalHotseatAlpha),
mLauncher.getHotseat(), finalHotseatAlpha);
- propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, mZoomInInterpolator);
+ propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_IN);
propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y,
- finalWorkspaceTranslationY, mZoomInInterpolator);
+ finalWorkspaceTranslationY, Interpolators.ZOOM_IN);
// Set scrim
propertySetter.setInt(mLauncher.getDragLayer().getScrim(), DRAWABLE_ALPHA,
- state.hasScrim ? mWorkspaceScrimAlpha : 0, new DecelerateInterpolator(1.5f));
+ state.hasScrim ? mWorkspaceScrimAlpha : 0, Interpolators.DEACCEL_1_5);
}
public void applyChildState(LauncherState state, CellLayout cl, int childIndex) {
@@ -214,13 +168,13 @@ public class WorkspaceStateTransitionAnimation {
private void applyChildState(LauncherState state, CellLayout cl, int childIndex,
int centerPage, PropertySetter propertySetter) {
propertySetter.setInt(cl.getScrimBackground(),
- DRAWABLE_ALPHA, state.hasScrim ? 255 : 0, mZoomInInterpolator);
+ DRAWABLE_ALPHA, state.hasScrim ? 255 : 0, Interpolators.ZOOM_IN);
// Only animate the page alpha when we actually fade pages
if (mWorkspaceFadeInAdjacentScreens) {
float finalAlpha = state == LauncherState.NORMAL && childIndex != centerPage ? 0 : 1f;
propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA,
- finalAlpha, mZoomInInterpolator);
+ finalAlpha, Interpolators.ZOOM_IN);
}
}
@@ -302,7 +256,7 @@ public class WorkspaceStateTransitionAnimation {
}
private TimeInterpolator getFadeInterpolator(float finalAlpha) {
- return finalAlpha == 0 ? new DecelerateInterpolator(2) : null;
+ return finalAlpha == 0 ? Interpolators.DEACCEL_2 : null;
}
}
} \ No newline at end of file
diff --git a/src/com/android/launcher3/allapps/AllAppsCaretController.java b/src/com/android/launcher3/allapps/AllAppsCaretController.java
index 583b49f7b..81d005a70 100644
--- a/src/com/android/launcher3/allapps/AllAppsCaretController.java
+++ b/src/com/android/launcher3/allapps/AllAppsCaretController.java
@@ -16,11 +16,10 @@
package com.android.launcher3.allapps;
import android.animation.ObjectAnimator;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.pageindicators.CaretDrawable;
import com.android.launcher3.touch.SwipeDetector;
@@ -44,13 +43,11 @@ public class AllAppsCaretController {
final long caretAnimationDuration = launcher.getResources().getInteger(
R.integer.config_caretAnimationDuration);
- final Interpolator caretInterpolator = AnimationUtils.loadInterpolator(launcher,
- android.R.interpolator.fast_out_slow_in);
// We will set values later
mCaretAnimator = ObjectAnimator.ofFloat(mCaretDrawable, "caretProgress", 0);
mCaretAnimator.setDuration(caretAnimationDuration);
- mCaretAnimator.setInterpolator(caretInterpolator);
+ mCaretAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
}
/**
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index d62cd4b5f..31ce01338 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -2,6 +2,7 @@ package com.android.launcher3.allapps;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
+import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
import android.animation.Animator;
import android.animation.AnimatorInflater;
@@ -10,11 +11,9 @@ import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.support.animation.SpringAnimation;
-import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.util.Property;
import android.view.MotionEvent;
import android.view.View;
-import android.view.animation.AccelerateInterpolator;
import android.view.animation.Interpolator;
import com.android.launcher3.AbstractFloatingView;
@@ -27,6 +26,7 @@ import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
import com.android.launcher3.anim.AnimationSuccessListener;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.SpringAnimationHandler;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.GradientView;
@@ -70,11 +70,9 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect
// The delay (as a % of the animation duration) to start the springs.
private static final float SPRING_DELAY = 0.3f;
- private final Interpolator mWorkspaceAccelnterpolator = new AccelerateInterpolator(2f);
- private final Interpolator mHotseatAccelInterpolator = new AccelerateInterpolator(1.5f);
- private final Interpolator mFastOutSlowInInterpolator = new FastOutSlowInInterpolator();
- private final SwipeDetector.ScrollInterpolator mScrollInterpolator
- = new SwipeDetector.ScrollInterpolator();
+ private final Interpolator mWorkspaceAccelnterpolator = Interpolators.ACCEL_2;
+ private final Interpolator mHotseatAccelInterpolator = Interpolators.ACCEL_1_5;
+ private final Interpolator mFastOutSlowInInterpolator = Interpolators.FAST_OUT_SLOW_IN;
private static final float PARALLAX_COEFFICIENT = .125f;
private static final int SINGLE_FRAME_MS = 16;
@@ -396,8 +394,7 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect
mShiftStart = mAppsView.getTranslationY();
interpolator = mFastOutSlowInInterpolator;
} else {
- mScrollInterpolator.setVelocityAtZero(Math.abs(mContainerVelocity));
- interpolator = mScrollInterpolator;
+ interpolator = scrollInterpolatorForVelocity(mContainerVelocity);
mProgress = Utilities.boundToRange(
mProgress + mContainerVelocity * SINGLE_FRAME_MS / mShiftRange, 0f, 1f);
outConfig.shouldPost = false;
diff --git a/src/com/android/launcher3/anim/Interpolators.java b/src/com/android/launcher3/anim/Interpolators.java
new file mode 100644
index 000000000..8826e64d8
--- /dev/null
+++ b/src/com/android/launcher3/anim/Interpolators.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.anim;
+
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
+import android.view.animation.PathInterpolator;
+
+
+/**
+ * Common interpolators used in Launcher
+ */
+public class Interpolators {
+
+ public static final Interpolator LINEAR = new LinearInterpolator();
+
+ public static final Interpolator ACCEL = new AccelerateInterpolator();
+ public static final Interpolator ACCEL_1_5 = new AccelerateInterpolator(1.5f);
+ public static final Interpolator ACCEL_2 = new AccelerateInterpolator(2);
+
+ public static final Interpolator DEACCEL = new DecelerateInterpolator();
+ public static final Interpolator DEACCEL_1_5 = new DecelerateInterpolator(1.5f);
+ public static final Interpolator DEACCEL_2 = new DecelerateInterpolator(2);
+ public static final Interpolator DEACCEL_2_5 = new DecelerateInterpolator(2.5f);
+ public static final Interpolator DEACCEL_3 = new DecelerateInterpolator(3f);
+
+ public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
+
+ /**
+ * Inversion of zInterpolate, compounded with an ease-out.
+ */
+ public static final Interpolator ZOOM_IN = new Interpolator() {
+
+ private static final float FOCAL_LENGTH = 0.35f;
+
+ @Override
+ public float getInterpolation(float v) {
+ return DEACCEL_3.getInterpolation(1 - zInterpolate(1 - v));
+ }
+
+ /**
+ * This interpolator emulates the rate at which the perceived scale of an object changes
+ * as its distance from a camera increases. When this interpolator is applied to a scale
+ * animation on a view, it evokes the sense that the object is shrinking due to moving away
+ * from the camera.
+ */
+ private float zInterpolate(float input) {
+ return (1.0f - FOCAL_LENGTH / (FOCAL_LENGTH + input)) /
+ (1.0f - FOCAL_LENGTH / (FOCAL_LENGTH + 1.0f));
+ }
+ };
+
+ public static final Interpolator SCROLL = new Interpolator() {
+ @Override
+ public float getInterpolation(float t) {
+ t -= 1.0f;
+ return t*t*t*t*t + 1;
+ }
+ };
+
+ public static final Interpolator SCROLL_CUBIC = new Interpolator() {
+ @Override
+ public float getInterpolation(float t) {
+ t -= 1.0f;
+ return t*t*t + 1;
+ }
+ };
+
+ private static final float FAST_FLING_PX_MS = 10;
+
+ public static Interpolator scrollInterpolatorForVelocity(float velocity) {
+ return Math.abs(velocity) > FAST_FLING_PX_MS ? SCROLL : SCROLL_CUBIC;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/launcher3/compat/AnimatorSetCompat.java b/src/com/android/launcher3/compat/AnimatorSetCompat.java
index 497dd1497..667672593 100644
--- a/src/com/android/launcher3/compat/AnimatorSetCompat.java
+++ b/src/com/android/launcher3/compat/AnimatorSetCompat.java
@@ -21,10 +21,10 @@ import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.os.Build;
-import android.view.animation.LinearInterpolator;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimationSuccessListener;
+import com.android.launcher3.anim.Interpolators;
import java.util.ArrayList;
import java.util.Collections;
@@ -58,7 +58,7 @@ public abstract class AnimatorSetCompat implements ValueAnimator.AnimatorUpdateL
mDuration = duration;
mAnimationPlayer = ValueAnimator.ofFloat(0, 1);
- mAnimationPlayer.setInterpolator(new LinearInterpolator());
+ mAnimationPlayer.setInterpolator(Interpolators.LINEAR);
mAnimationPlayer.addUpdateListener(this);
}
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index bc5aafc0a..5b1a4dc6c 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -33,7 +33,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
-import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -48,6 +47,7 @@ import com.android.launcher3.R;
import com.android.launcher3.ShortcutAndWidgetContainer;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.AllAppsTransitionController;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
@@ -74,7 +74,7 @@ public class DragLayer extends InsettableFrameLayout {
// Variables relating to animation of views after drop
private ValueAnimator mDropAnim = null;
- private final TimeInterpolator mCubicEaseOutInterpolator = new DecelerateInterpolator(1.5f);
+ private final TimeInterpolator mCubicEaseOutInterpolator = Interpolators.DEACCEL_1_5;
@Thunk DragView mDropView = null;
@Thunk int mAnchorViewInitialScrollX = 0;
@Thunk View mAnchorView = null;
diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java
index 17fad8496..7c89df37c 100644
--- a/src/com/android/launcher3/dragndrop/DragView.java
+++ b/src/com/android/launcher3/dragndrop/DragView.java
@@ -43,7 +43,6 @@ import android.support.animation.FloatPropertyCompat;
import android.support.animation.SpringAnimation;
import android.support.animation.SpringForce;
import android.view.View;
-import android.view.animation.DecelerateInterpolator;
import com.android.launcher3.FastBitmapDrawable;
import com.android.launcher3.ItemInfo;
@@ -54,6 +53,7 @@ import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.ShortcutConfigActivityInfo;
import com.android.launcher3.config.FeatureFlags;
@@ -472,7 +472,7 @@ public class DragView extends View {
public void crossFade(int duration) {
ValueAnimator va = LauncherAnimUtils.ofFloat(0f, 1f);
va.setDuration(duration);
- va.setInterpolator(new DecelerateInterpolator(1.5f));
+ va.setInterpolator(Interpolators.DEACCEL_1_5);
va.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index 900781cbb..598302974 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -16,6 +16,9 @@
package com.android.launcher3.folder;
+import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
+import static com.android.launcher3.folder.PreviewItemManager.INITIAL_ITEM_ANIMATION_DURATION;
+
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -33,8 +36,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
import android.widget.FrameLayout;
import com.android.launcher3.Alarm;
@@ -56,6 +57,7 @@ import com.android.launcher3.SimpleOnStylusPressListener;
import com.android.launcher3.StylusEventHelper;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.badge.BadgeRenderer;
import com.android.launcher3.badge.FolderBadgeInfo;
import com.android.launcher3.dragndrop.BaseItemDragListener;
@@ -68,9 +70,6 @@ import com.android.launcher3.widget.PendingAddShortcutInfo;
import java.util.ArrayList;
import java.util.List;
-import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
-import static com.android.launcher3.folder.PreviewItemManager.INITIAL_ITEM_ANIMATION_DURATION;
-
/**
* An icon that can appear on in the workspace representing an {@link Folder}.
*/
@@ -350,7 +349,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
float finalScale = scale * scaleRelativeToDragLayer;
dragLayer.animateView(animateView, from, to, finalAlpha,
1, 1, finalScale, finalScale, DROP_IN_ANIMATION_DURATION,
- new DecelerateInterpolator(2), new AccelerateInterpolator(2),
+ Interpolators.DEACCEL_2, Interpolators.ACCEL_2,
null, DragLayer.ANIMATION_END_DISAPPEAR, null);
mFolder.hideItem(item);
diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java
index f4ac0a140..9e5bc4f09 100644
--- a/src/com/android/launcher3/folder/FolderPagedView.java
+++ b/src/com/android/launcher3/folder/FolderPagedView.java
@@ -27,7 +27,6 @@ import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewDebug;
-import android.view.animation.DecelerateInterpolator;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.CellLayout;
@@ -43,6 +42,7 @@ import com.android.launcher3.ShortcutAndWidgetContainer;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace.ItemOperator;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.keyboard.ViewGroupFocusHelper;
import com.android.launcher3.pageindicators.PageIndicator;
import com.android.launcher3.util.Thunk;
@@ -511,7 +511,7 @@ public class FolderPagedView extends PagedView {
int scroll = getScrollForPage(getNextPage()) + hint;
int delta = scroll - getScrollX();
if (delta != 0) {
- mScroller.setInterpolator(new DecelerateInterpolator());
+ mScroller.setInterpolator(Interpolators.DEACCEL);
mScroller.startScroll(getScrollX(), 0, delta, 0, Folder.SCROLL_HINT_DURATION);
invalidate();
}
diff --git a/src/com/android/launcher3/graphics/GradientView.java b/src/com/android/launcher3/graphics/GradientView.java
index 5455b43ec..bacb06323 100644
--- a/src/com/android/launcher3/graphics/GradientView.java
+++ b/src/com/android/launcher3/graphics/GradientView.java
@@ -29,12 +29,12 @@ import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
-import android.view.animation.AccelerateInterpolator;
import android.view.animation.Interpolator;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.dynamicui.WallpaperColorInfo;
import com.android.launcher3.util.Themes;
@@ -64,7 +64,7 @@ public class GradientView extends View implements WallpaperColorInfo.OnChangeLis
private final int mMaskHeight, mMaskWidth;
private final int mAlphaColors;
private final Paint mDebugPaint = DEBUG ? new Paint() : null;
- private final Interpolator mAccelerator = new AccelerateInterpolator();
+ private final Interpolator mAccelerator = Interpolators.ACCEL;
private final float mAlphaStart;
private final WallpaperColorInfo mWallpaperColorInfo;
private final int mScrimColor;
diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
index 06dc7acfe..6d486eed7 100644
--- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java
+++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
@@ -30,9 +30,9 @@ import android.graphics.PathMeasure;
import android.graphics.Rect;
import android.util.Property;
import android.util.SparseArray;
-import android.view.animation.LinearInterpolator;
import com.android.launcher3.FastBitmapDrawable;
+import com.android.launcher3.anim.Interpolators;
import java.lang.ref.WeakReference;
@@ -226,7 +226,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
mCurrentAnim = ObjectAnimator.ofFloat(this, INTERNAL_STATE, finalProgress);
mCurrentAnim.setDuration(
(long) ((finalProgress - mInternalStateProgress) * DURATION_SCALE));
- mCurrentAnim.setInterpolator(new LinearInterpolator());
+ mCurrentAnim.setInterpolator(Interpolators.LINEAR);
if (isFinish) {
mCurrentAnim.addListener(new AnimatorListenerAdapter() {
@Override
@@ -237,7 +237,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
}
mCurrentAnim.start();
}
-
}
/**
diff --git a/src/com/android/launcher3/notification/Interpolators.java b/src/com/android/launcher3/notification/Interpolators.java
deleted file mode 100644
index 5c3b22ab1..000000000
--- a/src/com/android/launcher3/notification/Interpolators.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.notification;
-
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-
-/**
- * Utility class to receive interpolators from.
- *
- * This class was copied from com.android.systemui.
- */
-public class Interpolators {
- public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
- public static final Interpolator FAST_OUT_LINEAR_IN = new PathInterpolator(0.4f, 0f, 1f, 1f);
- public static final Interpolator LINEAR_OUT_SLOW_IN = new PathInterpolator(0f, 0f, 0.2f, 1f);
-
- /**
- * Interpolator to be used when animating a move based on a click. Pair with enough duration.
- */
- public static final Interpolator TOUCH_RESPONSE =
- new PathInterpolator(0.3f, 0f, 0.1f, 1f);
-}
diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java
index 5aff28db4..c8e1fdb3f 100644
--- a/src/com/android/launcher3/notification/NotificationMainView.java
+++ b/src/com/android/launcher3/notification/NotificationMainView.java
@@ -16,6 +16,8 @@
package com.android.launcher3.notification;
+import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
+
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -25,7 +27,6 @@ import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -167,14 +168,11 @@ public class NotificationMainView extends FrameLayout implements SwipeDetector.L
endTranslation = 0;
}
- SwipeDetector.ScrollInterpolator interpolator = new SwipeDetector.ScrollInterpolator();
- interpolator.setVelocityAtZero(velocity);
-
long duration = SwipeDetector.calculateDuration(velocity,
(endTranslation - getTranslationX()) / getWidth());
animate()
.setDuration(duration)
- .setInterpolator(interpolator)
+ .setInterpolator(scrollInterpolatorForVelocity(velocity))
.translationX(endTranslation)
.withEndAction(new Runnable() {
@Override
diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java
index be4648eef..351f88ddd 100644
--- a/src/com/android/launcher3/touch/SwipeDetector.java
+++ b/src/com/android/launcher3/touch/SwipeDetector.java
@@ -16,6 +16,7 @@
package com.android.launcher3.touch;
import static android.view.MotionEvent.INVALID_POINTER_ID;
+
import android.content.Context;
import android.graphics.PointF;
import android.support.annotation.NonNull;
@@ -23,7 +24,6 @@ import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
-import android.view.animation.Interpolator;
/**
* One dimensional scroll/drag/swipe gesture detector.
@@ -43,7 +43,6 @@ public class SwipeDetector {
public static final int DIRECTION_BOTH = DIRECTION_NEGATIVE | DIRECTION_POSITIVE;
private static final float ANIMATION_DURATION = 1200;
- private static final float FAST_FLING_PX_MS = 10;
protected int mActivePointerId = INVALID_POINTER_ID;
@@ -351,22 +350,4 @@ public class SwipeDetector {
}
return duration;
}
-
- public static class ScrollInterpolator implements Interpolator {
-
- boolean mSteeper;
-
- public void setVelocityAtZero(float velocity) {
- mSteeper = velocity > FAST_FLING_PX_MS;
- }
-
- public float getInterpolation(float t) {
- t -= 1.0f;
- float output = t * t * t;
- if (mSteeper) {
- output *= t * t; // Make interpolation initial slope steeper
- }
- return output + 1;
- }
- }
}
diff --git a/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java b/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java
index ec494f181..5c2468740 100644
--- a/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java
+++ b/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java
@@ -10,11 +10,11 @@ import android.os.IBinder;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
-import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
+import com.android.launcher3.anim.Interpolators;
/**
* Utility class to handle wallpaper scrolling along with workspace.
@@ -199,7 +199,7 @@ public class WallpaperOffsetInterpolator extends BroadcastReceiver {
public OffsetHandler(Context context) {
super(UiThreadHelper.getBackgroundLooper());
- mInterpolator = new DecelerateInterpolator(1.5f);
+ mInterpolator = Interpolators.DEACCEL_1_5;
mWM = WallpaperManager.getInstance(context);
}
diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java
index 61a733338..e32875926 100644
--- a/src/com/android/launcher3/widget/BaseWidgetSheet.java
+++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.widget;
+import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
import android.animation.Animator;
@@ -29,8 +30,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
import android.widget.Toast;
import com.android.launcher3.AbstractFloatingView;
@@ -41,6 +41,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAnimUtils;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.graphics.GradientView;
import com.android.launcher3.touch.SwipeDetector;
@@ -76,12 +77,12 @@ abstract class BaseWidgetSheet extends AbstractFloatingView
private Toast mWidgetInstructionToast;
protected final Launcher mLauncher;
- protected final SwipeDetector.ScrollInterpolator mScrollInterpolator;
protected final SwipeDetector mSwipeDetector;
protected final ObjectAnimator mOpenCloseAnimator;
protected View mContent;
protected GradientView mGradientView;
+ protected Interpolator mScrollInterpolator;
// range [0, 1], 0=> completely open, 1=> completely closed
protected float mTranslationShift = TRANSLATION_SHIFT_CLOSED;
@@ -92,7 +93,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView
super(context, attrs, defStyleAttr);
mLauncher = Launcher.getLauncher(context);
- mScrollInterpolator = new SwipeDetector.ScrollInterpolator();
+ mScrollInterpolator = Interpolators.SCROLL_CUBIC;
mSwipeDetector = new SwipeDetector(context, this, SwipeDetector.VERTICAL);
mOpenCloseAnimator = LauncherAnimUtils.ofPropertyValuesHolder(this);
@@ -206,7 +207,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView
@Override
public void onDragEnd(float velocity, boolean fling) {
if ((fling && velocity > 0) || mTranslationShift > 0.5f) {
- mScrollInterpolator.setVelocityAtZero(velocity);
+ mScrollInterpolator = scrollInterpolatorForVelocity(velocity);
mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration(
velocity, TRANSLATION_SHIFT_CLOSED - mTranslationShift));
close(true);
@@ -215,7 +216,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView
TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED));
mOpenCloseAnimator.setDuration(
SwipeDetector.calculateDuration(velocity, mTranslationShift))
- .setInterpolator(new DecelerateInterpolator());
+ .setInterpolator(Interpolators.DEACCEL);
mOpenCloseAnimator.start();
}
}
@@ -236,7 +237,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView
if (mSwipeDetector.isIdleState()) {
mOpenCloseAnimator
.setDuration(defaultDuration)
- .setInterpolator(new AccelerateInterpolator());
+ .setInterpolator(Interpolators.ACCEL);
} else {
mOpenCloseAnimator.setInterpolator(mScrollInterpolator);
}
diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java
index 3bb3fcb98..7fa5ff054 100644
--- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java
+++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java
@@ -24,8 +24,6 @@ import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
import android.widget.TextView;
import com.android.launcher3.Insettable;
@@ -33,6 +31,7 @@ import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.graphics.GradientView;
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.util.PackageUserKey;
@@ -46,7 +45,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable {
private static final int DEFAULT_CLOSE_DURATION = 200;
private ItemInfo mOriginalItemInfo;
- private Interpolator mFastOutSlowInInterpolator;
private Rect mInsets;
public WidgetsBottomSheet(Context context, AttributeSet attrs) {
@@ -56,8 +54,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable {
public WidgetsBottomSheet(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setWillNotDraw(false);
- mFastOutSlowInInterpolator =
- AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
mInsets = new Rect();
mGradientView = (GradientView) mLauncher.getLayoutInflater().inflate(
@@ -148,7 +144,7 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable {
if (animate) {
mOpenCloseAnimator.setValues(
PropertyValuesHolder.ofFloat(TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED));
- mOpenCloseAnimator.setInterpolator(mFastOutSlowInInterpolator);
+ mOpenCloseAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
mOpenCloseAnimator.start();
} else {
setTranslationShift(TRANSLATION_SHIFT_OPENED);