diff options
Diffstat (limited to 'src/com/android/launcher3/widget')
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsContainerView.java | 52 | ||||
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsRecyclerView.java | 44 |
2 files changed, 94 insertions, 2 deletions
diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 268e26ebb..8bc6d5909 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -115,6 +115,19 @@ public class WidgetsContainerView extends BaseContainerView }); mPadding.set(getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom()); + setScroller(); + updateBackgroundAndPaddings(); + } + + public void reset() { + updateScrubber(); + updateBackgroundAndPaddings(); + } + + private void updateScrubber() { + if (useScrubber()) { + mScrubber.updateSections(); + } } // @@ -125,6 +138,12 @@ public class WidgetsContainerView extends BaseContainerView return mView; } + public void setScrubberVisibility(int visibility) { + if (mScrubberContainerView != null) { + mScrubberContainerView.setVisibility(visibility); + } + } + public View getRevealView() { // TODO(hyunyoungs): temporarily use apps view transition. return findViewById(R.id.widgets_reveal_view); @@ -337,6 +356,7 @@ public class WidgetsContainerView extends BaseContainerView @Override protected void onUpdateBackgroundAndPaddings(Rect searchBarBounds, Rect padding) { + boolean isRtl = Utilities.isRtl(getResources()); // Apply the top-bottom padding to the content itself so that the launcher transition is // clipped correctly mContent.setPadding(0, padding.top, 0, padding.bottom); @@ -350,6 +370,30 @@ public class WidgetsContainerView extends BaseContainerView mView.setBackground(background); getRevealView().setBackground(background.getConstantState().newDrawable()); mView.updateBackgroundPadding(bgPadding); + + int startInset = mView.getMaxScrollbarWidth(); + int topBottomPadding = getPaddingTop(); + final boolean useScubber = useScrubber(); + if (isRtl) { + mView.setPadding(padding.left + mView.getMaxScrollbarWidth(), + topBottomPadding, padding.right + startInset, useScubber ? + mScrubberHeight + topBottomPadding : topBottomPadding); + if (useScubber) { + mScrubberContainerView + .setPadding(padding.left, + 0, padding.right, 0); + } + } else { + mView.setPadding(padding.left + startInset, topBottomPadding, + padding.right + mView.getMaxScrollbarWidth(), + useScubber ? mScrubberHeight + topBottomPadding : topBottomPadding); + if (useScubber) { + mScrubberContainerView.setPadding(padding.left, 0, + padding.right, 0); + mScrubberContainerView.setEnabled(true); + mScrubberContainerView.bringToFront(); + } + } } /** @@ -359,6 +403,14 @@ public class WidgetsContainerView extends BaseContainerView mView.setWidgets(model); mAdapter.setWidgetsModel(model); mAdapter.notifyDataSetChanged(); + updateScrubber(); + } + + public WidgetsModel getWidgets() { + if (mView != null) { + return mView.getWidgets(); + } + return null; } private WidgetPreviewLoader getWidgetPreviewLoader() { diff --git a/src/com/android/launcher3/widget/WidgetsRecyclerView.java b/src/com/android/launcher3/widget/WidgetsRecyclerView.java index ac32f154e..6818f3f71 100644 --- a/src/com/android/launcher3/widget/WidgetsRecyclerView.java +++ b/src/com/android/launcher3/widget/WidgetsRecyclerView.java @@ -20,13 +20,17 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import com.android.launcher3.BaseRecyclerView; import com.android.launcher3.R; import com.android.launcher3.model.PackageItemInfo; import com.android.launcher3.model.WidgetsModel; +import java.util.ArrayList; + /** * The widgets recycler view. */ @@ -70,7 +74,11 @@ public class WidgetsRecyclerView extends BaseRecyclerView { public void setWidgets(WidgetsModel widgets) { mWidgets = widgets; } - + + public WidgetsModel getWidgets() { + return mWidgets; + } + /** * We need to override the draw to ensure that we don't draw the overscroll effect beyond the * background bounds. @@ -146,12 +154,44 @@ public class WidgetsRecyclerView extends BaseRecyclerView { @Override public String scrollToSection(String sectionName) { + // Skip early if widgets are not bound. + if (mWidgets == null) { + return ""; + } + + // Skip early if there are no widgets. + int rowCount = mWidgets.getPackageSize(); + if (rowCount == 0) { + return ""; + } + for (int i = 0; i < rowCount; i++) { + PackageItemInfo packageItemInfo = mWidgets.getPackageItemInfo(i); + if (packageItemInfo != null && !TextUtils.isEmpty(packageItemInfo.titleSectionName) && + packageItemInfo.titleSectionName.equals(sectionName)) { + LinearLayoutManager layoutManager = ((LinearLayoutManager) getLayoutManager()); + layoutManager.smoothScrollToPosition(this, null, i); + return packageItemInfo.titleSectionName; + } + } return null; } @Override public String[] getSectionNames() { - return new String[0]; + if (mWidgets == null) { + return new String[0]; + } + final int N = mWidgets.getPackageSize(); + ArrayList<String> sections = new ArrayList<>(); + String lastLetter = null; + for (int i = 0; i < N; i++) { + final String titleSectionName = mWidgets.getPackageItemInfo(i).titleSectionName; + if (!TextUtils.isEmpty(titleSectionName) && !titleSectionName.equals(lastLetter)) { + lastLetter = titleSectionName; + sections.add(titleSectionName); + } + } + return sections.toArray(new String[sections.size()]); } /** |