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;
}