summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/allapps
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/allapps')
-rw-r--r--src/com/android/launcher3/allapps/AllAppsRecyclerView.java19
-rw-r--r--src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java40
2 files changed, 57 insertions, 2 deletions
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index a17f0e35d..c83c6cfd9 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -16,10 +16,12 @@
package com.android.launcher3.allapps;
import android.content.Context;
+import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
+import android.view.ContextThemeWrapper;
import android.view.View;
import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.BaseRecyclerViewFastScrollBar;
@@ -70,8 +72,9 @@ public class AllAppsRecyclerView extends BaseRecyclerView
public AllAppsRecyclerView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr);
- mLauncher = (Launcher) context;
- setOverScrollMode(View.OVER_SCROLL_NEVER);
+ // We have a theme on this view, so we need to coerce the base activity context from that
+ ContextThemeWrapper ctx = (ContextThemeWrapper) context;
+ mLauncher = (Launcher) ctx.getBaseContext();
}
/**
@@ -125,6 +128,18 @@ public class AllAppsRecyclerView extends BaseRecyclerView
return 0;
}
+ /**
+ * We need to override the draw to ensure that we don't draw the overscroll effect beyond the
+ * background bounds.
+ */
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ canvas.clipRect(mBackgroundPadding.left, mBackgroundPadding.top,
+ getWidth() - mBackgroundPadding.right,
+ getHeight() - mBackgroundPadding.bottom);
+ super.dispatchDraw(canvas);
+ }
+
@Override
protected void onFinishInflate() {
super.onFinishInflate();
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java
index 8a8afde51..1c51ab763 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java
@@ -17,7 +17,9 @@ package com.android.launcher3.allapps;
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.util.AttributeSet;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.launcher3.BubbleTextView;
@@ -25,6 +27,7 @@ import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler;
import com.android.launcher3.ClickShadowView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
/**
* A container for RecyclerView to allow for the click shadow view to be shown behind an icon that
@@ -34,6 +37,7 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout
implements BubbleTextShadowHandler {
private final ClickShadowView mTouchFeedbackView;
+ private View mPredictionBarView;
public AllAppsRecyclerViewContainerView(Context context) {
this(context, null);
@@ -57,6 +61,13 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout
}
@Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ mPredictionBarView = findViewById(R.id.prediction_bar);
+ }
+
+ @Override
public void setPressedIcon(BubbleTextView icon, Bitmap background) {
if (icon == null || background == null) {
mTouchFeedbackView.setBitmap(null);
@@ -66,4 +77,33 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout
mTouchFeedbackView.animateShadow();
}
}
+
+ /**
+ * This allows us to have custom drawing order, while keeping touch handling in correct z-order.
+ */
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ final long drawingTime = getDrawingTime();
+
+ // Draw the click feedback first (since it is always on the bottom)
+ if (mTouchFeedbackView != null && mTouchFeedbackView.getVisibility() == View.VISIBLE) {
+ drawChild(canvas, mTouchFeedbackView, drawingTime);
+ }
+
+ // Then draw the prediction bar, since it needs to be "under" the recycler view to get the
+ // right edge effect to be drawn over it
+ if (mPredictionBarView != null && mPredictionBarView.getVisibility() == View.VISIBLE) {
+ drawChild(canvas, mPredictionBarView, drawingTime);
+ }
+
+ // Draw the remaining views
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View v = getChildAt(i);
+ if (v != mTouchFeedbackView && v != mPredictionBarView &&
+ v.getVisibility() == View.VISIBLE) {
+ drawChild(canvas, v, drawingTime);
+ }
+ }
+ }
}