From c2a20ff0a87f58b2be66f067b0024db7ff5185d3 Mon Sep 17 00:00:00 2001 From: Peter Schiller Date: Thu, 7 Jul 2016 14:47:05 -0700 Subject: [PATCH] Consolidate all the dividers to provide same look and feel Bug: 30017936 Change-Id: I072cb116dba1df555a63f3f67b730f7f9c3a235a --- res/drawable/all_apps_search_bg.xml | 31 ----- res/drawable/horizontal_line.xml | 21 --- res/layout/all_apps.xml | 1 - ...arket_divider.xml => all_apps_divider.xml} | 20 ++- res/layout/all_apps_prediction_bar_icon.xml | 4 +- res/layout/all_apps_search_market.xml | 4 +- res/values/colors.xml | 1 + res/values/dimens.xml | 16 +-- .../android/launcher3/BaseRecyclerView.java | 2 +- .../allapps/AllAppsContainerView.java | 21 ++- .../launcher3/allapps/AllAppsGridAdapter.java | 131 ++++++++++-------- .../allapps/AllAppsRecyclerView.java | 20 +-- .../allapps/AlphabeticalAppsList.java | 46 ++++-- 13 files changed, 144 insertions(+), 174 deletions(-) delete mode 100644 res/drawable/all_apps_search_bg.xml delete mode 100644 res/drawable/horizontal_line.xml rename res/layout/{all_apps_search_market_divider.xml => all_apps_divider.xml} (56%) diff --git a/res/drawable/all_apps_search_bg.xml b/res/drawable/all_apps_search_bg.xml deleted file mode 100644 index cf63d41c21..0000000000 --- a/res/drawable/all_apps_search_bg.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/res/drawable/horizontal_line.xml b/res/drawable/horizontal_line.xml deleted file mode 100644 index 3f3f17e351..0000000000 --- a/res/drawable/horizontal_line.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml index 8c2010f899..d55fda7713 100644 --- a/res/layout/all_apps.xml +++ b/res/layout/all_apps.xml @@ -66,7 +66,6 @@ android:layout_gravity="center|top" android:paddingLeft="@dimen/container_fastscroll_thumb_max_width" android:paddingRight="@dimen/container_fastscroll_thumb_max_width" - android:background="@drawable/all_apps_search_bg" android:gravity="center|bottom" android:orientation="horizontal" android:saveEnabled="false"> diff --git a/res/layout/all_apps_search_market_divider.xml b/res/layout/all_apps_divider.xml similarity index 56% rename from res/layout/all_apps_search_market_divider.xml rename to res/layout/all_apps_divider.xml index 39097818f7..b2ee7c1b48 100644 --- a/res/layout/all_apps_search_market_divider.xml +++ b/res/layout/all_apps_divider.xml @@ -13,15 +13,13 @@ See the License for the specific language governing permissions and limitations under the License. --> - \ No newline at end of file + android:layout_height="@dimen/all_apps_divider_height" + android:layout_marginBottom="@dimen/all_apps_divider_margin_vertical" + android:layout_marginLeft="@dimen/container_fastscroll_thumb_max_width" + android:layout_marginRight="@dimen/container_fastscroll_thumb_max_width" + android:layout_marginTop="@dimen/all_apps_divider_margin_vertical" + android:background="@color/all_apps_divider_color" + android:focusable="false" /> \ No newline at end of file diff --git a/res/layout/all_apps_prediction_bar_icon.xml b/res/layout/all_apps_prediction_bar_icon.xml index 295b0b7083..3836fed897 100644 --- a/res/layout/all_apps_prediction_bar_icon.xml +++ b/res/layout/all_apps_prediction_bar_icon.xml @@ -21,8 +21,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:paddingTop="@dimen/all_apps_prediction_icon_top_padding" - android:paddingBottom="@dimen/all_apps_prediction_icon_bottom_padding" + android:paddingTop="@dimen/all_apps_icon_top_bottom_padding" + android:paddingBottom="@dimen/all_apps_icon_top_bottom_padding" android:focusable="true" launcher:iconDisplay="all_apps" /> diff --git a/res/layout/all_apps_search_market.xml b/res/layout/all_apps_search_market.xml index 741c96a244..0199212b9c 100644 --- a/res/layout/all_apps_search_market.xml +++ b/res/layout/all_apps_search_market.xml @@ -19,8 +19,8 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="start|center_vertical" - android:paddingLeft="16dp" - android:paddingRight="16dp" + android:paddingLeft="@dimen/container_fastscroll_thumb_max_width" + android:paddingRight="@dimen/container_fastscroll_thumb_max_width" android:fontFamily="sans-serif-medium" android:textSize="14sp" android:textColor="?android:attr/colorAccent" diff --git a/res/values/colors.xml b/res/values/colors.xml index d411a4f47a..937b2f05ac 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -35,6 +35,7 @@ #FFF5F5F5 #FFFFFFFF + #1E000000 #40FFFFFF #FFF diff --git a/res/values/dimens.xml b/res/values/dimens.xml index f3d0eaaa6c..9abe3e601a 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -58,7 +58,7 @@ 8dp 0dp - + 0dp 0dp 8dp @@ -69,10 +69,7 @@ 1dp 8dp 24dp - - 8dp - 18dp - 8dp + 8dp 40dp 144dp 700dp @@ -83,13 +80,8 @@ 16dp 6dp - - -6dp - 1dp + 1dp + 8dp 24dp diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java index f8ef1e1560..4cb050e246 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 30cd607138..717ce74c71 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 d0b8abc604..7d856c04f1 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 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 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. */ @@ -312,12 +309,12 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter 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 9d2fe54dbd..b70c16511d 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; }