diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2015-05-07 00:53:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-07 00:53:23 +0000 |
commit | 5dc17084256b4004c9c3eda87b88c60314c2dc89 (patch) | |
tree | 7b4417c50af604f1608f48deeaf2c6b28fc3993f /src/com/android/launcher3/widget | |
parent | 77919b93b98f5afa1b39546861197d6065847224 (diff) | |
parent | ebe1734a67dff9ab46f3c6cce328a86b714ce620 (diff) | |
download | android_packages_apps_Trebuchet-5dc17084256b4004c9c3eda87b88c60314c2dc89.tar.gz android_packages_apps_Trebuchet-5dc17084256b4004c9c3eda87b88c60314c2dc89.tar.bz2 android_packages_apps_Trebuchet-5dc17084256b4004c9c3eda87b88c60314c2dc89.zip |
Merge "Make drag and drop also work when the widget tray is still in scroll mode." into ub-launcher3-burnaby
Diffstat (limited to 'src/com/android/launcher3/widget')
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java | 80 | ||||
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsRowView.java | 90 |
2 files changed, 80 insertions, 90 deletions
diff --git a/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java b/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java new file mode 100644 index 000000000..56791c041 --- /dev/null +++ b/src/com/android/launcher3/widget/WidgetsContainerRecyclerView.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.widget; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.MotionEvent; + +/** + * The widgets recycler view container. + * <p> + * Overwritten to NOT intercept a touch sequence that started when the {@link RecycleView} + * scrolling slowing down below the internally defined threshold. + */ +public class WidgetsContainerRecyclerView extends RecyclerView + implements RecyclerView.OnItemTouchListener { + + private static final int SCROLL_DELTA_THRESHOLD = 6; + + /** Keeps the last known scrolling delta/velocity along y-axis. */ + private int mDy = 0; + private float mDeltaThreshold; + + public WidgetsContainerRecyclerView(Context context) { + this(context, null); + } + + public WidgetsContainerRecyclerView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public WidgetsContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + mDeltaThreshold = getResources().getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD; + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + addOnItemTouchListener(this); + } + + @Override + public void onScrolled(int dx, int dy) { + mDy = dy; + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + if ((Math.abs(mDy) < mDeltaThreshold && + getScrollState() != RecyclerView.SCROLL_STATE_IDLE)) { + // now the touch events are being passed to the {@link WidgetCell} until the + // touch sequence goes over the touch slop. + stopScroll(); + } + } + return false; + } + + @Override + public void onTouchEvent(RecyclerView rv, MotionEvent ev) { + // Do nothing. + } +}
\ No newline at end of file diff --git a/src/com/android/launcher3/widget/WidgetsRowView.java b/src/com/android/launcher3/widget/WidgetsRowView.java deleted file mode 100644 index 54667384b..000000000 --- a/src/com/android/launcher3/widget/WidgetsRowView.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.widget; - -import android.content.Context; -import android.view.MotionEvent; -import android.widget.FrameLayout; -import android.widget.HorizontalScrollView; -import android.widget.TextView; - -import com.android.launcher3.R; - -/** - * Layout used for widget tray rows for each app. For performance, this view can be replaced with - * a {@link RecyclerView} in the future if we settle on scrollable single row for the widgets. - * If we decide on collapsable grid, then HorizontalScrollView can be replaced with a - * {@link GridLayout}. - */ -public class WidgetsRowView extends HorizontalScrollView { - static final String TAG = "WidgetsRow"; - - private Runnable mOnLayoutListener; - private String mAppName; - - public WidgetsRowView(Context context, String appName) { - super(context, null, 0); - mAppName = appName; - } - - /** - * Clears all the key listeners for the individual widgets. - */ - public void resetChildrenOnKeyListeners() { - int childCount = getChildCount(); - for (int j = 0; j < childCount; ++j) { - getChildAt(j).setOnKeyListener(null); - } - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - TextView tv = (TextView) findViewById(R.id.widget_name); - tv.setText(mAppName); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - mOnLayoutListener = null; - } - - public void setOnLayoutListener(Runnable r) { - mOnLayoutListener = r; - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - if (mOnLayoutListener != null) { - mOnLayoutListener.run(); - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - boolean result = super.onTouchEvent(event); - return result; - } - - public static class LayoutParams extends FrameLayout.LayoutParams { - public LayoutParams(int width, int height) { - super(width, height); - } - } -} |