diff options
Diffstat (limited to 'src/com/android/launcher3/allapps')
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsRecyclerView.java | 19 | ||||
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsRecyclerViewContainerView.java | 40 |
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); + } + } + } } |