Converting widget panel into a floating view
> The widget panel is only inflated when needed
> Using the swipe up/down interaction for widgets tray
> Removing additional view wrappers from all-apps
> Widget tray is preserved across activity recreation
> Launcher no longer has WIDGET state, the actual code around
the states will be removed in a follow-up cl
Bug: 67678570
Bug: 67585158
Change-Id: Ia29a7c33ec81e6c53cc24e2906b7022b6f41755b
diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java
index 3ee6e51..afb83be 100644
--- a/src/com/android/launcher3/BaseRecyclerView.java
+++ b/src/com/android/launcher3/BaseRecyclerView.java
@@ -21,6 +21,7 @@
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.MotionEvent;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -99,11 +100,15 @@
// DO NOT REMOVE, NEEDED IMPLEMENTATION FOR M BUILDS
}
+ public int getScrollBarTop() {
+ return getPaddingTop();
+ }
+
/**
* Returns the height of the fast scroll bar
*/
public int getScrollbarTrackHeight() {
- return getHeight() - getPaddingTop() - getPaddingBottom();
+ return getHeight() - getScrollBarTop() - getPaddingBottom();
}
/**
@@ -121,13 +126,6 @@
return availableScrollBarHeight;
}
- /**
- * Returns the scrollbar for this recycler view.
- */
- public RecyclerViewFastScroller getScrollBar() {
- return mScrollbar;
- }
-
@Override
protected void dispatchDraw(Canvas canvas) {
onUpdateScrollbar(0);
@@ -160,6 +158,28 @@
}
/**
+ * Returns whether the view itself will handle the touch event or not.
+ * @param ev MotionEvent in {@param eventSource}
+ */
+ public boolean shouldContainerScroll(MotionEvent ev, View eventSource) {
+ int[] point = new int[2];
+ point[0] = (int) ev.getX();
+ point[1] = (int) ev.getY();
+ Utilities.mapCoordInSelfToDescendant(mScrollbar, eventSource, point);
+ // IF the MotionEvent is inside the thumb, container should not be pulled down.
+ if (mScrollbar.shouldBlockIntercept(point[0], point[1])) {
+ return false;
+ }
+
+ // IF scroller is at the very top OR there is no scroll bar because there is probably not
+ // enough items to scroll, THEN it's okay for the container to be pulled down.
+ if (getCurrentScrollY() == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
* @return whether fast scrolling is supported in the current state.
*/
public boolean supportsFastScrolling() {