OSDN Git Service

Uses a TransformingTouchDelegate to extend touch target for widgets list.
authorJon Miranda <jonmiranda@google.com>
Fri, 16 Sep 2016 19:38:09 +0000 (12:38 -0700)
committerJon Miranda <jonmiranda@google.com>
Mon, 19 Sep 2016 20:08:43 +0000 (13:08 -0700)
The widget row contents were being clipped, which made it seem like
the horizontal scroll was broken.

Bug: 30023607
Change-Id: I00b0c334bbb0faf166d4cd168392cc494ed732e0

res/layout/widgets_list_row_view.xml
src/com/android/launcher3/widget/WidgetsContainerView.java

index 4687b38..30a34d4 100644 (file)
@@ -59,8 +59,8 @@
             android:id="@+id/widgets_cell_list"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/widget_row_padding"
-            android:layout_marginLeft="@dimen/widget_row_padding"
+            android:paddingStart="@dimen/widget_row_padding"
+            android:paddingEnd="0dp"
             android:orientation="horizontal"
             android:divider="@drawable/widgets_row_divider"
             android:showDividers="middle"/>
index 538d4c9..083103c 100644 (file)
@@ -48,6 +48,7 @@ import com.android.launcher3.model.WidgetsModel;
 import com.android.launcher3.userevent.nano.LauncherLogProto;
 import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
 import com.android.launcher3.util.Thunk;
+import com.android.launcher3.util.TransformingTouchDelegate;
 
 /**
  * The widgets list view container.
@@ -63,11 +64,11 @@ public class WidgetsContainerView extends BaseContainerView
     private IconCache mIconCache;
 
     private final Rect mTmpBgPaddingRect = new Rect();
-    private final Rect mTmpRect = new Rect();
 
     /* Recycler view related member variables */
     private WidgetsRecyclerView mRecyclerView;
     private WidgetsListAdapter mAdapter;
+    private TransformingTouchDelegate mRecyclerViewTouchDelegate;
 
     /* Touch handling related member variables. */
     private Toast mWidgetInstructionToast;
@@ -95,29 +96,29 @@ public class WidgetsContainerView extends BaseContainerView
     }
 
     @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        getRevealView().getBackground().getPadding(mTmpBgPaddingRect);
+        mRecyclerViewTouchDelegate.setBounds(
+                mRecyclerView.getLeft() - mTmpBgPaddingRect.left,
+                mRecyclerView.getTop() - mTmpBgPaddingRect.top,
+                mRecyclerView.getRight() + mTmpBgPaddingRect.right,
+                mRecyclerView.getBottom() + mTmpBgPaddingRect.bottom);
+    }
+
+    @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
         mRecyclerView = (WidgetsRecyclerView) getContentView().findViewById(R.id.widgets_list_view);
         mRecyclerView.setAdapter(mAdapter);
         mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+        mRecyclerViewTouchDelegate = new TransformingTouchDelegate(mRecyclerView);
     }
 
     @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        getRevealView().getBackground().getPadding(mTmpBgPaddingRect);
-        if (Utilities.isRtl(getResources())) {
-            getContentView().setPadding(0, mTmpBgPaddingRect.top, mTmpBgPaddingRect.right,
-                    mTmpBgPaddingRect.bottom);
-            mTmpRect.set(mTmpBgPaddingRect.left, 0, 0, 0);
-            mRecyclerView.updateBackgroundPadding(mTmpRect);
-        } else {
-            getContentView().setPadding(mTmpBgPaddingRect.left, mTmpBgPaddingRect.top, 0,
-                    mTmpBgPaddingRect.bottom);
-            mTmpRect.set(0, 0, mTmpBgPaddingRect.right, 0);
-            mRecyclerView.updateBackgroundPadding(mTmpRect);
-        }
-
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        ((View) mRecyclerView.getParent()).setTouchDelegate(mRecyclerViewTouchDelegate);
     }
 
     //