diff options
author | Winson Chung <winsonc@google.com> | 2013-11-06 13:23:29 -0800 |
---|---|---|
committer | Winson Chung <winsonc@google.com> | 2013-11-07 18:50:37 +0000 |
commit | c82d2622bc7305fd3545fe7df97a30187283113f (patch) | |
tree | 2282fdeff74e54225434dbd1688f6c660d59f0d1 | |
parent | ebb9ebed6407a6ff57dd3914d0fa99eb620aca2e (diff) | |
download | android_packages_apps_Trebuchet-c82d2622bc7305fd3545fe7df97a30187283113f.tar.gz android_packages_apps_Trebuchet-c82d2622bc7305fd3545fe7df97a30187283113f.tar.bz2 android_packages_apps_Trebuchet-c82d2622bc7305fd3545fe7df97a30187283113f.zip |
Dyanmically lay out overview mode across all orientations and form factors.
Change-Id: I788bbf289717b30b19afc9ad9d611c85715bc623
-rw-r--r-- | res/drawable-hdpi/ic_setting.png | bin | 2637 -> 3282 bytes | |||
-rw-r--r-- | res/drawable-hdpi/ic_setting_pressed.png | bin | 3099 -> 3642 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_setting.png | bin | 1669 -> 2065 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_setting_pressed.png | bin | 1868 -> 2182 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_setting.png | bin | 3625 -> 4499 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_setting_pressed.png | bin | 4524 -> 5300 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_setting.png | bin | 4105 -> 4512 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_setting_pressed.png | bin | 7113 -> 7627 bytes | |||
-rw-r--r-- | res/layout-land/launcher.xml | 13 | ||||
-rw-r--r-- | res/layout/overview_panel.xml | 16 | ||||
-rw-r--r-- | res/values/config.xml | 6 | ||||
-rw-r--r-- | res/values/dimens.xml | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/DynamicGrid.java | 42 | ||||
-rw-r--r-- | src/com/android/launcher3/PagedView.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 28 |
15 files changed, 72 insertions, 45 deletions
diff --git a/res/drawable-hdpi/ic_setting.png b/res/drawable-hdpi/ic_setting.png Binary files differindex c617154f1..3f5bc43fd 100644 --- a/res/drawable-hdpi/ic_setting.png +++ b/res/drawable-hdpi/ic_setting.png diff --git a/res/drawable-hdpi/ic_setting_pressed.png b/res/drawable-hdpi/ic_setting_pressed.png Binary files differindex fb58a4b12..9201064cf 100644 --- a/res/drawable-hdpi/ic_setting_pressed.png +++ b/res/drawable-hdpi/ic_setting_pressed.png diff --git a/res/drawable-mdpi/ic_setting.png b/res/drawable-mdpi/ic_setting.png Binary files differindex 0c8ae9d65..1e7645953 100644 --- a/res/drawable-mdpi/ic_setting.png +++ b/res/drawable-mdpi/ic_setting.png diff --git a/res/drawable-mdpi/ic_setting_pressed.png b/res/drawable-mdpi/ic_setting_pressed.png Binary files differindex 846091f58..d7aca18e1 100644 --- a/res/drawable-mdpi/ic_setting_pressed.png +++ b/res/drawable-mdpi/ic_setting_pressed.png diff --git a/res/drawable-xhdpi/ic_setting.png b/res/drawable-xhdpi/ic_setting.png Binary files differindex 91ba98c55..6f06bcfd9 100644 --- a/res/drawable-xhdpi/ic_setting.png +++ b/res/drawable-xhdpi/ic_setting.png diff --git a/res/drawable-xhdpi/ic_setting_pressed.png b/res/drawable-xhdpi/ic_setting_pressed.png Binary files differindex 08aafc405..bca8ccdd0 100644 --- a/res/drawable-xhdpi/ic_setting_pressed.png +++ b/res/drawable-xhdpi/ic_setting_pressed.png diff --git a/res/drawable-xxhdpi/ic_setting.png b/res/drawable-xxhdpi/ic_setting.png Binary files differindex 6e1e6627c..b3729d315 100644 --- a/res/drawable-xxhdpi/ic_setting.png +++ b/res/drawable-xxhdpi/ic_setting.png diff --git a/res/drawable-xxhdpi/ic_setting_pressed.png b/res/drawable-xxhdpi/ic_setting_pressed.png Binary files differindex a202a40fe..5c9c1be44 100644 --- a/res/drawable-xxhdpi/ic_setting_pressed.png +++ b/res/drawable-xxhdpi/ic_setting_pressed.png diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index bf670d4a4..abb19f4bb 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -77,19 +77,6 @@ android:layout_height="match_parent" android:visibility="gone" /> - <!-- TODO: Fix - <com.android.launcher3.DrawableStateProxyView - android:id="@+id/voice_button_proxy" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_gravity="top|start" - android:layout_marginTop="64dp" - android:clickable="true" - android:onClick="onClickVoiceButton" - android:importantForAccessibility="no" - launcher:sourceViewId="@+id/voice_button" /> - --> - <include layout="@layout/apps_customize_pane" android:id="@+id/apps_customize_pane" android:layout_width="match_parent" diff --git a/res/layout/overview_panel.xml b/res/layout/overview_panel.xml index e36004c4b..558900c7d 100644 --- a/res/layout/overview_panel.xml +++ b/res/layout/overview_panel.xml @@ -13,18 +13,18 @@ See the License for the specific language governing permissions and limitations under the License. --> -<LinearLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:orientation="horizontal" android:layout_gravity="center_horizontal|bottom" - android:paddingBottom="@dimen/overview_panel_bottom_padding"> + android:orientation="horizontal"> <TextView android:id="@+id/wallpaper_button" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="start|top" android:text="@string/wallpaper_button_text" android:drawablePadding="4dp" android:drawableTop="@drawable/wallpaper_button" @@ -32,13 +32,11 @@ android:fontFamily="sans-serif-condensed" android:textAllCaps="true" android:textSize="12sp" /> - <Space - android:layout_width="@dimen/overview_panel_buttonSpacing" - android:layout_height="wrap_content"/> <TextView android:id="@+id/widget_button" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|top" android:text="@string/widget_button_text" android:drawablePadding="4dp" android:gravity="center_horizontal" @@ -46,13 +44,11 @@ android:fontFamily="sans-serif-condensed" android:textAllCaps="true" android:textSize="12sp"/> - <Space - android:layout_width="@dimen/overview_panel_buttonSpacing" - android:layout_height="wrap_content"/> <TextView android:id="@+id/settings_button" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="end|top" android:text="@string/settings_button_text" android:drawablePadding="4dp" android:gravity="center_horizontal" @@ -60,4 +56,4 @@ android:fontFamily="sans-serif-condensed" android:textAllCaps="true" android:textSize="12sp" /> -</LinearLayout> +</FrameLayout> diff --git a/res/values/config.xml b/res/values/config.xml index 1a83556fb..1538d9fab 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -3,6 +3,10 @@ <integer name="config_dynamic_grid_max_long_edge_cell_count">6</integer> <integer name="config_dynamic_grid_max_short_edge_cell_count">5</integer> <integer name="config_dynamic_grid_min_edge_cell_count">3</integer> + <!-- Out of 100, the percent of space the overview bar should try and take vertically. --> + <integer name="config_dynamic_grid_overview_icon_zone_percentage">20</integer> + <!-- Out of 100, the percent to shrink the workspace during overview mode. --> + <integer name="config_dynamic_grid_overview_scale_percentage">80</integer> <!-- Miscellaneous --> <bool name="config_largeHeap">false</bool> @@ -24,8 +28,6 @@ <!-- Out of 100, the percent to shrink the workspace during spring loaded mode. --> <integer name="config_workspaceSpringLoadShrinkPercentage">80</integer> - <!-- Out of 100, the percent to shrink the workspace during overview mode. --> - <integer name="config_workspaceOverviewShrinkPercentage">58</integer> <!-- Fade/zoom in/out duration & scale in the AllApps transition. Note: This should be less than the workspaceShrinkTime as they happen together. --> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 740393ea5..c86fe314d 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -23,6 +23,9 @@ <dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen> <dimen name="dynamic_grid_all_apps_cell_padding">18dp</dimen> <dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen> + <dimen name="dynamic_grid_overview_min_icon_zone_height">80dp</dimen> + <dimen name="dynamic_grid_overview_max_icon_zone_height">120dp</dimen> + <dimen name="dynamic_grid_overview_bar_max_width">280dp</dimen> <!-- Wallpaper picker --> <dimen name="wallpaperThumbnailWidth">106.5dp</dimen> @@ -49,9 +52,6 @@ <!-- Workspace --> <dimen name="workspace_max_gap">16dp</dimen> <dimen name="workspace_overscroll_drawable_padding">0dp</dimen> - <dimen name="overview_panel_bottom_padding">50dp</dimen> - <dimen name="overview_panel_buttonSpacing">60dp</dimen> - <dimen name="overview_mode_page_offset">130dp</dimen> <!-- QSB --> <dimen name="toolbar_button_vertical_padding">4dip</dimen> diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 0d759a175..5f8c011f9 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -86,6 +86,12 @@ class DeviceProfile { int availableHeightPx; int defaultPageSpacingPx; + int overviewModeMinIconZoneHeightPx; + int overviewModeMaxIconZoneHeightPx; + int overviewModeMaxBarWidthPx; + float overviewModeIconZoneRatio; + float overviewModeScaleFactor; + int iconSizePx; int iconTextSizePx; int iconDrawablePaddingPx; @@ -158,6 +164,16 @@ class DeviceProfile { res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing); allAppsCellPaddingPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_all_apps_cell_padding); + overviewModeMinIconZoneHeightPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_min_icon_zone_height); + overviewModeMaxIconZoneHeightPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_max_icon_zone_height); + overviewModeMaxBarWidthPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_bar_max_width); + overviewModeIconZoneRatio = + res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f; + overviewModeScaleFactor = + res.getInteger(R.integer.config_dynamic_grid_overview_scale_percentage) / 100f; // Interpolate the rows for (DeviceProfile p : profiles) { @@ -454,6 +470,20 @@ class DeviceProfile { } } + Rect getOverviewModeButtonBarRect() { + int zoneHeight = (int) (overviewModeIconZoneRatio * availableHeightPx); + zoneHeight = Math.min(overviewModeMaxIconZoneHeightPx, + Math.max(overviewModeMinIconZoneHeightPx, zoneHeight)); + return new Rect(0, availableHeightPx - zoneHeight, 0, availableHeightPx); + } + + float getOverviewModeScale() { + Rect workspacePadding = getWorkspacePadding(); + Rect overviewBar = getOverviewModeButtonBarRect(); + int pageSpace = availableHeightPx - workspacePadding.top - workspacePadding.bottom; + return (overviewModeScaleFactor * (pageSpace - overviewBar.height())) / pageSpace; + } + // The rect returned will be extended to below the system ui that covers the workspace Rect getHotseatRect() { if (isVerticalBarLayout()) { @@ -601,6 +631,7 @@ class DeviceProfile { } } + // Layout AllApps AppsCustomizeTabHost host = (AppsCustomizeTabHost) launcher.findViewById(R.id.apps_customize_pane); if (host != null) { @@ -639,6 +670,17 @@ class DeviceProfile { pagedView.setWidgetsPageIndicatorPadding(pageIndicatorHeight); } } + + // Layout the Overview Mode + View overviewMode = launcher.getOverviewPanel(); + if (overviewMode != null) { + Rect r = getOverviewModeButtonBarRect(); + lp = (FrameLayout.LayoutParams) overviewMode.getLayoutParams(); + lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + lp.width = Math.min(availableWidthPx, overviewModeMaxBarWidthPx); + lp.height = r.height(); + overviewMode.setLayoutParams(lp); + } } } diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 8181bea4f..5ff80b8f1 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -786,14 +786,14 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); - // NOTE: We multiply by 1.5f to account for the fact that depending on the offset of the + // NOTE: We multiply by 2f to account for the fact that depending on the offset of the // viewport, we can be at most one and a half screens offset once we scale down DisplayMetrics dm = getResources().getDisplayMetrics(); int maxSize = Math.max(dm.widthPixels + mInsets.left + mInsets.right, dm.heightPixels + mInsets.top + mInsets.bottom); - int parentWidthSize = (int) (1.5f * maxSize); - int parentHeightSize = maxSize; + int parentWidthSize = (int) (2f * maxSize); + int parentHeightSize = (int) (2f * maxSize); int scaledWidthSize, scaledHeightSize; if (mUseMinScale) { scaledWidthSize = (int) (parentWidthSize / mMinScale); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 8c2c89d75..7692ae6d8 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -184,7 +184,6 @@ public class Workspace extends SmoothPagedView private SpringLoadedDragController mSpringLoadedDragController; private float mSpringLoadedShrinkFactor; private float mOverviewModeShrinkFactor; - private int mOverviewModePageOffset; // State variable that indicates whether the pages are small (ie when you're // in all apps or customize mode) @@ -315,13 +314,13 @@ public class Workspace extends SmoothPagedView mFadeInAdjacentScreens = false; mWallpaperManager = WallpaperManager.getInstance(context); + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Workspace, defStyle, 0); mSpringLoadedShrinkFactor = res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f; - mOverviewModeShrinkFactor = - res.getInteger(R.integer.config_workspaceOverviewShrinkPercentage) / 100.0f; - mOverviewModePageOffset = res.getDimensionPixelSize(R.dimen.overview_mode_page_offset); + mOverviewModeShrinkFactor = grid.getOverviewModeScale(); mCameraDistance = res.getInteger(R.integer.config_cameraDistance); mOriginalDefaultPage = mDefaultPage = a.getInt(R.styleable.Workspace_defaultScreen, 1); a.recycle(); @@ -417,10 +416,8 @@ public class Workspace extends SmoothPagedView setClipChildren(false); setClipToPadding(false); setChildrenDrawnWithCacheEnabled(true); - - // This is a bit of a hack to account for the fact that we translate the workspace - // up a bit, and still need to draw the background covering the whole screen. - setMinScale(mOverviewModeShrinkFactor - 0.2f); + + setMinScale(mOverviewModeShrinkFactor); setupLayoutTransition(); final Resources res = getResources(); @@ -1998,14 +1995,17 @@ public class Workspace extends SmoothPagedView } int getOverviewModeTranslationY() { - int childHeight = getNormalChildHeight(); - int viewPortHeight = getViewportHeight(); - int scaledChildHeight = (int) (mOverviewModeShrinkFactor * childHeight); + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + Rect overviewBar = grid.getOverviewModeButtonBarRect(); - int offset = (viewPortHeight - scaledChildHeight) / 2; - int offsetDelta = mOverviewModePageOffset - offset + mInsets.top; + int availableHeight = getViewportHeight(); + int scaledHeight = (int) (mOverviewModeShrinkFactor * getNormalChildHeight()); + int offsetFromTopEdge = (availableHeight - scaledHeight) / 2; + int offsetToCenterInOverview = (availableHeight - mInsets.top - overviewBar.height() + - scaledHeight) / 2; - return offsetDelta; + return -offsetFromTopEdge + mInsets.top + offsetToCenterInOverview; } boolean shouldVoiceButtonProxyBeVisible() { |