diff options
author | Peter Schiller <peterschiller@google.com> | 2016-07-07 14:47:05 -0700 |
---|---|---|
committer | Peter Schiller <peterschiller@google.com> | 2016-07-08 15:02:03 -0700 |
commit | c2a20ff0a87f58b2be66f067b0024db7ff5185d3 (patch) | |
tree | d49af77af6962200175d705c2dc8e9726c93c5cf /src/com | |
parent | 723657c584976c627f44683471d71a39c78c1182 (diff) | |
download | android_packages_apps_Trebuchet-c2a20ff0a87f58b2be66f067b0024db7ff5185d3.tar.gz android_packages_apps_Trebuchet-c2a20ff0a87f58b2be66f067b0024db7ff5185d3.tar.bz2 android_packages_apps_Trebuchet-c2a20ff0a87f58b2be66f067b0024db7ff5185d3.zip |
Consolidate all the dividers to provide same look and feel
Bug: 30017936
Change-Id: I072cb116dba1df555a63f3f67b730f7f9c3a235a
Diffstat (limited to 'src/com')
5 files changed, 127 insertions, 95 deletions
diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java index f8ef1e156..4cb050e24 100644 --- a/src/com/android/launcher3/BaseRecyclerView.java +++ b/src/com/android/launcher3/BaseRecyclerView.java @@ -264,7 +264,7 @@ public abstract class BaseRecyclerView extends RecyclerView // Calculate the current scroll position, the scrollY of the recycler view accounts for the // view padding, while the scrollBarY is drawn right up to the background padding (ignoring // padding) - int scrollY = getScrollTop(scrollPosState); + int scrollY = Math.max(0, getScrollTop(scrollPosState)); int scrollBarY = mBackgroundPadding.top + (int) (((float) scrollY / availableScrollHeight) * availableScrollBarHeight); diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 30cd60713..717ce74c7 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -71,7 +71,7 @@ final class FullMergeAlgorithm implements AlphabeticalAppsList.MergeAlgorithm { AlphabeticalAppsList.SectionInfo withSection, int sectionAppCount, int numAppsPerRow, int mergeCount) { // Don't merge the predicted apps - if (section.firstAppItem.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) { + if (section.firstAppItem.viewType != AllAppsGridAdapter.VIEW_TYPE_ICON) { return false; } // Otherwise, merge every other section @@ -103,7 +103,7 @@ final class SimpleSectionMergeAlgorithm implements AlphabeticalAppsList.MergeAlg AlphabeticalAppsList.SectionInfo withSection, int sectionAppCount, int numAppsPerRow, int mergeCount) { // Don't merge the predicted apps - if (section.firstAppItem.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) { + if (section.firstAppItem.viewType != AllAppsGridAdapter.VIEW_TYPE_ICON) { return false; } @@ -159,7 +159,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc private int mSectionNamesMargin; private int mNumAppsPerRow; private int mNumPredictedAppsPerRow; - private int mRecyclerViewTopBottomPadding; + private int mRecyclerViewBottomPadding; // This coordinate is relative to this container view private final Point mBoundsCheckLastTouchDownPos = new Point(-1, -1); @@ -184,11 +184,11 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mItemDecoration = mAdapter.getItemDecoration(); DeviceProfile grid = mLauncher.getDeviceProfile(); if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && !grid.isVerticalBarLayout()) { - mRecyclerViewTopBottomPadding = 0; + mRecyclerViewBottomPadding = 0; setPadding(0, 0, 0, 0); } else { - mRecyclerViewTopBottomPadding = - res.getDimensionPixelSize(R.dimen.all_apps_list_top_bottom_padding); + mRecyclerViewBottomPadding = + res.getDimensionPixelSize(R.dimen.all_apps_list_bottom_padding); } mSearchQueryBuilder = new SpannableStringBuilder(); Selection.setSelection(mSearchQueryBuilder, 0); @@ -482,13 +482,12 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc // names) int maxScrollBarWidth = mAppsRecyclerView.getMaxScrollbarWidth(); int startInset = Math.max(mSectionNamesMargin, maxScrollBarWidth); - int topBottomPadding = mRecyclerViewTopBottomPadding; if (Utilities.isRtl(getResources())) { - mAppsRecyclerView.setPadding(bgPadding.left + maxScrollBarWidth, - topBottomPadding, bgPadding.right + startInset, topBottomPadding); + mAppsRecyclerView.setPadding(bgPadding.left + maxScrollBarWidth, 0, bgPadding.right + + startInset, mRecyclerViewBottomPadding); } else { - mAppsRecyclerView.setPadding(bgPadding.left + startInset, topBottomPadding, - bgPadding.right + maxScrollBarWidth, topBottomPadding); + mAppsRecyclerView.setPadding(bgPadding.left + startInset, 0, bgPadding.right + + maxScrollBarWidth, mRecyclerViewBottomPadding); } MarginLayoutParams lp = (MarginLayoutParams) mSearchContainer.getLayoutParams(); diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index d0b8abc60..7d856c04f 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -56,17 +56,34 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. private static final boolean DEBUG = false; // A section break in the grid - public static final int SECTION_BREAK_VIEW_TYPE = 0; + public static final int VIEW_TYPE_SECTION_BREAK = 1 << 0; // A normal icon - public static final int ICON_VIEW_TYPE = 1; + public static final int VIEW_TYPE_ICON = 1 << 1; // A prediction icon - public static final int PREDICTION_ICON_VIEW_TYPE = 2; + public static final int VIEW_TYPE_PREDICTION_ICON = 1 << 2; // The message shown when there are no filtered results - public static final int EMPTY_SEARCH_VIEW_TYPE = 3; + public static final int VIEW_TYPE_EMPTY_SEARCH = 1 << 3; // A divider that separates the apps list and the search market button - public static final int SEARCH_MARKET_DIVIDER_VIEW_TYPE = 4; - // The message to continue to a market search when there are no filtered results - public static final int SEARCH_MARKET_VIEW_TYPE = 5; + public static final int VIEW_TYPE_SEARCH_MARKET = 1 << 4; + + // We use various dividers for various purposes. They share enough attributes to reuse layouts, + // but differ in enough attributes to require different view types + + // A divider that separates the apps list and the search market button + public static final int VIEW_TYPE_SEARCH_MARKET_DIVIDER = 1 << 5; + // The divider under the search field + public static final int VIEW_TYPE_SEARCH_DIVIDER = 1 << 6; + // The divider that separates prediction icons from the app list + public static final int VIEW_TYPE_PREDICTION_DIVIDER = 1 << 7; + + // Common view type masks + public static final int VIEW_TYPE_MASK_DIVIDER = VIEW_TYPE_SEARCH_DIVIDER + | VIEW_TYPE_SEARCH_MARKET_DIVIDER + | VIEW_TYPE_PREDICTION_DIVIDER + | VIEW_TYPE_SECTION_BREAK; + public static final int VIEW_TYPE_MASK_ICON = VIEW_TYPE_ICON + | VIEW_TYPE_PREDICTION_ICON; + public interface BindViewCallback { public void onBindView(ViewHolder holder); @@ -128,11 +145,9 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. @Override public int getSpanSize(int position) { - switch (mApps.getAdapterItems().get(position).viewType) { - case AllAppsGridAdapter.ICON_VIEW_TYPE: - case AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE: - return 1; - default: + if (isIconViewType(mApps.getAdapterItems().get(position).viewType)) { + return 1; + } else { // Section breaks span the full width return mAppsPerRow; } @@ -164,7 +179,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. } List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems(); - boolean hasDrawnPredictedAppsDivider = false; boolean showSectionNames = mSectionNamesMargin > 0; int childCount = parent.getChildCount(); int lastSectionTop = 0; @@ -176,15 +190,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. continue; } - if (shouldDrawItemDivider(holder, items) && !hasDrawnPredictedAppsDivider) { - // Draw the divider under the predicted apps - int top = child.getTop() + child.getHeight() + mPredictionBarDividerOffset; - c.drawLine(mBackgroundPadding.left, top, - parent.getWidth() - mBackgroundPadding.right, top, - mPredictedAppsDividerPaint); - hasDrawnPredictedAppsDivider = true; - - } else if (showSectionNames && shouldDrawItemSection(holder, i, items)) { + if (showSectionNames && shouldDrawItemSection(holder, i, items)) { // At this point, we only draw sections for each section break; int viewTopOffset = (2 * child.getPaddingTop()); int pos = holder.getPosition(); @@ -210,7 +216,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. int sectionBaseline = (int) (viewTopOffset + sectionBounds.y); int x = mIsRtl ? parent.getWidth() - mBackgroundPadding.left - mSectionNamesMargin : - mBackgroundPadding.left; + mBackgroundPadding.left; x += (int) ((mSectionNamesMargin - sectionBounds.x) / 2f); int y = child.getTop() + sectionBaseline; @@ -295,15 +301,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. } /** - * Returns whether to draw the divider for a given child. - */ - private boolean shouldDrawItemDivider(ViewHolder holder, - List<AlphabeticalAppsList.AdapterItem> items) { - int pos = holder.getPosition(); - return items.get(pos).viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE; - } - - /** * Returns whether to draw the section for the given child. */ private boolean shouldDrawItemSection(ViewHolder holder, int childIndex, @@ -312,12 +309,12 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. AlphabeticalAppsList.AdapterItem item = items.get(pos); // Ensure it's an icon - if (item.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) { + if (item.viewType != AllAppsGridAdapter.VIEW_TYPE_ICON) { return false; } // Draw the section header for the first item in each section return (childIndex == 0) || - (items.get(pos - 1).viewType == AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE); + (items.get(pos - 1).viewType == AllAppsGridAdapter.VIEW_TYPE_SECTION_BREAK); } } @@ -337,9 +334,8 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. private final int mSectionNamesMargin; private final int mSectionHeaderOffset; private final Paint mSectionTextPaint; - private final Paint mPredictedAppsDividerPaint; + private int mAccentColor; - private final int mPredictionBarDividerOffset; private int mAppsPerRow; private BindViewCallback mBindViewCallback; @@ -351,8 +347,8 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. // The intent to send off to the market app, updated each time the search query changes. private Intent mMarketSearchIntent; - public AllAppsGridAdapter(Launcher launcher, AlphabeticalAppsList apps, - View.OnClickListener iconClickListener, View.OnLongClickListener iconLongClickListener) { + public AllAppsGridAdapter(Launcher launcher, AlphabeticalAppsList apps, View.OnClickListener + iconClickListener, View.OnLongClickListener iconLongClickListener) { Resources res = launcher.getResources(); mLauncher = launcher; mApps = apps; @@ -368,17 +364,24 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. mSectionHeaderOffset = res.getDimensionPixelSize(R.dimen.all_apps_grid_section_y_offset); mIsRtl = Utilities.isRtl(res); + mAccentColor = Utilities.getColorAccent(launcher); + mSectionTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mSectionTextPaint.setTextSize(res.getDimensionPixelSize( R.dimen.all_apps_grid_section_text_size)); - mSectionTextPaint.setColor(Utilities.getColorAccent(launcher)); - - mPredictedAppsDividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mPredictedAppsDividerPaint.setStrokeWidth(Utilities.pxFromDp(1f, res.getDisplayMetrics())); - mPredictedAppsDividerPaint.setColor(0x1E000000); - mPredictionBarDividerOffset = - (-res.getDimensionPixelSize(R.dimen.all_apps_prediction_icon_bottom_padding) + - res.getDimensionPixelSize(R.dimen.all_apps_icon_top_bottom_padding)) / 2; + mSectionTextPaint.setColor(mAccentColor); + } + + public static boolean isDividerViewType(int viewType) { + return isViewType(viewType, VIEW_TYPE_MASK_DIVIDER); + } + + public static boolean isIconViewType(int viewType) { + return isViewType(viewType, VIEW_TYPE_MASK_ICON); + } + + public static boolean isViewType(int viewType, int viewTypeMask) { + return (viewType & viewTypeMask) != 0; } /** @@ -440,12 +443,13 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { - case SECTION_BREAK_VIEW_TYPE: + case VIEW_TYPE_SECTION_BREAK: return new ViewHolder(new View(parent.getContext())); - case ICON_VIEW_TYPE: - case PREDICTION_ICON_VIEW_TYPE: { + case VIEW_TYPE_ICON: + /* falls through */ + case VIEW_TYPE_PREDICTION_ICON: { BubbleTextView icon = (BubbleTextView) mLayoutInflater.inflate( - viewType == ICON_VIEW_TYPE ? R.layout.all_apps_icon : + viewType == VIEW_TYPE_ICON ? R.layout.all_apps_icon : R.layout.all_apps_prediction_bar_icon, parent, false); icon.setOnClickListener(mIconClickListener); icon.setOnLongClickListener(mIconLongClickListener); @@ -454,13 +458,10 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. icon.setOnFocusChangeListener(mIconFocusListener); return new ViewHolder(icon); } - case EMPTY_SEARCH_VIEW_TYPE: + case VIEW_TYPE_EMPTY_SEARCH: return new ViewHolder(mLayoutInflater.inflate(R.layout.all_apps_empty_search, parent, false)); - case SEARCH_MARKET_DIVIDER_VIEW_TYPE: - return new ViewHolder(mLayoutInflater.inflate(R.layout.all_apps_search_market_divider, - parent, false)); - case SEARCH_MARKET_VIEW_TYPE: + case VIEW_TYPE_SEARCH_MARKET: View searchMarketView = mLayoutInflater.inflate(R.layout.all_apps_search_market, parent, false); searchMarketView.setOnClickListener(new View.OnClickListener() { @@ -470,6 +471,20 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. } }); return new ViewHolder(searchMarketView); + case VIEW_TYPE_SEARCH_DIVIDER: + final View searchDivider = + mLayoutInflater.inflate(R.layout.all_apps_divider, parent, false); + searchDivider.setBackgroundColor(mAccentColor); + final GridLayoutManager.LayoutParams searchDividerParams = + (GridLayoutManager.LayoutParams) searchDivider.getLayoutParams(); + searchDividerParams.topMargin = 0; + searchDivider.setLayoutParams(searchDividerParams); + return new ViewHolder(searchDivider); + case VIEW_TYPE_PREDICTION_DIVIDER: + /* falls through */ + case VIEW_TYPE_SEARCH_MARKET_DIVIDER: + return new ViewHolder(mLayoutInflater.inflate( + R.layout.all_apps_divider, parent, false)); default: throw new RuntimeException("Unexpected view type"); } @@ -478,7 +493,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. @Override public void onBindViewHolder(ViewHolder holder, int position) { switch (holder.getItemViewType()) { - case ICON_VIEW_TYPE: { + case VIEW_TYPE_ICON: { AppInfo info = mApps.getAdapterItems().get(position).appInfo; BubbleTextView icon = (BubbleTextView) holder.mContent; icon.applyFromApplicationInfo(info); @@ -489,7 +504,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. icon.setAccessibilityDelegate(mLauncher.getAccessibilityDelegate()); break; } - case PREDICTION_ICON_VIEW_TYPE: { + case VIEW_TYPE_PREDICTION_ICON: { AppInfo info = mApps.getAdapterItems().get(position).appInfo; BubbleTextView icon = (BubbleTextView) holder.mContent; icon.applyFromApplicationInfo(info); @@ -500,13 +515,13 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter. icon.setAccessibilityDelegate(mLauncher.getAccessibilityDelegate()); break; } - case EMPTY_SEARCH_VIEW_TYPE: + case VIEW_TYPE_EMPTY_SEARCH: TextView emptyViewText = (TextView) holder.mContent; emptyViewText.setText(mEmptySearchMessage); emptyViewText.setGravity(mApps.hasNoFilteredResults() ? Gravity.CENTER : Gravity.START | Gravity.CENTER_VERTICAL); break; - case SEARCH_MARKET_VIEW_TYPE: + case VIEW_TYPE_SEARCH_MARKET: TextView searchView = (TextView) holder.mContent; if (mMarketSearchIntent != null) { searchView.setVisibility(View.VISIBLE); diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 8d5ade3fe..ac881138d 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -98,12 +98,14 @@ public class AllAppsRecyclerView extends BaseRecyclerView RecyclerView.RecycledViewPool pool = getRecycledViewPool(); int approxRows = (int) Math.ceil(grid.availableHeightPx / grid.allAppsIconSizePx); - pool.setMaxRecycledViews(AllAppsGridAdapter.EMPTY_SEARCH_VIEW_TYPE, 1); - pool.setMaxRecycledViews(AllAppsGridAdapter.SEARCH_MARKET_DIVIDER_VIEW_TYPE, 1); - pool.setMaxRecycledViews(AllAppsGridAdapter.SEARCH_MARKET_VIEW_TYPE, 1); - pool.setMaxRecycledViews(AllAppsGridAdapter.ICON_VIEW_TYPE, approxRows * mNumAppsPerRow); - pool.setMaxRecycledViews(AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE, mNumAppsPerRow); - pool.setMaxRecycledViews(AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE, approxRows); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_EMPTY_SEARCH, 1); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SEARCH_DIVIDER, 1); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SEARCH_MARKET_DIVIDER, 1); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SEARCH_MARKET, 1); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_ICON, approxRows * mNumAppsPerRow); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON, mNumAppsPerRow); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_PREDICTION_DIVIDER, 1); + pool.setMaxRecycledViews(AllAppsGridAdapter.VIEW_TYPE_SECTION_BREAK, approxRows); } /** @@ -176,7 +178,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView if (position != NO_POSITION) { List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems(); AlphabeticalAppsList.AdapterItem item = items.get(position); - if (item.viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + if (item.viewType == AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON) { targetParent.containerType = LauncherLogProto.PREDICTION; return; } @@ -265,7 +267,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView // Find the index and height of the first visible row (all rows have the same height) int rowCount = mApps.getNumAppRows(); - getCurScrollState(mScrollPosState, -1); + getCurScrollState(mScrollPosState, AllAppsGridAdapter.VIEW_TYPE_MASK_ICON); if (mScrollPosState.rowIndex < 0) { mScrollbar.setThumbOffset(-1, -1); return; @@ -352,7 +354,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView int position = getChildPosition(child); if (position != NO_POSITION) { AlphabeticalAppsList.AdapterItem item = items.get(position); - if ((item.viewType & viewTypeMask) != 0) { + if (AllAppsGridAdapter.isViewType(item.viewType, viewTypeMask)) { stateOut.rowIndex = item.rowIndex; stateOut.rowTopOffset = getLayoutManager().getDecoratedTop(child); stateOut.itemPos = position; diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java index 9d2fe54db..b70c16511 100644 --- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java +++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java @@ -108,7 +108,7 @@ public class AlphabeticalAppsList { public static AdapterItem asSectionBreak(int pos, SectionInfo section) { AdapterItem item = new AdapterItem(); - item.viewType = AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_SECTION_BREAK; item.position = pos; item.sectionInfo = section; section.sectionBreakItem = item; @@ -118,14 +118,14 @@ public class AlphabeticalAppsList { public static AdapterItem asPredictedApp(int pos, SectionInfo section, String sectionName, int sectionAppIndex, AppInfo appInfo, int appIndex) { AdapterItem item = asApp(pos, section, sectionName, sectionAppIndex, appInfo, appIndex); - item.viewType = AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON; return item; } public static AdapterItem asApp(int pos, SectionInfo section, String sectionName, int sectionAppIndex, AppInfo appInfo, int appIndex) { AdapterItem item = new AdapterItem(); - item.viewType = AllAppsGridAdapter.ICON_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_ICON; item.position = pos; item.sectionInfo = section; item.sectionName = sectionName; @@ -137,21 +137,35 @@ public class AlphabeticalAppsList { public static AdapterItem asEmptySearch(int pos) { AdapterItem item = new AdapterItem(); - item.viewType = AllAppsGridAdapter.EMPTY_SEARCH_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_EMPTY_SEARCH; item.position = pos; return item; } - public static AdapterItem asDivider(int pos) { + public static AdapterItem asPredictionDivider(int pos) { AdapterItem item = new AdapterItem(); - item.viewType = AllAppsGridAdapter.SEARCH_MARKET_DIVIDER_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_PREDICTION_DIVIDER; + item.position = pos; + return item; + } + + public static AdapterItem asSearchDivder(int pos) { + AdapterItem item = new AdapterItem(); + item.viewType = AllAppsGridAdapter.VIEW_TYPE_SEARCH_DIVIDER; + item.position = pos; + return item; + } + + public static AdapterItem asMarketDivider(int pos) { + AdapterItem item = new AdapterItem(); + item.viewType = AllAppsGridAdapter.VIEW_TYPE_SEARCH_MARKET_DIVIDER; item.position = pos; return item; } public static AdapterItem asMarketSearch(int pos) { AdapterItem item = new AdapterItem(); - item.viewType = AllAppsGridAdapter.SEARCH_MARKET_VIEW_TYPE; + item.viewType = AllAppsGridAdapter.VIEW_TYPE_SEARCH_MARKET; item.position = pos; return item; } @@ -414,6 +428,9 @@ public class AlphabeticalAppsList { } } + // Add the search divider + mAdapterItems.add(AdapterItem.asSearchDivder(position++)); + // Process the predicted app components mPredictedApps.clear(); if (mPredictedAppComponents != null && !mPredictedAppComponents.isEmpty() && !hasFilter()) { @@ -452,6 +469,8 @@ public class AlphabeticalAppsList { mAdapterItems.add(appItem); mFilteredApps.add(info); } + + mAdapterItems.add(AdapterItem.asPredictionDivider(position++)); } } @@ -491,7 +510,7 @@ public class AlphabeticalAppsList { if (hasNoFilteredResults()) { mAdapterItems.add(AdapterItem.asEmptySearch(position++)); } else { - mAdapterItems.add(AdapterItem.asDivider(position++)); + mAdapterItems.add(AdapterItem.asMarketDivider(position++)); } mAdapterItems.add(AdapterItem.asMarketSearch(position++)); } @@ -507,10 +526,9 @@ public class AlphabeticalAppsList { int rowIndex = -1; for (AdapterItem item : mAdapterItems) { item.rowIndex = 0; - if (item.viewType == AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE) { + if (AllAppsGridAdapter.isDividerViewType(item.viewType)) { numAppsInSection = 0; - } else if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE || - item.viewType == AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + } else if (AllAppsGridAdapter.isIconViewType(item.viewType)) { if (numAppsInSection % mNumAppsPerRow == 0) { numAppsInRow = 0; rowIndex++; @@ -529,8 +547,7 @@ public class AlphabeticalAppsList { float rowFraction = 1f / mNumAppRowsInAdapter; for (FastScrollSectionInfo info : mFastScrollerSections) { AdapterItem item = info.fastScrollToItem; - if (item.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE && - item.viewType != AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + if (!AllAppsGridAdapter.isIconViewType(item.viewType)) { info.touchFraction = 0f; continue; } @@ -544,8 +561,7 @@ public class AlphabeticalAppsList { float cumulativeTouchFraction = 0f; for (FastScrollSectionInfo info : mFastScrollerSections) { AdapterItem item = info.fastScrollToItem; - if (item.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE && - item.viewType != AllAppsGridAdapter.PREDICTION_ICON_VIEW_TYPE) { + if (!AllAppsGridAdapter.isIconViewType(item.viewType)) { info.touchFraction = 0f; continue; } |