summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/widget/WidgetsRecyclerView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/widget/WidgetsRecyclerView.java')
-rw-r--r--src/com/android/launcher3/widget/WidgetsRecyclerView.java59
1 files changed, 50 insertions, 9 deletions
diff --git a/src/com/android/launcher3/widget/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/WidgetsRecyclerView.java
index bef255908..4aa332380 100644
--- a/src/com/android/launcher3/widget/WidgetsRecyclerView.java
+++ b/src/com/android/launcher3/widget/WidgetsRecyclerView.java
@@ -19,20 +19,25 @@ package com.android.launcher3.widget;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.LinearLayoutManager;
import android.util.AttributeSet;
-import android.view.MotionEvent;
+import android.view.View;
import com.android.launcher3.BaseRecyclerView;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.compat.AlphabeticIndexCompat;
import com.android.launcher3.model.WidgetsModel;
+import com.android.launcher3.model.PackageItemInfo;
/**
* The widgets recycler view.
*/
public class WidgetsRecyclerView extends BaseRecyclerView {
+ private static final String TAG = "WidgetsRecyclerView";
private WidgetsModel mWidgets;
private Rect mBackgroundPadding = new Rect();
+ private PackageItemInfo mLastPackageItemInfo;
public WidgetsRecyclerView(Context context) {
this(context, null);
@@ -68,8 +73,17 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
*/
@Override
public String scrollToPositionAtProgress(float touchFraction) {
- // Ensure that we have any sections
- return "";
+ float pos = mWidgets.getPackageSize() * touchFraction;
+
+ int posInt = (int) pos;
+ LinearLayoutManager layoutManager = ((LinearLayoutManager) getLayoutManager());
+ getCurScrollState(scrollPosState);
+ layoutManager.scrollToPositionWithOffset((int) pos,
+ (int) (scrollPosState.rowHeight * ((float) posInt - pos)));
+
+ posInt = (int) ((touchFraction == 1)? pos -1 : pos);
+ PackageItemInfo p = mWidgets.getPackageItemInfo(posInt);
+ return p.titleSectionName;
}
/**
@@ -78,19 +92,41 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
@Override
public void updateVerticalScrollbarBounds() {
int rowCount = mWidgets.getPackageSize();
+ verticalScrollbarBounds.setEmpty();
- // Skip early if there are no items.
+ // Skip early if, there are no items.
if (rowCount == 0) {
- verticalScrollbarBounds.setEmpty();
return;
}
- int x, y;
+ // Skip early if, there no child laid out in the container.
getCurScrollState(scrollPosState);
if (scrollPosState.rowIndex < 0) {
+ return;
+ }
+
+ int actualHeight = getHeight() - getPaddingTop() - getPaddingBottom();
+ int totalScrollHeight = rowCount * scrollPosState.rowHeight;
+ // Skip early if the height of all the rows are actually less than the container height.
+ if (totalScrollHeight < actualHeight) {
verticalScrollbarBounds.setEmpty();
+ return;
}
- // TODO
+
+ int scrollbarHeight = (int) (actualHeight / ((float) totalScrollHeight / actualHeight));
+ int availableY = totalScrollHeight - actualHeight;
+ int availableScrollY = actualHeight - scrollbarHeight;
+ int y = (scrollPosState.rowIndex * scrollPosState.rowHeight)
+ - scrollPosState.rowTopOffset;
+ y = getPaddingTop() +
+ (int) (((float) (getPaddingTop() + y) / availableY) * availableScrollY);
+
+ // Calculate the position and size of the scroll bar.
+ int x = getWidth() - getScrollbarWidth() - mBackgroundPadding.right;
+ if (Utilities.isRtl(getResources())) {
+ x = mBackgroundPadding.left;
+ }
+ verticalScrollbarBounds.set(x, y, x + getScrollbarWidth(), y + scrollbarHeight);
}
/**
@@ -107,6 +143,11 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
if (rowCount == 0) {
return;
}
- // TODO
+ View child = getChildAt(0);
+ int position = getChildPosition(child);
+
+ stateOut.rowIndex = position;
+ stateOut.rowTopOffset = getLayoutManager().getDecoratedTop(child);
+ stateOut.rowHeight = child.getHeight();
}
} \ No newline at end of file