summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-11-01 13:42:23 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-11-01 14:49:38 -0700
commit8b16b96b38c186c201f71e63fcba98ab57820526 (patch)
tree1dce91ba9c00f406af357c1b51d06e2eb494d24e /src/com/android/launcher3
parentcc42c5bd1073f4b4f45ea29a1b01563601729022 (diff)
downloadandroid_packages_apps_Trebuchet-8b16b96b38c186c201f71e63fcba98ab57820526.tar.gz
android_packages_apps_Trebuchet-8b16b96b38c186c201f71e63fcba98ab57820526.tar.bz2
android_packages_apps_Trebuchet-8b16b96b38c186c201f71e63fcba98ab57820526.zip
Fixing same drawable instance being used with 2 views
Drawable contain a reference to the view which is used to invalidate the view. If the same drawable is used with two views, only once view will get invalidated. Bug: 32575647 Change-Id: Ia22310a6bda55ce0a591712761ec8ab1cdbaccdf
Diffstat (limited to 'src/com/android/launcher3')
-rw-r--r--src/com/android/launcher3/BaseContainerView.java87
-rw-r--r--src/com/android/launcher3/allapps/AllAppsContainerView.java21
2 files changed, 65 insertions, 43 deletions
diff --git a/src/com/android/launcher3/BaseContainerView.java b/src/com/android/launcher3/BaseContainerView.java
index b7321d94f..eb358ec38 100644
--- a/src/com/android/launcher3/BaseContainerView.java
+++ b/src/com/android/launcher3/BaseContainerView.java
@@ -19,7 +19,6 @@ package com.android.launcher3;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
-import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
@@ -41,13 +40,9 @@ import com.android.launcher3.util.TransformingTouchDelegate;
public abstract class BaseContainerView extends FrameLayout
implements DeviceProfile.LauncherLayoutChangeListener {
- protected int mContainerPaddingLeft;
- protected int mContainerPaddingRight;
- protected int mContainerPaddingTop;
- protected int mContainerPaddingBottom;
+ private static final Rect sBgPaddingRect = new Rect();
protected final Drawable mBaseDrawable;
- private final Rect mBgPaddingRect = new Rect();
private View mRevealView;
private View mContent;
@@ -110,26 +105,59 @@ public abstract class BaseContainerView extends FrameLayout
}
@Override
+ public void onLauncherLayoutChanged() {
+ updatePaddings();
+ }
+
+ /**
+ * Calculate the background padding as it can change due to insets/content padding change.
+ */
+ private void updatePaddings() {
+ Context context = getContext();
+ int paddingLeft;
+ int paddingRight;
+ int paddingTop;
+ int paddingBottom;
+
+ DeviceProfile grid = Launcher.getLauncher(context).getDeviceProfile();
+ int[] padding = grid.getContainerPadding(context);
+ paddingLeft = padding[0] + grid.edgeMarginPx;
+ paddingRight = padding[1] + grid.edgeMarginPx;
+ if (!grid.isVerticalBarLayout()) {
+ paddingTop = paddingBottom = grid.edgeMarginPx;
+ } else {
+ paddingTop = paddingBottom = 0;
+ }
+ updateBackground(paddingLeft, paddingTop, paddingRight, paddingBottom);
+ }
+
+ /**
+ * Update the background for the reveal view and content view based on the background padding.
+ */
+ protected void updateBackground(int paddingLeft, int paddingTop,
+ int paddingRight, int paddingBottom) {
+ mRevealView.setBackground(new InsetDrawable(mBaseDrawable,
+ paddingLeft, paddingTop, paddingRight, paddingBottom));
+ mContent.setBackground(new InsetDrawable(mBaseDrawable,
+ paddingLeft, paddingTop, paddingRight, paddingBottom));
+ }
+
+ @Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- getRevealView().getBackground().getPadding(mBgPaddingRect);
View touchDelegateTargetView = getTouchDelegateTargetView();
if (touchDelegateTargetView != null) {
+ getRevealView().getBackground().getPadding(sBgPaddingRect);
mTouchDelegate.setBounds(
- touchDelegateTargetView.getLeft() - mBgPaddingRect.left,
- touchDelegateTargetView.getTop() - mBgPaddingRect.top,
- touchDelegateTargetView.getRight() + mBgPaddingRect.right,
- touchDelegateTargetView.getBottom() + mBgPaddingRect.bottom);
+ touchDelegateTargetView.getLeft() - sBgPaddingRect.left,
+ touchDelegateTargetView.getTop() - sBgPaddingRect.top,
+ touchDelegateTargetView.getRight() + sBgPaddingRect.right,
+ touchDelegateTargetView.getBottom() + sBgPaddingRect.bottom);
}
}
@Override
- public void onLauncherLayoutChanged() {
- updatePaddings();
- }
-
- @Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return handleTouchEvent(ev);
}
@@ -152,33 +180,6 @@ public abstract class BaseContainerView extends FrameLayout
return mRevealView;
}
- private void updatePaddings() {
- Context context = getContext();
- Launcher launcher = Launcher.getLauncher(context);
-
- if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP &&
- this instanceof AllAppsContainerView &&
- !launcher.getDeviceProfile().isVerticalBarLayout()) {
- mContainerPaddingLeft = mContainerPaddingRight = 0;
- mContainerPaddingTop = mContainerPaddingBottom = 0;
- } else {
- DeviceProfile grid = launcher.getDeviceProfile();
- int[] padding = grid.getContainerPadding(context);
- mContainerPaddingLeft = padding[0] + grid.edgeMarginPx;
- mContainerPaddingRight = padding[1] + grid.edgeMarginPx;
- if (!launcher.getDeviceProfile().isVerticalBarLayout()) {
- mContainerPaddingTop = mContainerPaddingBottom = grid.edgeMarginPx;
- } else {
- mContainerPaddingTop = mContainerPaddingBottom = 0;
- }
- }
-
- InsetDrawable revealDrawable = new InsetDrawable(mBaseDrawable,
- mContainerPaddingLeft, mContainerPaddingTop, mContainerPaddingRight,
- mContainerPaddingBottom);
- mRevealView.setBackground(revealDrawable);
- mContent.setBackground(revealDrawable);
- }
/**
* Handles the touch events that shows the workspace when clicking outside the bounds of the
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 768d17bec..b5aed0da9 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -16,7 +16,10 @@
package com.android.launcher3.allapps;
import android.content.Context;
+import android.graphics.Color;
import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.InsetDrawable;
import android.support.v7.widget.RecyclerView;
import android.text.Selection;
import android.text.Spannable;
@@ -100,6 +103,24 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
Selection.setSelection(mSearchQueryBuilder, 0);
}
+ @Override
+ protected void updateBackground(
+ int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) {
+ if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP) {
+ if (mLauncher.getDeviceProfile().isVerticalBarLayout()) {
+ getRevealView().setBackground(new InsetDrawable(mBaseDrawable,
+ paddingLeft, paddingTop, paddingRight, paddingBottom));
+ getContentView().setBackground(
+ new InsetDrawable(new ColorDrawable(Color.TRANSPARENT),
+ paddingLeft, paddingTop, paddingRight, paddingBottom));
+ } else {
+ getRevealView().setBackground(mBaseDrawable);
+ }
+ } else {
+ super.updateBackground(paddingLeft, paddingTop, paddingRight, paddingBottom);
+ }
+ }
+
/**
* Sets the current set of predicted apps.
*/