From 47328fd53f43fd0c2ed14ad925dd04483f9229a0 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 25 May 2016 18:56:41 -0700 Subject: Removing the SearchDropTarget bar as it no longer contains the QSB > Renaming it to simply DropTargetBar > Moving AppInfo to the top bar as well > The workspace pages will extend to the top edge (minus some padding). Since the QSB is no longer displayed on top of every page, there is no reason to reserve the space. > In spring-loaded mode, the workspace cell layout will scale enough to make room for the drop target bar at the top Change-Id: I2baf607310335dd576c9d9fcbb75ab708f47ac03 --- .../android/launcher3/AppInfoDropTargetBar.java | 80 ---------- src/com/android/launcher3/BaseDropTargetBar.java | 146 ----------------- src/com/android/launcher3/ButtonDropTarget.java | 12 +- src/com/android/launcher3/DeviceProfile.java | 174 ++++++--------------- src/com/android/launcher3/DropTargetBar.java | 153 ++++++++++++++++++ src/com/android/launcher3/FocusHelper.java | 2 +- src/com/android/launcher3/Launcher.java | 31 +--- .../launcher3/LauncherAppWidgetProviderInfo.java | 5 +- .../LauncherStateTransitionAnimation.java | 6 - src/com/android/launcher3/SearchDropTargetBar.java | 140 ----------------- src/com/android/launcher3/Workspace.java | 57 +++---- .../WorkspaceStateTransitionAnimation.java | 3 +- src/com/android/launcher3/dragndrop/DragLayer.java | 30 +--- src/com/android/launcher3/folder/Folder.java | 6 +- 14 files changed, 258 insertions(+), 587 deletions(-) delete mode 100644 src/com/android/launcher3/AppInfoDropTargetBar.java delete mode 100644 src/com/android/launcher3/BaseDropTargetBar.java create mode 100644 src/com/android/launcher3/DropTargetBar.java delete mode 100644 src/com/android/launcher3/SearchDropTargetBar.java (limited to 'src/com') diff --git a/src/com/android/launcher3/AppInfoDropTargetBar.java b/src/com/android/launcher3/AppInfoDropTargetBar.java deleted file mode 100644 index e06f94100..000000000 --- a/src/com/android/launcher3/AppInfoDropTargetBar.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.content.Context; -import android.util.AttributeSet; - -import com.android.launcher3.dragndrop.DragController; - -public class AppInfoDropTargetBar extends BaseDropTargetBar { - private ButtonDropTarget mAppInfoDropTarget; - - public AppInfoDropTargetBar(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public AppInfoDropTargetBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - // Get the individual components - mAppInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text); - - mAppInfoDropTarget.setDropTargetBar(this); - } - - @Override - public void setup(Launcher launcher, DragController dragController) { - dragController.addDragListener(this); - - dragController.addDragListener(mAppInfoDropTarget); - dragController.addDropTarget(mAppInfoDropTarget); - - mAppInfoDropTarget.setLauncher(launcher); - } - - @Override - public void showDropTargets() { - animateDropTargetBarToAlpha(1f, DEFAULT_DRAG_FADE_DURATION); - } - - @Override - public void hideDropTargets() { - animateDropTargetBarToAlpha(0f, DEFAULT_DRAG_FADE_DURATION); - } - - private void animateDropTargetBarToAlpha(float alpha, int duration) { - resetAnimation(duration); - if (duration > 0) { - animateAlpha(mDropTargetBar, alpha, DEFAULT_INTERPOLATOR); - mCurrentAnimation.start(); - } else { - mDropTargetBar.setAlpha(alpha); - AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); - } - } - - @Override - public void enableAccessibleDrag(boolean enable) { - mAppInfoDropTarget.enableAccessibleDrag(enable); - } -} diff --git a/src/com/android/launcher3/BaseDropTargetBar.java b/src/com/android/launcher3/BaseDropTargetBar.java deleted file mode 100644 index 9b38623c2..000000000 --- a/src/com/android/launcher3/BaseDropTargetBar.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.animation.TimeInterpolator; -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.view.accessibility.AccessibilityManager; -import android.view.animation.AccelerateInterpolator; -import android.widget.FrameLayout; - -import com.android.launcher3.dragndrop.DragController; - -/** - * Base class for drop target bars (where you can drop apps to do actions such as uninstall). - */ -public abstract class BaseDropTargetBar extends FrameLayout implements DragController.DragListener { - protected static final int DEFAULT_DRAG_FADE_DURATION = 175; - protected static final TimeInterpolator DEFAULT_INTERPOLATOR = new AccelerateInterpolator(); - - protected View mDropTargetBar; - protected boolean mAccessibilityEnabled = false; - - protected AnimatorSet mCurrentAnimation; - protected boolean mDeferOnDragEnd; - - public BaseDropTargetBar(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public BaseDropTargetBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - mDropTargetBar = findViewById(R.id.drag_target_bar); - - // Create the various fade animations - mDropTargetBar.setAlpha(0f); - } - - /** - * Convenience method to animate the alpha of a view. - */ - protected void animateAlpha(View v, float alpha, TimeInterpolator interpolator) { - if (Float.compare(v.getAlpha(), alpha) != 0) { - ObjectAnimator anim = ObjectAnimator.ofFloat(v, View.ALPHA, alpha); - anim.setInterpolator(interpolator); - anim.addListener(new ViewVisiblilyUpdateHandler(v)); - mCurrentAnimation.play(anim); - } - } - - protected void resetAnimation(int newAnimationDuration) { - // Update the accessibility state - AccessibilityManager am = (AccessibilityManager) - getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); - mAccessibilityEnabled = am.isEnabled(); - - // Cancel any existing animation - if (mCurrentAnimation != null) { - mCurrentAnimation.cancel(); - mCurrentAnimation = null; - } - - if (newAnimationDuration > 0) { - mCurrentAnimation = new AnimatorSet(); - mCurrentAnimation.setDuration(newAnimationDuration); - } - } - - /* - * DragController.DragListener implementation - */ - @Override - public void onDragStart(DragSource source, ItemInfo info, int dragAction) { - showDropTargets(); - } - - /** - * This is called to defer hiding the delete drop target until the drop animation has completed, - * instead of hiding immediately when the drag has ended. - */ - protected void deferOnDragEnd() { - mDeferOnDragEnd = true; - } - - @Override - public void onDragEnd() { - if (!mDeferOnDragEnd) { - hideDropTargets(); - } else { - mDeferOnDragEnd = false; - } - } - - public abstract void showDropTargets(); - - public abstract void hideDropTargets(); - - public abstract void enableAccessibleDrag(boolean enable); - - public abstract void setup(Launcher launcher, DragController dragController); - - private class ViewVisiblilyUpdateHandler extends AnimatorListenerAdapter { - private final View mView; - - ViewVisiblilyUpdateHandler(View v) { - mView = v; - } - - @Override - public void onAnimationStart(Animator animation) { - // Ensure that the view is visible for the animation - mView.setVisibility(View.VISIBLE); - } - - @Override - public void onAnimationEnd(Animator animation){ - AlphaUpdateListener.updateVisibility(mView, mAccessibilityEnabled); - } - - } -} diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 43afbe59e..61ac713a5 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -55,10 +55,10 @@ public abstract class ButtonDropTarget extends TextView private static final int DRAG_VIEW_DROP_DURATION = 285; private final boolean mHideParentOnDisable; + protected final Launcher mLauncher; - protected Launcher mLauncher; private int mBottomDragPadding; - protected BaseDropTargetBar mDropTargetBar; + protected DropTargetBar mDropTargetBar; /** Whether this drop target is active for the current drag */ protected boolean mActive; @@ -80,6 +80,8 @@ public abstract class ButtonDropTarget extends TextView public ButtonDropTarget(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + mLauncher = (Launcher) context; + Resources resources = getResources(); mBottomDragPadding = resources.getDimensionPixelSize(R.dimen.drop_target_drag_padding); @@ -109,11 +111,7 @@ public abstract class ButtonDropTarget extends TextView } } - public void setLauncher(Launcher launcher) { - mLauncher = launcher; - } - - public void setDropTargetBar(BaseDropTargetBar dropTargetBar) { + public void setDropTargetBar(DropTargetBar dropTargetBar) { mDropTargetBar = dropTargetBar; } diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 8d11aaa96..4a550ed9a 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -70,7 +70,10 @@ public class DeviceProfile { public final Rect defaultWidgetPadding; private final int pageIndicatorHeightPx; private final int defaultPageSpacingPx; + private final int topWorkspacePadding; private float dragViewScale; + public float workspaceSpringLoadShrinkFactor; + public final int workspaceSpringLoadedBottomSpace; // Workspace icons public int iconSizePx; @@ -92,8 +95,7 @@ public class DeviceProfile { public int hotseatCellWidthPx; public int hotseatCellHeightPx; public int hotseatIconSizePx; - private int normalHotseatBarHeightPx, shortHotseatBarHeightPx; - private int hotseatBarHeightPx; // One of the above. + private int hotseatBarHeightPx; // All apps public int allAppsNumCols; @@ -102,15 +104,8 @@ public class DeviceProfile { public final int allAppsIconSizePx; public final float allAppsIconTextSizeSp; - // QSB - private int searchBarWidgetInternalPaddingTop, searchBarWidgetInternalPaddingBottom; - private int searchBarTopPaddingPx; - private int tallSearchBarNegativeTopPaddingPx, normalSearchBarTopExtraPaddingPx; - private int searchBarTopExtraPaddingPx; // One of the above. - private int normalSearchBarBottomPaddingPx, tallSearchBarBottomPaddingPx; - private int searchBarBottomPaddingPx; // One of the above. - private int normalSearchBarSpaceHeightPx, tallSearchBarSpaceHeightPx; - private int searchBarSpaceHeightPx; // One of the above. + // Drop Target + public int dropTargetBarSizePx; public DeviceProfile(Context context, InvariantDeviceProfile inv, Point minSize, Point maxSize, @@ -140,6 +135,8 @@ public class DeviceProfile { res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_height); defaultPageSpacingPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing); + topWorkspacePadding = + res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_top_padding); overviewModeMinIconZoneHeightPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_min_icon_zone_height); overviewModeMaxIconZoneHeightPx = @@ -152,6 +149,9 @@ public class DeviceProfile { res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f; iconDrawablePaddingOriginalPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding); + dropTargetBarSizePx = res.getDimensionPixelSize(R.dimen.dynamic_grid_drop_target_size); + workspaceSpringLoadedBottomSpace = + res.getDimensionPixelSize(R.dimen.dynamic_grid_min_spring_loaded_space); // AllApps uses the original non-scaled icon text size allAppsIconTextSizeSp = inv.iconTextSize; @@ -195,7 +195,7 @@ public class DeviceProfile { float usedHeight = (cellHeightPx * inv.numRows); // We only care about the top and bottom workspace padding, which is not affected by RTL. - Rect workspacePadding = getWorkspacePadding(false /* isLayoutRtl */); + Rect workspacePadding = getWorkspacePadding(); int maxHeight = (availableHeightPx - workspacePadding.top - workspacePadding.bottom); if (usedHeight > maxHeight) { scale = maxHeight / usedHeight; @@ -211,33 +211,6 @@ public class DeviceProfile { iconDrawablePaddingPx = drawablePadding; hotseatIconSizePx = (int) (Utilities.pxFromDp(inv.hotseatIconSize, dm) * scale); - // Search Bar - normalSearchBarSpaceHeightPx = res.getDimensionPixelSize( - R.dimen.dynamic_grid_search_bar_height); - tallSearchBarSpaceHeightPx = res.getDimensionPixelSize( - R.dimen.dynamic_grid_search_bar_height_tall); - searchBarWidgetInternalPaddingTop = res.getDimensionPixelSize( - R.dimen.qsb_internal_padding_top); - searchBarWidgetInternalPaddingBottom = res.getDimensionPixelSize( - R.dimen.qsb_internal_padding_bottom); - normalSearchBarTopExtraPaddingPx = res.getDimensionPixelSize( - R.dimen.dynamic_grid_search_bar_extra_top_padding); - tallSearchBarNegativeTopPaddingPx = res.getDimensionPixelSize( - R.dimen.dynamic_grid_search_bar_negative_top_padding_short); - if (isTablet && !isVerticalBarLayout()) { - searchBarTopPaddingPx = searchBarWidgetInternalPaddingTop; - normalSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom + - res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_bottom_padding_tablet); - tallSearchBarBottomPaddingPx = normalSearchBarBottomPaddingPx; - } else { - searchBarTopPaddingPx = searchBarWidgetInternalPaddingTop; - normalSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom + - res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_bottom_padding); - tallSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom - + res.getDimensionPixelSize( - R.dimen.dynamic_grid_search_bar_bottom_negative_padding_short); - } - // Calculate the actual text height Paint textPaint = new Paint(); textPaint.setTextSize(iconTextSizePx); @@ -249,11 +222,22 @@ public class DeviceProfile { dragViewScale = (iconSizePx + scaleDps) / iconSizePx; // Hotseat - normalHotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; - shortHotseatBarHeightPx = iconSizePx + 2 * edgeMarginPx; + hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; hotseatCellWidthPx = iconSizePx; hotseatCellHeightPx = iconSizePx; + if (!isVerticalBarLayout()) { + int expectedWorkspaceHeight = availableHeightPx - hotseatBarHeightPx + - pageIndicatorHeightPx - topWorkspacePadding; + float minRequiredHeight = dropTargetBarSizePx + workspaceSpringLoadedBottomSpace; + workspaceSpringLoadShrinkFactor = Math.min( + res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f, + 1 - (minRequiredHeight / expectedWorkspaceHeight)); + } else { + workspaceSpringLoadShrinkFactor = + res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f; + } + // Folder int folderCellPadding = isTablet || isLandscape ? 6 * edgeMarginPx : 3 * edgeMarginPx; // Don't let the folder get too close to the edges of the screen. @@ -281,60 +265,33 @@ public class DeviceProfile { allAppsNumPredictiveCols = numPredictiveAppCols; } - /** Returns the amount of extra space to allocate to the search bar for vertical padding. */ - private int getSearchBarTotalVerticalPadding() { - return searchBarTopPaddingPx + searchBarTopExtraPaddingPx + searchBarBottomPaddingPx; - } - /** Returns the width and height of the search bar, ignoring any padding. */ - public Point getSearchBarDimensForWidgetOpts(Resources res) { - Rect searchBarBounds = getSearchBarBounds(Utilities.isRtl(res)); + public Point getSearchBarDimensForWidgetOpts() { if (isVerticalBarLayout()) { - return new Point(searchBarBounds.width(), searchBarBounds.height()); - } - int widgetInternalPadding = searchBarWidgetInternalPaddingTop + - searchBarWidgetInternalPaddingBottom; - return new Point(searchBarBounds.width(), searchBarSpaceHeightPx + widgetInternalPadding); - } - - /** Returns the search bar bounds in the current orientation */ - public Rect getSearchBarBounds(boolean isLayoutRtl) { - Rect bounds = new Rect(); - if (isVerticalBarLayout()) { - if (isLayoutRtl) { - bounds.set(availableWidthPx - normalSearchBarSpaceHeightPx, edgeMarginPx, - availableWidthPx, availableHeightPx - edgeMarginPx); - } else { - bounds.set(0, edgeMarginPx, normalSearchBarSpaceHeightPx, - availableHeightPx - edgeMarginPx); - } + return new Point(dropTargetBarSizePx, availableHeightPx - 2 * edgeMarginPx); } else { - int boundsBottom = searchBarSpaceHeightPx + getSearchBarTotalVerticalPadding(); + int gap; if (isTablet) { // Pad the left and right of the workspace to ensure consistent spacing // between all icons int width = getCurrentWidth(); // XXX: If the icon size changes across orientations, we will have to take // that into account here too. - int gap = (int) ((width - 2 * edgeMarginPx - - (inv.numColumns * cellWidthPx)) / (2 * (inv.numColumns + 1))); - bounds.set(edgeMarginPx + gap, 0, - availableWidthPx - (edgeMarginPx + gap), boundsBottom); + gap = ((width - 2 * edgeMarginPx + - (inv.numColumns * cellWidthPx)) / (2 * (inv.numColumns + 1))) + + edgeMarginPx; } else { - bounds.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, - 0, - availableWidthPx - (desiredWorkspaceLeftRightMarginPx - - defaultWidgetPadding.right), boundsBottom); + gap = desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.right; } + return new Point(availableWidthPx - 2 * gap, dropTargetBarSizePx); } - return bounds; } public Point getCellSize() { Point result = new Point(); // Since we are only concerned with the overall padding, layout direction does // not matter. - Rect padding = getWorkspacePadding(false /* isLayoutRtl */ ); + Rect padding = getWorkspacePadding(); result.x = calculateCellWidth(availableWidthPx - padding.left - padding.right, inv.numColumns); result.y = calculateCellHeight(availableHeightPx - padding.top - padding.bottom, @@ -343,20 +300,13 @@ public class DeviceProfile { } /** Returns the workspace padding in the specified orientation */ - public Rect getWorkspacePadding(boolean isLayoutRtl) { - Rect searchBarBounds = getSearchBarBounds(isLayoutRtl); + public Rect getWorkspacePadding() { Rect padding = new Rect(); if (isVerticalBarLayout()) { - // Pad the left and right of the workspace with search/hotseat bar sizes - if (isLayoutRtl) { - padding.set(normalHotseatBarHeightPx, edgeMarginPx, - searchBarBounds.width(), edgeMarginPx); - } else { - padding.set(searchBarBounds.width(), edgeMarginPx, - normalHotseatBarHeightPx, edgeMarginPx); - } + // in case of isVerticalBarLayout, the hotseat is always on the right and the drop + // target bar is on the left, independent of the layout direction. + padding.set(dropTargetBarSizePx, edgeMarginPx, hotseatBarHeightPx, edgeMarginPx); } else { - int paddingTop = searchBarBounds.bottom; int paddingBottom = hotseatBarHeightPx + pageIndicatorHeightPx; if (isTablet) { // Pad the left and right of the workspace to ensure consistent spacing @@ -369,14 +319,14 @@ public class DeviceProfile { ((inv.numColumns - 1) * gapScale * cellWidthPx))); availablePaddingX = (int) Math.min(availablePaddingX, width * MAX_HORIZONTAL_PADDING_PERCENT); - int availablePaddingY = Math.max(0, height - paddingTop - paddingBottom + int availablePaddingY = Math.max(0, height - topWorkspacePadding - paddingBottom - (int) (2 * inv.numRows * cellHeightPx)); - padding.set(availablePaddingX / 2, paddingTop + availablePaddingY / 2, + padding.set(availablePaddingX / 2, topWorkspacePadding + availablePaddingY / 2, availablePaddingX / 2, paddingBottom + availablePaddingY / 2); } else { // Pad the top and bottom of the workspace with search/hotseat bar sizes padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, - paddingTop, + topWorkspacePadding, desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.right, paddingBottom); } @@ -384,7 +334,7 @@ public class DeviceProfile { return padding; } - private int getWorkspacePageSpacing(boolean isLayoutRtl) { + private int getWorkspacePageSpacing() { if (isVerticalBarLayout() || isLargeTablet) { // In landscape mode the page spacing is set to the default. return defaultPageSpacingPx; @@ -392,7 +342,7 @@ public class DeviceProfile { // In portrait, we want the pages spaced such that there is no // overhang of the previous / next page into the current page viewport. // We assume symmetrical padding in portrait mode. - return Math.max(defaultPageSpacingPx, 2 * getWorkspacePadding(isLayoutRtl).left); + return Math.max(defaultPageSpacingPx, 2 * getWorkspacePadding().left); } } @@ -444,50 +394,28 @@ public class DeviceProfile { return visibleChildren; } - // TODO(twickham): b/25154513 - public void setSearchBarHeight(int searchBarHeight) { - if (searchBarHeight == LauncherCallbacks.SEARCH_BAR_HEIGHT_TALL) { - hotseatBarHeightPx = shortHotseatBarHeightPx; - searchBarSpaceHeightPx = tallSearchBarSpaceHeightPx; - searchBarBottomPaddingPx = tallSearchBarBottomPaddingPx; - searchBarTopExtraPaddingPx = isPhone ? tallSearchBarNegativeTopPaddingPx - : normalSearchBarTopExtraPaddingPx; - } else { - hotseatBarHeightPx = normalHotseatBarHeightPx; - searchBarSpaceHeightPx = normalSearchBarSpaceHeightPx; - searchBarBottomPaddingPx = normalSearchBarBottomPaddingPx; - searchBarTopExtraPaddingPx = normalSearchBarTopExtraPaddingPx; - } - } - public void layout(Launcher launcher) { FrameLayout.LayoutParams lp; boolean hasVerticalBarLayout = isVerticalBarLayout(); final boolean isLayoutRtl = Utilities.isRtl(launcher.getResources()); // Layout the search bar space - Rect searchBarBounds = getSearchBarBounds(isLayoutRtl); - View searchBar = launcher.getSearchDropTargetBar(); + Point searchBarBounds = getSearchBarDimensForWidgetOpts(); + View searchBar = launcher.getDropTargetBar(); lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); - lp.width = searchBarBounds.width(); - lp.height = searchBarBounds.height(); - lp.topMargin = searchBarTopExtraPaddingPx; + lp.width = searchBarBounds.x; + lp.height = searchBarBounds.y; + lp.topMargin = edgeMarginPx; searchBar.setLayoutParams(lp); - // Layout the app info bar space - View appInfoBar = launcher.getAppInfoDropTargetBar(); - lp = (FrameLayout.LayoutParams) appInfoBar.getLayoutParams(); - lp.bottomMargin = hotseatBarHeightPx; - appInfoBar.setLayoutParams(lp); - // Layout the workspace PagedView workspace = (PagedView) launcher.findViewById(R.id.workspace); lp = (FrameLayout.LayoutParams) workspace.getLayoutParams(); lp.gravity = Gravity.CENTER; - Rect padding = getWorkspacePadding(isLayoutRtl); + Rect padding = getWorkspacePadding(); workspace.setLayoutParams(lp); workspace.setPadding(padding.left, padding.top, padding.right, padding.bottom); - workspace.setPageSpacing(getWorkspacePageSpacing(isLayoutRtl)); + workspace.setPageSpacing(getWorkspacePageSpacing()); // Layout the hotseat View hotseat = launcher.findViewById(R.id.hotseat); @@ -503,7 +431,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 = normalHotseatBarHeightPx; + lp.width = hotseatBarHeightPx; 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/DropTargetBar.java b/src/com/android/launcher3/DropTargetBar.java new file mode 100644 index 000000000..5966af51c --- /dev/null +++ b/src/com/android/launcher3/DropTargetBar.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.animation.TimeInterpolator; +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewDebug; +import android.view.ViewPropertyAnimator; +import android.view.accessibility.AccessibilityManager; +import android.view.animation.AccelerateInterpolator; +import android.widget.LinearLayout; + +import com.android.launcher3.dragndrop.DragController; + +/* + * The top bar containing various drop targets: Delete/App Info/Uninstall. + */ +public class DropTargetBar extends LinearLayout implements DragController.DragListener { + + protected static final int DEFAULT_DRAG_FADE_DURATION = 175; + protected static final TimeInterpolator DEFAULT_INTERPOLATOR = new AccelerateInterpolator(); + + private final Runnable mFadeAnimationEndRunnable = new Runnable() { + + @Override + public void run() { + AccessibilityManager am = (AccessibilityManager) + getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); + boolean accessibilityEnabled = am.isEnabled(); + AlphaUpdateListener.updateVisibility(DropTargetBar.this, accessibilityEnabled); + } + }; + + @ViewDebug.ExportedProperty(category = "launcher") + protected boolean mDeferOnDragEnd; + + @ViewDebug.ExportedProperty(category = "launcher") + protected boolean mVisible = false; + + private ViewPropertyAnimator mCurrentAnimation; + + // Drop targets + private ButtonDropTarget mDeleteDropTarget; + private ButtonDropTarget mAppInfoDropTarget; + private ButtonDropTarget mUninstallDropTarget; + + public DropTargetBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public DropTargetBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + // Get the individual components + mDeleteDropTarget = (ButtonDropTarget) findViewById(R.id.delete_target_text); + mAppInfoDropTarget = (ButtonDropTarget) findViewById(R.id.info_target_text); + mUninstallDropTarget = (ButtonDropTarget) findViewById(R.id.uninstall_target_text); + + mDeleteDropTarget.setDropTargetBar(this); + mAppInfoDropTarget.setDropTargetBar(this); + mUninstallDropTarget.setDropTargetBar(this); + + // Initialize with hidden state + setAlpha(0f); + } + + public void setup(DragController dragController) { + dragController.addDragListener(this); + dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); + + dragController.addDragListener(mDeleteDropTarget); + dragController.addDragListener(mAppInfoDropTarget); + dragController.addDragListener(mUninstallDropTarget); + + dragController.addDropTarget(mDeleteDropTarget); + dragController.addDropTarget(mAppInfoDropTarget); + dragController.addDropTarget(mUninstallDropTarget); + } + + private void animateToVisibility(boolean isVisible) { + if (mVisible != isVisible) { + mVisible = isVisible; + + // Cancel any existing animation + if (mCurrentAnimation != null) { + mCurrentAnimation.cancel(); + mCurrentAnimation = null; + } + + float finalAlpha = mVisible ? 1 : 0; + if (Float.compare(getAlpha(), finalAlpha) != 0) { + setVisibility(View.VISIBLE); + mCurrentAnimation = animate().alpha(finalAlpha) + .setInterpolator(DEFAULT_INTERPOLATOR) + .setDuration(DEFAULT_DRAG_FADE_DURATION) + .withEndAction(mFadeAnimationEndRunnable); + } + + } + } + + public void enableAccessibleDrag(boolean enable) { + mDeleteDropTarget.enableAccessibleDrag(enable); + mAppInfoDropTarget.enableAccessibleDrag(enable); + mUninstallDropTarget.enableAccessibleDrag(enable); + } + + /* + * DragController.DragListener implementation + */ + @Override + public void onDragStart(DragSource source, ItemInfo info, int dragAction) { + animateToVisibility(true); + } + + /** + * This is called to defer hiding the delete drop target until the drop animation has completed, + * instead of hiding immediately when the drag has ended. + */ + protected void deferOnDragEnd() { + mDeferOnDragEnd = true; + } + + @Override + public void onDragEnd() { + if (!mDeferOnDragEnd) { + animateToVisibility(false); + } else { + mDeferOnDragEnd = false; + } + } +} diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index f99c08a59..0b9e4ac07 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -356,7 +356,7 @@ public class FocusHelper { CellLayout iconLayout = (CellLayout) parent.getParent(); final Workspace workspace = (Workspace) iconLayout.getParent(); final ViewGroup dragLayer = (ViewGroup) workspace.getParent(); - final ViewGroup tabs = (ViewGroup) dragLayer.findViewById(R.id.search_drop_target_bar); + final ViewGroup tabs = (ViewGroup) dragLayer.findViewById(R.id.drop_target_bar); final Hotseat hotseat = (Hotseat) dragLayer.findViewById(R.id.hotseat); final ItemInfo itemInfo = (ItemInfo) v.getTag(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 13690b43a..e1d292cbb 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -252,8 +252,7 @@ public class Launcher extends Activity private View mAllAppsButton; private View mWidgetsButton; - private SearchDropTargetBar mSearchDropTargetBar; - private AppInfoDropTargetBar mAppInfoDropTargetBar; + private DropTargetBar mDropTargetBar; // Main container view for the all apps screen. @Thunk AllAppsContainerView mAppsView; @@ -435,8 +434,6 @@ public class Launcher extends Activity setContentView(R.layout.launcher); - app.getInvariantDeviceProfile().landscapeProfile.setSearchBarHeight(getSearchBarHeight()); - app.getInvariantDeviceProfile().portraitProfile.setSearchBarHeight(getSearchBarHeight()); setupViews(); mDeviceProfile.layout(this); mExtractedColors = new ExtractedColors(); @@ -1374,11 +1371,7 @@ public class Launcher extends Activity mDragController.addDragListener(mWorkspace); // Get the search/delete/uninstall bar - mSearchDropTargetBar = (SearchDropTargetBar) - mDragLayer.findViewById(R.id.search_drop_target_bar); - // Get the app info bar - mAppInfoDropTargetBar = (AppInfoDropTargetBar) - mDragLayer.findViewById(R.id.app_info_drop_target_bar); + mDropTargetBar = (DropTargetBar) mDragLayer.findViewById(R.id.drop_target_bar); // Setup Apps and Widgets mAppsView = (AllAppsContainerView) findViewById(R.id.apps_view); @@ -1394,12 +1387,7 @@ public class Launcher extends Activity mDragController.setScrollView(mDragLayer); mDragController.setMoveTarget(mWorkspace); mDragController.addDropTarget(mWorkspace); - if (mSearchDropTargetBar != null) { - mSearchDropTargetBar.setup(this, mDragController); - } - if (mAppInfoDropTargetBar != null) { - mAppInfoDropTargetBar.setup(this, mDragController); - } + mDropTargetBar.setup(mDragController); if (TestingUtils.MEMORY_DUMP_ENABLED) { TestingUtils.addWeightWatcher(this); @@ -1808,12 +1796,8 @@ public class Launcher extends Activity return mOverviewPanel; } - public SearchDropTargetBar getSearchDropTargetBar() { - return mSearchDropTargetBar; - } - - public AppInfoDropTargetBar getAppInfoDropTargetBar() { - return mAppInfoDropTargetBar; + public DropTargetBar getDropTargetBar() { + return mDropTargetBar; } public LauncherAppWidgetHost getAppWidgetHost() { @@ -4039,11 +4023,6 @@ public class Launcher extends Activity return mDeviceProfile.isVerticalBarLayout(); } - /** Returns the search bar bounds in pixels. */ - protected Rect getSearchBarBounds() { - return mDeviceProfile.getSearchBarBounds(Utilities.isRtl(getResources())); - } - public int getSearchBarHeight() { if (mLauncherCallbacks != null) { return mLauncherCallbacks.getSearchBarHeight(); diff --git a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java index 28d805269..f245cd3e7 100644 --- a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java @@ -63,9 +63,8 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { LauncherAppState app = LauncherAppState.getInstance(); InvariantDeviceProfile idp = app.getInvariantDeviceProfile(); - // We only care out the cell size, which is independent of the the layout direction. - Rect paddingLand = idp.landscapeProfile.getWorkspacePadding(false /* isLayoutRtl */); - Rect paddingPort = idp.portraitProfile.getWorkspacePadding(false /* isLayoutRtl */); + Rect paddingLand = idp.landscapeProfile.getWorkspacePadding(); + Rect paddingPort = idp.portraitProfile.getWorkspacePadding(); // Always assume we're working with the smallest span to make sure we // reserve enough space in both orientations. diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index 41e30b129..b40917408 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -460,12 +460,6 @@ public class LauncherStateTransitionAnimation { Animator workspaceAnim = mLauncher.startWorkspaceStateChangeAnimation(toWorkspaceState, animated, layerViews); - // Animate the search bar - final SearchDropTargetBar.State toSearchBarState = - toWorkspaceState.searchDropTargetBarState; - mLauncher.getSearchDropTargetBar().animateToState(toSearchBarState, - animated ? revealDuration : 0, animation); - if (animated && initialized) { // Play the workspace animation if (workspaceAnim != null) { diff --git a/src/com/android/launcher3/SearchDropTargetBar.java b/src/com/android/launcher3/SearchDropTargetBar.java deleted file mode 100644 index e43e96c76..000000000 --- a/src/com/android/launcher3/SearchDropTargetBar.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.animation.TimeInterpolator; -import android.content.Context; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewDebug; -import android.view.animation.DecelerateInterpolator; - -import com.android.launcher3.dragndrop.DragController; -import com.android.launcher3.util.Thunk; - -/* - * This bar will manage the transition between the QSB search bar and the delete/uninstall drop - * targets so that each of the individual ButtonDropTargets don't have to. - */ -public class SearchDropTargetBar extends BaseDropTargetBar { - - /** The different states that the search bar space can be in. */ - public enum State { - INVISIBLE (0f), - DROP_TARGET (1f); - - private final float mDropTargetBarAlpha; - - State(float dtbAlpha) { - mDropTargetBarAlpha = dtbAlpha; - } - } - - - @ViewDebug.ExportedProperty(category = "launcher") - private State mState = State.INVISIBLE; - - // Drop targets - private ButtonDropTarget mDeleteDropTarget; - private ButtonDropTarget mUninstallDropTarget; - - public SearchDropTargetBar(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SearchDropTargetBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - // Get the individual components - mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text); - mUninstallDropTarget = (ButtonDropTarget) mDropTargetBar - .findViewById(R.id.uninstall_target_text); - - mDeleteDropTarget.setDropTargetBar(this); - mUninstallDropTarget.setDropTargetBar(this); - } - - @Override - public void setup(Launcher launcher, DragController dragController) { - dragController.addDragListener(this); - dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); - - dragController.addDragListener(mDeleteDropTarget); - dragController.addDragListener(mUninstallDropTarget); - - dragController.addDropTarget(mDeleteDropTarget); - dragController.addDropTarget(mUninstallDropTarget); - - mDeleteDropTarget.setLauncher(launcher); - mUninstallDropTarget.setLauncher(launcher); - } - - @Override - public void showDropTargets() { - animateToState(State.DROP_TARGET, DEFAULT_DRAG_FADE_DURATION); - } - - @Override - public void hideDropTargets() { - animateToState(State.INVISIBLE, DEFAULT_DRAG_FADE_DURATION); - } - - /** - * Animates the current search bar state to a new state. If the {@param duration} is 0, then - * the state is applied immediately. - */ - public void animateToState(State newState, int duration) { - animateToState(newState, duration, null); - } - - public void animateToState(State newState, int duration, AnimatorSet animation) { - if (mState != newState) { - mState = newState; - - resetAnimation(duration); - if (duration > 0) { - animateAlpha(mDropTargetBar, mState.mDropTargetBarAlpha, DEFAULT_INTERPOLATOR); - } else { - mDropTargetBar.setAlpha(mState.mDropTargetBarAlpha); - AlphaUpdateListener.updateVisibility(mDropTargetBar, mAccessibilityEnabled); - } - - // Start the final animation - if (duration > 0) { - if (animation != null) { - animation.play(mCurrentAnimation); - } else { - mCurrentAnimation.start(); - } - } - } - } - - @Override - public void enableAccessibleDrag(boolean enable) { - mDeleteDropTarget.enableAccessibleDrag(enable); - mUninstallDropTarget.enableAccessibleDrag(enable); - } -} diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index da262cac6..dd487fd93 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -176,26 +176,22 @@ public class Workspace extends PagedView private Matrix mTempMatrix = new Matrix(); private SpringLoadedDragController mSpringLoadedDragController; - private float mSpringLoadedShrinkFactor; private float mOverviewModeShrinkFactor; // State variable that indicates whether the pages are small (ie when you're // in all apps or customize mode) enum State { - NORMAL (SearchDropTargetBar.State.INVISIBLE, false, false), - NORMAL_HIDDEN (SearchDropTargetBar.State.INVISIBLE, false, false), - SPRING_LOADED (SearchDropTargetBar.State.DROP_TARGET, false, true), - OVERVIEW (SearchDropTargetBar.State.INVISIBLE, true, true), - OVERVIEW_HIDDEN (SearchDropTargetBar.State.INVISIBLE, true, false); + NORMAL (false, false), + NORMAL_HIDDEN (false, false), + SPRING_LOADED (false, true), + OVERVIEW (true, true), + OVERVIEW_HIDDEN (true, false); - public final SearchDropTargetBar.State searchDropTargetBarState; public final boolean shouldUpdateWidget; public final boolean hasMultipleVisiblePages; - State(SearchDropTargetBar.State searchBarState, boolean shouldUpdateWidget, - boolean hasMultipleVisiblePages) { - searchDropTargetBarState = searchBarState; + State(boolean shouldUpdateWidget, boolean hasMultipleVisiblePages) { this.shouldUpdateWidget = shouldUpdateWidget; this.hasMultipleVisiblePages = hasMultipleVisiblePages; } @@ -316,9 +312,6 @@ public class Workspace extends PagedView mWallpaperManager = WallpaperManager.getInstance(context); mWallpaperOffset = new WallpaperOffsetInterpolator(this); - - mSpringLoadedShrinkFactor = - res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f; mOverviewModeShrinkFactor = res.getInteger(R.integer.config_workspaceOverviewShrinkPercentage) / 100f; @@ -347,6 +340,7 @@ public class Workspace extends PagedView // estimate the size of a widget with spans hSpan, vSpan. return MAX_VALUE for each // dimension if unsuccessful public int[] estimateItemSize(ItemInfo itemInfo, boolean springLoaded) { + float shrinkFactor = mLauncher.getDeviceProfile().workspaceSpringLoadShrinkFactor; int[] size = new int[2]; if (getChildCount() > 0) { // Use the first non-custom page to estimate the child position @@ -355,8 +349,8 @@ public class Workspace extends PagedView size[0] = r.width(); size[1] = r.height(); if (springLoaded) { - size[0] *= mSpringLoadedShrinkFactor; - size[1] *= mSpringLoadedShrinkFactor; + size[0] *= shrinkFactor; + size[1] *= shrinkFactor; } return size; } else { @@ -1380,7 +1374,6 @@ public class Workspace extends PagedView // TODO(adamcohen): figure out a final effect here. We may need to recommend // different effects based on device performance. On at least one relatively high-end // device I've tried, translating the launcher causes things to get quite laggy. - setTranslationAndAlpha(mLauncher.getSearchDropTargetBar(), transX, alpha); setTranslationAndAlpha(getPageIndicator(), transX, alpha); setTranslationAndAlpha(getChildAt(getCurrentPage()), transX, alpha); setTranslationAndAlpha(mLauncher.getHotseat(), transX, alpha); @@ -1536,8 +1529,7 @@ public class Workspace extends PagedView // Reset our click listener setOnClickListener(mLauncher); } - mLauncher.getSearchDropTargetBar().enableAccessibleDrag(enable); - mLauncher.getAppInfoDropTargetBar().enableAccessibleDrag(enable); + mLauncher.getDropTargetBar().enableAccessibleDrag(enable); mLauncher.getHotseat().getLayout() .enableAccessibleDrag(enable, CellLayout.WORKSPACE_ACCESSIBILITY_DRAG); } @@ -1938,7 +1930,7 @@ public class Workspace extends PagedView int getOverviewModeTranslationY() { DeviceProfile grid = mLauncher.getDeviceProfile(); - Rect workspacePadding = grid.getWorkspacePadding(Utilities.isRtl(getResources())); + Rect workspacePadding = grid.getWorkspacePadding(); int overviewButtonBarHeight = grid.getOverviewModeButtonBarHeight(); int scaledHeight = (int) (mOverviewModeShrinkFactor * getNormalChildHeight()); @@ -1951,15 +1943,26 @@ public class Workspace extends PagedView return -workspaceOffsetTopEdge + overviewOffsetTopEdge; } - int getSpringLoadedTranslationY() { + float getSpringLoadedTranslationY() { DeviceProfile grid = mLauncher.getDeviceProfile(); - Rect workspacePadding = grid.getWorkspacePadding(Utilities.isRtl(getResources())); - int scaledHeight = (int) (mSpringLoadedShrinkFactor * getNormalChildHeight()); - int workspaceTop = mInsets.top + workspacePadding.top; - int workspaceBottom = getViewportHeight() - mInsets.bottom - workspacePadding.bottom; - int workspaceHeight = workspaceBottom - workspaceTop; - // Center the spring-loaded pages by translating it up by half of the reduced height. - return -(workspaceHeight - scaledHeight) / 2; + if (grid.isVerticalBarLayout() || getChildCount() == 0) { + return 0; + } + Rect workspacePadding = grid.getWorkspacePadding(); + + float scaledHeight = grid.workspaceSpringLoadShrinkFactor * getNormalChildHeight(); + float shrunkTop = mInsets.top + grid.dropTargetBarSizePx; + float shrunkBottom = getViewportHeight() - mInsets.bottom + - workspacePadding.bottom - grid.workspaceSpringLoadedBottomSpace; + float totalShrunkSpace = shrunkBottom - shrunkTop; + + float desiredCellTop = shrunkTop + (totalShrunkSpace - scaledHeight) / 2; + + float halfHeight = getHeight() / 2; + float myCenter = getTop() + halfHeight; + float cellTopFromCenter = halfHeight - getChildAt(0).getTop(); + float actualCellTop = myCenter - cellTopFromCenter * grid.workspaceSpringLoadShrinkFactor; + return (desiredCellTop - actualCellTop) / grid.workspaceSpringLoadShrinkFactor; } float getOverviewModeShrinkFactor() { diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index e26864087..0f437c1f9 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -211,8 +211,7 @@ public class WorkspaceStateTransitionAnimation { mOverviewTransitionTime = res.getInteger(R.integer.config_overviewTransitionTime); mOverlayTransitionTime = res.getInteger(R.integer.config_overlayTransitionTime); mSpringLoadedTransitionTime = mOverlayTransitionTime / 2; - mSpringLoadedShrinkFactor = - res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100f; + mSpringLoadedShrinkFactor = mLauncher.getDeviceProfile().workspaceSpringLoadShrinkFactor; mOverviewModeShrinkFactor = res.getInteger(R.integer.config_workspaceOverviewShrinkPercentage) / 100f; mWorkspaceScrimAlpha = res.getInteger(R.integer.config_workspaceScrimAlpha) / 100f; diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index e4c84360c..94cce4449 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -29,7 +29,6 @@ import android.graphics.Rect; import android.graphics.Region; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.util.Log; import android.view.DragEvent; import android.view.KeyEvent; import android.view.MotionEvent; @@ -52,7 +51,7 @@ import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetHostView; import com.android.launcher3.PinchToOverviewListener; import com.android.launcher3.R; -import com.android.launcher3.SearchDropTargetBar; +import com.android.launcher3.DropTargetBar; import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; @@ -184,31 +183,17 @@ public class DragLayer extends InsettableFrameLayout { private boolean isEventOverFolderTextRegion(Folder folder, MotionEvent ev) { getDescendantRectRelativeToSelf(folder.getEditTextRegion(), mHitRect); - if (mHitRect.contains((int) ev.getX(), (int) ev.getY())) { - return true; - } - return false; + return mHitRect.contains((int) ev.getX(), (int) ev.getY()); } private boolean isEventOverFolder(Folder folder, MotionEvent ev) { getDescendantRectRelativeToSelf(folder, mHitRect); - if (mHitRect.contains((int) ev.getX(), (int) ev.getY())) { - return true; - } - return false; + return mHitRect.contains((int) ev.getX(), (int) ev.getY()); } private boolean isEventOverDropTargetBar(MotionEvent ev) { - getDescendantRectRelativeToSelf(mLauncher.getSearchDropTargetBar(), mHitRect); - if (mHitRect.contains((int) ev.getX(), (int) ev.getY())) { - return true; - } - - getDescendantRectRelativeToSelf(mLauncher.getAppInfoDropTargetBar(), mHitRect); - if (mHitRect.contains((int) ev.getX(), (int) ev.getY())) { - return true; - } - return false; + getDescendantRectRelativeToSelf(mLauncher.getDropTargetBar(), mHitRect); + return mHitRect.contains((int) ev.getX(), (int) ev.getY()); } private boolean handleTouchDown(MotionEvent ev, boolean intercept) { @@ -356,7 +341,7 @@ public class DragLayer extends InsettableFrameLayout { return super.onRequestSendAccessibilityEvent(child, event); } - if (isInAccessibleDrag() && child instanceof SearchDropTargetBar) { + if (isInAccessibleDrag() && child instanceof DropTargetBar) { return super.onRequestSendAccessibilityEvent(child, event); } // Skip propagating onRequestSendAccessibilityEvent all for other children @@ -374,8 +359,7 @@ public class DragLayer extends InsettableFrameLayout { childrenForAccessibility.add(currentFolder); if (isInAccessibleDrag()) { - childrenForAccessibility.add(mLauncher.getSearchDropTargetBar()); - childrenForAccessibility.add(mLauncher.getAppInfoDropTargetBar()); + childrenForAccessibility.add(mLauncher.getDropTargetBar()); } } else { super.addChildrenForAccessibility(childrenForAccessibility); diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 6df296e7d..af9370773 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -318,7 +318,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList @Override public void enableAccessibleDrag(boolean enable) { - mLauncher.getSearchDropTargetBar().enableAccessibleDrag(enable); + mLauncher.getDropTargetBar().enableAccessibleDrag(enable); for (int i = 0; i < mContent.getChildCount(); i++) { mContent.getPageAt(i).enableAccessibleDrag(enable, CellLayout.FOLDER_ACCESSIBILITY_DRAG); } @@ -1054,7 +1054,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList int top = Math.min(Math.max(sTempRect.top, centeredTop), sTempRect.top + sTempRect.height() - height); - int distFromEdgeOfScreen = grid.getWorkspacePadding(isLayoutRtl()).left + getPaddingLeft(); + int distFromEdgeOfScreen = grid.getWorkspacePadding().left + getPaddingLeft(); if (grid.isPhone && (grid.availableWidthPx - width) < 4 * distFromEdgeOfScreen) { // Center the folder if it is very close to being centered anyway, by virtue of @@ -1093,7 +1093,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList private int getContentAreaHeight() { DeviceProfile grid = mLauncher.getDeviceProfile(); - Rect workspacePadding = grid.getWorkspacePadding(mContent.mIsRtl); + Rect workspacePadding = grid.getWorkspacePadding(); int maxContentAreaHeight = grid.availableHeightPx - workspacePadding.top - workspacePadding.bottom - mFooterHeight; -- cgit v1.2.3