summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/allapps/AllAppsContainerView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/allapps/AllAppsContainerView.java')
-rw-r--r--src/com/android/launcher3/allapps/AllAppsContainerView.java47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index d9ee2c55a..a399d748a 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -20,6 +20,8 @@ import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.InsetDrawable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Selection;
import android.text.SpannableStringBuilder;
@@ -42,6 +44,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.PromiseAppInfo;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.SpringAnimationHandler;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragOptions;
@@ -63,7 +66,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
private final Launcher mLauncher;
private final AlphabeticalAppsList mApps;
private final AllAppsGridAdapter mAdapter;
- private final RecyclerView.LayoutManager mLayoutManager;
+ private final LinearLayoutManager mLayoutManager;
private AllAppsRecyclerView mAppsRecyclerView;
private SearchUiManager mSearchUiManager;
@@ -74,6 +77,8 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
private int mNumAppsPerRow;
private int mNumPredictedAppsPerRow;
+ private SpringAnimationHandler mSpringAnimationHandler;
+
public AllAppsContainerView(Context context) {
this(context, null);
}
@@ -87,7 +92,9 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mLauncher = Launcher.getLauncher(context);
mApps = new AlphabeticalAppsList(context);
- mAdapter = new AllAppsGridAdapter(mLauncher, mApps, mLauncher, this);
+ mSpringAnimationHandler = new SpringAnimationHandler(SpringAnimationHandler.Y_DIRECTION);
+ mAdapter = new AllAppsGridAdapter(mLauncher, mApps, mLauncher, this,
+ mSpringAnimationHandler);
mApps.setAdapter(mAdapter);
mLayoutManager = mAdapter.getLayoutManager();
mSearchQueryBuilder = new SpannableStringBuilder();
@@ -227,6 +234,10 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mAppsRecyclerView.setLayoutManager(mLayoutManager);
mAppsRecyclerView.setAdapter(mAdapter);
mAppsRecyclerView.setHasFixedSize(true);
+ if (FeatureFlags.LAUNCHER3_PHYSICS) {
+ mAppsRecyclerView.setSpringAnimationHandler(mSpringAnimationHandler);
+ mAppsRecyclerView.addOnScrollListener(new SpringMotionOnScrollListener());
+ }
mSearchContainer = findViewById(R.id.search_container);
mSearchUiManager = (SearchUiManager) mSearchContainer;
@@ -404,4 +415,36 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
}
}
}
+
+ public SpringAnimationHandler getSpringAnimationHandler() {
+ return mSpringAnimationHandler;
+ }
+
+ public class SpringMotionOnScrollListener extends RecyclerView.OnScrollListener {
+
+ private int mScrollState = RecyclerView.SCROLL_STATE_IDLE;
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING) {
+ mSpringAnimationHandler.skipToEnd();
+ return;
+ }
+
+ int first = mLayoutManager.findFirstVisibleItemPosition();
+ int last = mLayoutManager.findLastVisibleItemPosition();
+
+ // We only show the spring animation when at the top or bottom, so we wait until the
+ // first or last row is visible to ensure that all animations run in sync.
+ if (first == 0 || last >= mAdapter.getItemCount() - mAdapter.getNumAppsPerRow()) {
+ mSpringAnimationHandler.animateToFinalPosition(0);
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ mScrollState = newState;
+ }
+ }
}