resolved conflicts for fa3c369c to ub-launcher3-master

Change-Id: I6bfc3d3b731a414060d86d4f1dfc5480c279edc9
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0448f7c..c30ee1d 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -19,6 +19,9 @@
     <dimen name="dynamic_grid_edge_margin">6dp</dimen>
     <dimen name="dynamic_grid_search_bar_max_width">500dp</dimen>
     <dimen name="dynamic_grid_search_bar_height">56dp</dimen>
+    <!-- We want 32dp extra for the tall search bar, but 10dp comes from unwanted padding between
+         the search bar and workspace. -->
+    <dimen name="dynamic_grid_search_bar_height_tall">78dp</dimen>
     <dimen name="dynamic_grid_page_indicator_height">20dp</dimen>
     <dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen>
     <dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen>
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 46c40ee..4a489de 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -90,7 +90,8 @@
     public int hotseatCellWidthPx;
     public int hotseatCellHeightPx;
     public int hotseatIconSizePx;
-    private int hotseatBarHeightPx;
+    private int hotseatBarHeightNormalPx, hotseatBarHeightShortPx;
+    private int hotseatBarHeightPx; // One of the above.
 
     // All apps
     public int allAppsNumCols;
@@ -101,7 +102,9 @@
 
     // QSB
     private int searchBarSpaceWidthPx;
-    private int searchBarSpaceHeightPx;
+    private int searchBarSpaceHeightNormalPx, searchBarSpaceHeightTallPx;
+    private int searchBarSpaceHeightPx; // One of the above.
+    private int searchBarHeight = LauncherCallbacks.SEARCH_BAR_HEIGHT_NORMAL;
 
     public DeviceProfile(Context context, InvariantDeviceProfile inv,
             Point minSize, Point maxSize,
@@ -205,8 +208,10 @@
         // Search Bar
         searchBarSpaceWidthPx = Math.min(widthPx,
                 res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width));
-        searchBarSpaceHeightPx = getSearchBarTopOffset()
+        searchBarSpaceHeightNormalPx = getSearchBarTopOffset()
                 + res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height);
+        searchBarSpaceHeightTallPx = getSearchBarTopOffset()
+                + res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height_tall);
 
         // Calculate the actual text height
         Paint textPaint = new Paint();
@@ -218,7 +223,8 @@
         dragViewScale = (iconSizePx + scaleDps) / iconSizePx;
 
         // Hotseat
-        hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx;
+        hotseatBarHeightNormalPx = iconSizePx + 4 * edgeMarginPx;
+        hotseatBarHeightShortPx = iconSizePx + 2 * edgeMarginPx;
         hotseatCellWidthPx = iconSizePx;
         hotseatCellHeightPx = iconSizePx;
 
@@ -259,10 +265,10 @@
         Rect bounds = new Rect();
         if (isVerticalBarLayout()) {
             if (isLayoutRtl) {
-                bounds.set(availableWidthPx - searchBarSpaceHeightPx, edgeMarginPx,
+                bounds.set(availableWidthPx - searchBarSpaceHeightNormalPx, edgeMarginPx,
                         availableWidthPx, availableHeightPx - edgeMarginPx);
             } else {
-                bounds.set(0, edgeMarginPx, searchBarSpaceHeightPx,
+                bounds.set(0, edgeMarginPx, searchBarSpaceHeightNormalPx,
                         availableHeightPx - edgeMarginPx);
             }
         } else {
@@ -306,11 +312,11 @@
         if (isVerticalBarLayout()) {
             // Pad the left and right of the workspace with search/hotseat bar sizes
             if (isLayoutRtl) {
-                padding.set(hotseatBarHeightPx, edgeMarginPx,
+                padding.set(hotseatBarHeightNormalPx, edgeMarginPx,
                         searchBarBounds.width(), edgeMarginPx);
             } else {
                 padding.set(searchBarBounds.width(), edgeMarginPx,
-                        hotseatBarHeightPx, edgeMarginPx);
+                        hotseatBarHeightNormalPx, edgeMarginPx);
             }
         } else {
             if (isTablet) {
@@ -379,8 +385,9 @@
     }
 
     /**
-     * When {@code true}, hotseat is on the bottom row when in landscape mode.
-     * If {@code false}, hotseat is on the right column when in landscape mode.
+     * When {@code true}, the device is in landscape mode and the hotseat is on the right column.
+     * When {@code false}, either device is in portrait mode or the device is in landscape mode and
+     * the hotseat is on the bottom row.
      */
     public boolean isVerticalBarLayout() {
         return isLandscape && transposeLayoutWithOrientation;
@@ -406,6 +413,14 @@
         final boolean isLayoutRtl = Utilities.isRtl(launcher.getResources());
 
         // Layout the search bar space
+        searchBarHeight = launcher.getSearchBarHeight();
+        if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) {
+            hotseatBarHeightPx = hotseatBarHeightShortPx;
+            searchBarSpaceHeightPx = searchBarSpaceHeightTallPx;
+        } else {
+            hotseatBarHeightPx = hotseatBarHeightNormalPx;
+            searchBarSpaceHeightPx = searchBarSpaceHeightNormalPx;
+        }
         View searchBar = launcher.getSearchDropTargetBar();
         lp = getDropTargetBarLayoutParams(hasVerticalBarLayout, searchBar, Gravity.TOP);
         searchBar.setLayoutParams(lp);
@@ -439,7 +454,7 @@
             // Vertical hotseat -- The hotseat is fixed in the layout to be on the right of the
             //                     screen regardless of RTL
             lp.gravity = Gravity.RIGHT;
-            lp.width = hotseatBarHeightPx;
+            lp.width = hotseatBarHeightNormalPx;
             lp.height = LayoutParams.MATCH_PARENT;
             hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx);
         } else if (isTablet) {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 55fe3d2..4b368df 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -4139,6 +4139,13 @@
         return mDeviceProfile.getSearchBarBounds(Utilities.isRtl(getResources()));
     }
 
+    public int getSearchBarHeight() {
+        if (mLauncherCallbacks != null) {
+            return mLauncherCallbacks.getSearchBarHeight();
+        }
+        return LauncherCallbacks.SEARCH_BAR_HEIGHT_NORMAL;
+    }
+
     public void bindSearchProviderChanged() {
         if (mSearchDropTargetBar == null) {
             return;
diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java
index e34bd57..927db22 100644
--- a/src/com/android/launcher3/LauncherCallbacks.java
+++ b/src/com/android/launcher3/LauncherCallbacks.java
@@ -99,6 +99,9 @@
     public boolean isLauncherPreinstalled();
     public AllAppsSearchBarController getAllAppsSearchBarController();
     public List<ComponentKey> getPredictedApps();
+    public static final int SEARCH_BAR_HEIGHT_NORMAL = 0, SEARCH_BAR_HEIGHT_TALL = 1;
+    /** Must return one of {@link #SEARCH_BAR_HEIGHT_NORMAL} or {@link #SEARCH_BAR_HEIGHT_TALL} */
+    public int getSearchBarHeight();
 
     /**
      * Returning true will immediately result in a call to {@link #setLauncherOverlayView(ViewGroup,
diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java
index c6d5ad1..8055b5f 100644
--- a/src/com/android/launcher3/testing/LauncherExtension.java
+++ b/src/com/android/launcher3/testing/LauncherExtension.java
@@ -303,6 +303,11 @@
         }
 
         @Override
+        public int getSearchBarHeight() {
+            return SEARCH_BAR_HEIGHT_NORMAL;
+        }
+
+        @Override
         public boolean isLauncherPreinstalled() {
             return false;
         }