From 55616cd363202eccf7a9f9a5af00d12997c24b19 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 23 Sep 2015 14:55:17 -0700 Subject: [PATCH] Added launcher callback to specify search bar height. The search bar can now be be normal or tall. When it is set to tall, the hotseat and page indicators move down so that the workspace isn't compressed quite as much. Change-Id: Id92a946eab3a93524999f92efd847a501a95f002 --- res/values/dimens.xml | 3 ++ src/com/android/launcher3/DeviceProfile.java | 41 +++++++++++++------ src/com/android/launcher3/Launcher.java | 7 ++++ .../android/launcher3/LauncherCallbacks.java | 3 ++ .../launcher3/testing/LauncherExtension.java | 5 +++ 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 36721797e4..99eaecbed9 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -21,6 +21,9 @@ 6dp 500dp 56dp + + 78dp 20dp 4dp 8dp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 47c5ccc9e7..0abfc67715 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -84,7 +84,8 @@ public class DeviceProfile { 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; @@ -95,7 +96,9 @@ public class DeviceProfile { // 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, @@ -198,8 +201,10 @@ public class DeviceProfile { // 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(); @@ -211,7 +216,8 @@ public class DeviceProfile { dragViewScale = (iconSizePx + scaleDps) / iconSizePx; // Hotseat - hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; + hotseatBarHeightNormalPx = iconSizePx + 4 * edgeMarginPx; + hotseatBarHeightShortPx = iconSizePx + 2 * edgeMarginPx; hotseatCellWidthPx = iconSizePx; hotseatCellHeightPx = iconSizePx; @@ -252,10 +258,10 @@ public class DeviceProfile { 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 { @@ -287,11 +293,11 @@ public class DeviceProfile { 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) { @@ -341,7 +347,7 @@ public class DeviceProfile { // The rect returned will be extended to below the system ui that covers the workspace Rect getHotseatRect() { if (isVerticalBarLayout()) { - return new Rect(availableWidthPx - hotseatBarHeightPx, 0, + return new Rect(availableWidthPx - hotseatBarHeightNormalPx, 0, Integer.MAX_VALUE, availableHeightPx); } else { return new Rect(0, availableHeightPx - hotseatBarHeightPx, @@ -357,8 +363,9 @@ public class DeviceProfile { } /** - * 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. */ boolean isVerticalBarLayout() { return isLandscape && transposeLayoutWithOrientation; @@ -386,11 +393,19 @@ public class DeviceProfile { // Layout the search bar space View searchBar = launcher.getSearchDropTargetBar(); lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); + searchBarHeight = launcher.getSearchBarHeight(); + if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) { + hotseatBarHeightPx = hotseatBarHeightShortPx; + searchBarSpaceHeightPx = searchBarSpaceHeightTallPx; + } else { + hotseatBarHeightPx = hotseatBarHeightNormalPx; + searchBarSpaceHeightPx = searchBarSpaceHeightNormalPx; + } if (hasVerticalBarLayout) { // Vertical search bar space -- The search bar is fixed in the layout to be on the left // of the screen regardless of RTL lp.gravity = Gravity.LEFT; - lp.width = searchBarSpaceHeightPx; + lp.width = searchBarSpaceHeightNormalPx; LinearLayout targets = (LinearLayout) searchBar.findViewById(R.id.drag_target_bar); targets.setOrientation(LinearLayout.VERTICAL); @@ -424,7 +439,7 @@ public class DeviceProfile { // 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 bf9a42681d..7f8dc3c2e2 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4137,6 +4137,13 @@ public class Launcher extends Activity 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 e34bd57fdd..927db224f8 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -99,6 +99,9 @@ public interface LauncherCallbacks { public boolean isLauncherPreinstalled(); public AllAppsSearchBarController getAllAppsSearchBarController(); public List 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 dac279afa9..3364fcc9f5 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -302,6 +302,11 @@ public class LauncherExtension extends Launcher { return new ArrayList<>(); } + @Override + public int getSearchBarHeight() { + return SEARCH_BAR_HEIGHT_NORMAL; + } + @Override public boolean isLauncherPreinstalled() { return false;