Merge changes I09bce218,Id5716a34 into ub-launcher3-calgary
* changes: Matching hotseat to spec. Fixing issue with shadow drawing over search bar.
This commit is contained in:
@@ -28,7 +28,7 @@
|
||||
<dimen name="dynamic_grid_overview_bar_item_width">80dp</dimen>
|
||||
<dimen name="dynamic_grid_overview_bar_spacer_width">25dp</dimen>
|
||||
<dimen name="dynamic_grid_hotseat_height">88dp</dimen>
|
||||
<dimen name="dynamic_grid_hotseat_top_padding">12dp</dimen>
|
||||
<dimen name="dynamic_grid_hotseat_top_padding">8dp</dimen>
|
||||
<dimen name="dynamic_grid_hotseat_gutter_width">24dp</dimen>
|
||||
<dimen name="dynamic_grid_workspace_top_padding">12dp</dimen>
|
||||
<dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen>
|
||||
|
||||
@@ -406,7 +406,8 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler {
|
||||
mTouchFeedbackView.animate().cancel();
|
||||
} else {
|
||||
if (mTouchFeedbackView.setBitmap(background)) {
|
||||
mTouchFeedbackView.alignWithIconView(icon, mShortcutsAndWidgets);
|
||||
mTouchFeedbackView.alignWithIconView(icon, mShortcutsAndWidgets,
|
||||
null /* clipAgainstView */);
|
||||
mTouchFeedbackView.animateShadow();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.view.View;
|
||||
import android.view.ViewDebug;
|
||||
import android.view.ViewGroup;
|
||||
@@ -91,13 +92,27 @@ public class ClickShadowView extends View {
|
||||
* Aligns the shadow with {@param view}
|
||||
* @param viewParent immediate parent of {@param view}. It must be a sibling of this view.
|
||||
*/
|
||||
public void alignWithIconView(BubbleTextView view, ViewGroup viewParent) {
|
||||
public void alignWithIconView(BubbleTextView view, ViewGroup viewParent, View clipAgainstView) {
|
||||
float leftShift = view.getLeft() + viewParent.getLeft() - getLeft();
|
||||
float topShift = view.getTop() + viewParent.getTop() - getTop();
|
||||
int iconWidth = view.getRight() - view.getLeft();
|
||||
int iconHeight = view.getBottom() - view.getTop();
|
||||
int iconHSpace = iconWidth - view.getCompoundPaddingRight() - view.getCompoundPaddingLeft();
|
||||
float drawableWidth = view.getIcon().getBounds().width();
|
||||
|
||||
if (clipAgainstView != null) {
|
||||
// Set the bounds to clip against
|
||||
int[] coords = new int[] {0, 0};
|
||||
Utilities.getDescendantCoordRelativeToAncestor(clipAgainstView, (View) getParent(),
|
||||
coords, false);
|
||||
int clipLeft = (int) Math.max(0, coords[0] - leftShift - mShadowPadding);
|
||||
int clipTop = (int) Math.max(0, coords[1] - topShift - mShadowPadding) ;
|
||||
setClipBounds(new Rect(clipLeft, clipTop, clipLeft + iconWidth, clipTop + iconHeight));
|
||||
} else {
|
||||
// Reset the clip bounds
|
||||
setClipBounds(null);
|
||||
}
|
||||
|
||||
setTranslationX(leftShift
|
||||
+ viewParent.getTranslationX()
|
||||
+ view.getCompoundPaddingLeft() * view.getScaleX()
|
||||
|
||||
@@ -460,7 +460,7 @@ public class DeviceProfile {
|
||||
qsbContainer.setLayoutParams(lp);
|
||||
|
||||
// Layout the hotseat
|
||||
View hotseat = launcher.findViewById(R.id.hotseat);
|
||||
Hotseat hotseat = (Hotseat) launcher.findViewById(R.id.hotseat);
|
||||
lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams();
|
||||
// We want the edges of the hotseat to line up with the edges of the workspace, but the
|
||||
// icons in the hotseat are a different size, and so don't line up perfectly. To account for
|
||||
@@ -475,27 +475,25 @@ public class DeviceProfile {
|
||||
lp.gravity = Gravity.RIGHT;
|
||||
lp.width = hotseatBarHeightPx + mInsets.left + mInsets.right;
|
||||
lp.height = LayoutParams.MATCH_PARENT;
|
||||
hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx);
|
||||
hotseat.setPadding(mInsets.left, 0, mInsets.right, 0);
|
||||
hotseat.getLayout().setPadding(mInsets.left, mInsets.top, mInsets.right,
|
||||
workspacePadding.bottom);
|
||||
} else if (isTablet) {
|
||||
// Pad the hotseat with the workspace padding calculated above
|
||||
lp.gravity = Gravity.BOTTOM;
|
||||
lp.width = LayoutParams.MATCH_PARENT;
|
||||
lp.height = hotseatBarHeightPx + mInsets.bottom;
|
||||
hotseat.findViewById(R.id.layout).setPadding(
|
||||
hotseatAdjustment + workspacePadding.left, 0,
|
||||
hotseatAdjustment + workspacePadding.right, 2 * edgeMarginPx);
|
||||
hotseat.setPadding(0, hotseatBarTopPaddingPx, 0, mInsets.bottom);
|
||||
hotseat.getLayout().setPadding(hotseatAdjustment + workspacePadding.left,
|
||||
hotseatBarTopPaddingPx, hotseatAdjustment + workspacePadding.right,
|
||||
mInsets.bottom);
|
||||
} else {
|
||||
// For phones, layout the hotseat without any bottom margin
|
||||
// to ensure that we have space for the folders
|
||||
lp.gravity = Gravity.BOTTOM;
|
||||
lp.width = LayoutParams.MATCH_PARENT;
|
||||
lp.height = hotseatBarHeightPx + mInsets.bottom;
|
||||
hotseat.findViewById(R.id.layout).setPadding(
|
||||
hotseatAdjustment + workspacePadding.left, 0,
|
||||
hotseatAdjustment + workspacePadding.right, 0);
|
||||
hotseat.setPadding(0, hotseatBarTopPaddingPx, 0, mInsets.bottom);
|
||||
hotseat.getLayout().setPadding(hotseatAdjustment + workspacePadding.left,
|
||||
hotseatBarTopPaddingPx, hotseatAdjustment + workspacePadding.right,
|
||||
mInsets.bottom);
|
||||
}
|
||||
hotseat.setLayoutParams(lp);
|
||||
|
||||
|
||||
@@ -113,8 +113,8 @@ public final class Utilities {
|
||||
&& "NMR1".compareTo(VERSION.CODENAME) <= 0;
|
||||
}
|
||||
|
||||
// TODO: use Build.VERSION_CODES when available
|
||||
public static final boolean ATLEAST_MARSHMALLOW = Build.VERSION.SDK_INT >= 23;
|
||||
public static final boolean ATLEAST_MARSHMALLOW =
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
|
||||
|
||||
public static final boolean ATLEAST_LOLLIPOP_MR1 =
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1;
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.launcher3.allapps;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
@@ -26,6 +27,7 @@ import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler;
|
||||
import com.android.launcher3.ClickShadowView;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.R;
|
||||
|
||||
/**
|
||||
* A container for RecyclerView to allow for the click shadow view to be shown behind an icon that
|
||||
@@ -63,7 +65,8 @@ public class AllAppsRecyclerViewContainerView extends FrameLayout
|
||||
mTouchFeedbackView.setBitmap(null);
|
||||
mTouchFeedbackView.animate().cancel();
|
||||
} else if (mTouchFeedbackView.setBitmap(background)) {
|
||||
mTouchFeedbackView.alignWithIconView(icon, (ViewGroup) icon.getParent());
|
||||
View rv = findViewById(R.id.apps_list_view);
|
||||
mTouchFeedbackView.alignWithIconView(icon, (ViewGroup) icon.getParent(), rv);
|
||||
mTouchFeedbackView.animateShadow();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user