Merge "Calling onTransitionEnd when starting a user controller animation so that any transient property is cleared" into ub-launcher3-qt-dev
diff --git a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
index ab4b64c..3c55854 100644
--- a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
+++ b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
@@ -78,7 +78,7 @@
public IconNormalizer getNormalizer() {
if (mNormalizer == null) {
- mNormalizer = new IconNormalizer(mContext, mIconBitmapSize);
+ mNormalizer = new IconNormalizer(mIconBitmapSize);
}
return mNormalizer;
}
diff --git a/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java b/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java
index 11d5eef..3e818a5 100644
--- a/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java
+++ b/iconloaderlib/src/com/android/launcher3/icons/GraphicsUtils.java
@@ -16,6 +16,9 @@
package com.android.launcher3.icons;
import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.graphics.RegionIterator;
import android.util.Log;
import java.io.ByteArrayOutputStream;
@@ -60,4 +63,14 @@
return null;
}
}
+
+ public static int getArea(Region r) {
+ RegionIterator itr = new RegionIterator(r);
+ int area = 0;
+ Rect tempRect = new Rect();
+ while (itr.next(tempRect)) {
+ area += tempRect.width() * tempRect.height();
+ }
+ return area;
+ }
}
diff --git a/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java b/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java
index 05908df..4a2a7cf 100644
--- a/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java
+++ b/iconloaderlib/src/com/android/launcher3/icons/IconNormalizer.java
@@ -16,14 +16,18 @@
package com.android.launcher3.icons;
+import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.graphics.Region;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import java.nio.ByteBuffer;
@@ -57,7 +61,7 @@
private final Canvas mCanvas;
private final byte[] mPixels;
- private final Rect mAdaptiveIconBounds;
+ private final RectF mAdaptiveIconBounds;
private float mAdaptiveIconScale;
// for each y, stores the position of the leftmost x and the rightmost x
@@ -66,7 +70,7 @@
private final Rect mBounds;
/** package private **/
- IconNormalizer(Context context, int iconBitmapSize) {
+ IconNormalizer(int iconBitmapSize) {
// Use twice the icon size as maximum size to avoid scaling down twice.
mMaxSize = iconBitmapSize * 2;
mBitmap = Bitmap.createBitmap(mMaxSize, mMaxSize, Bitmap.Config.ALPHA_8);
@@ -75,11 +79,53 @@
mLeftBorder = new float[mMaxSize];
mRightBorder = new float[mMaxSize];
mBounds = new Rect();
- mAdaptiveIconBounds = new Rect();
+ mAdaptiveIconBounds = new RectF();
mAdaptiveIconScale = SCALE_NOT_INITIALIZED;
}
+ private static float getScale(float hullArea, float boundingArea, float fullArea) {
+ float hullByRect = hullArea / boundingArea;
+ float scaleRequired;
+ if (hullByRect < CIRCLE_AREA_BY_RECT) {
+ scaleRequired = MAX_CIRCLE_AREA_FACTOR;
+ } else {
+ scaleRequired = MAX_SQUARE_AREA_FACTOR + LINEAR_SCALE_SLOPE * (1 - hullByRect);
+ }
+
+ float areaScale = hullArea / fullArea;
+ // Use sqrt of the final ratio as the images is scaled across both width and height.
+ return areaScale > scaleRequired ? (float) Math.sqrt(scaleRequired / areaScale) : 1;
+ }
+
+ /**
+ * @param d Should be AdaptiveIconDrawable
+ * @param size Canvas size to use
+ */
+ @TargetApi(Build.VERSION_CODES.O)
+ public static float normalizeAdaptiveIcon(Drawable d, int size, @Nullable RectF outBounds) {
+ Rect tmpBounds = new Rect(d.getBounds());
+ d.setBounds(0, 0, size, size);
+
+ Path path = ((AdaptiveIconDrawable) d).getIconMask();
+ Region region = new Region();
+ region.setPath(path, new Region(0, 0, size, size));
+
+ Rect hullBounds = region.getBounds();
+ int hullArea = GraphicsUtils.getArea(region);
+
+ if (outBounds != null) {
+ float sizeF = size;
+ outBounds.set(
+ hullBounds.left / sizeF,
+ hullBounds.top / sizeF,
+ 1 - (hullBounds.right / sizeF),
+ 1 - (hullBounds.bottom / sizeF));
+ }
+ d.setBounds(tmpBounds);
+ return getScale(hullArea, hullArea, size * size);
+ }
+
/**
* Returns the amount by which the {@param d} should be scaled (in both dimensions) so that it
* matches the design guidelines for a launcher icon.
@@ -96,12 +142,13 @@
*/
public synchronized float getScale(@NonNull Drawable d, @Nullable RectF outBounds) {
if (BaseIconFactory.ATLEAST_OREO && d instanceof AdaptiveIconDrawable) {
- if (mAdaptiveIconScale != SCALE_NOT_INITIALIZED) {
- if (outBounds != null) {
- outBounds.set(mAdaptiveIconBounds);
- }
- return mAdaptiveIconScale;
+ if (mAdaptiveIconScale == SCALE_NOT_INITIALIZED) {
+ mAdaptiveIconScale = normalizeAdaptiveIcon(d, mMaxSize, mAdaptiveIconBounds);
}
+ if (outBounds != null) {
+ outBounds.set(mAdaptiveIconBounds);
+ }
+ return mAdaptiveIconScale;
}
int width = d.getIntrinsicWidth();
int height = d.getIntrinsicHeight();
@@ -184,16 +231,6 @@
area += mRightBorder[y] - mLeftBorder[y] + 1;
}
- // Area of the rectangle required to fit the convex hull
- float rectArea = (bottomY + 1 - topY) * (rightX + 1 - leftX);
- float hullByRect = area / rectArea;
-
- float scaleRequired;
- if (hullByRect < CIRCLE_AREA_BY_RECT) {
- scaleRequired = MAX_CIRCLE_AREA_FACTOR;
- } else {
- scaleRequired = MAX_SQUARE_AREA_FACTOR + LINEAR_SCALE_SLOPE * (1 - hullByRect);
- }
mBounds.left = leftX;
mBounds.right = rightX;
@@ -205,15 +242,10 @@
1 - ((float) mBounds.right) / width,
1 - ((float) mBounds.bottom) / height);
}
- float areaScale = area / (width * height);
- // Use sqrt of the final ratio as the images is scaled across both width and height.
- float scale = areaScale > scaleRequired ? (float) Math.sqrt(scaleRequired / areaScale) : 1;
- if (BaseIconFactory.ATLEAST_OREO && d instanceof AdaptiveIconDrawable &&
- mAdaptiveIconScale == SCALE_NOT_INITIALIZED) {
- mAdaptiveIconScale = scale;
- mAdaptiveIconBounds.set(mBounds);
- }
- return scale;
+
+ // Area of the rectangle required to fit the convex hull
+ float rectArea = (bottomY + 1 - topY) * (rightX + 1 - leftX);
+ return getScale(area, rectArea, width * height);
}
/**
diff --git a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
index 960d907..20fdff2 100644
--- a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
+++ b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
@@ -44,7 +44,6 @@
import com.android.launcher3.testcomponent.TestCommandReceiver;
import com.android.quickstep.NavigationModeSwitchRule.NavigationModeSwitch;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
@@ -98,7 +97,6 @@
@NavigationModeSwitch(mode = THREE_BUTTON)
@Test
- @Ignore // b/131630813
public void goToOverviewFromHome() {
mDevice.pressHome();
assertTrue("Fallback Launcher not visible", mDevice.wait(Until.hasObject(By.pkg(
@@ -109,7 +107,6 @@
@NavigationModeSwitch(mode = THREE_BUTTON)
@Test
- @Ignore // b/131630813
public void goToOverviewFromApp() {
startAppFast("com.android.settings");
diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java
index 93e403c..e552f56 100644
--- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java
+++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java
@@ -71,8 +71,7 @@
@Override
public Statement apply(Statement base, Description description) {
- // b/130558787; b/131419978
- if (false && TestHelpers.isInLauncherProcess() &&
+ if (TestHelpers.isInLauncherProcess() &&
description.getAnnotation(NavigationModeSwitch.class) != null) {
Mode mode = description.getAnnotation(NavigationModeSwitch.class).mode();
return new Statement() {
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 3e7f67b..819a551 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -42,7 +42,7 @@
import android.view.Display;
import android.view.WindowManager;
-import com.android.launcher3.folder.FolderShape;
+import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.util.ConfigMonitor;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.MainThreadInitializedObject;
@@ -304,7 +304,7 @@
changeFlags |= CHANGE_FLAG_ICON_PARAMS;
}
if (!iconShapePath.equals(oldProfile.iconShapePath)) {
- FolderShape.init(context);
+ IconShape.init(context);
}
apply(context, changeFlags);
diff --git a/src/com/android/launcher3/MainProcessInitializer.java b/src/com/android/launcher3/MainProcessInitializer.java
index 93df025..95ee687 100644
--- a/src/com/android/launcher3/MainProcessInitializer.java
+++ b/src/com/android/launcher3/MainProcessInitializer.java
@@ -19,7 +19,7 @@
import android.content.Context;
import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.folder.FolderShape;
+import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.logging.FileLog;
import com.android.launcher3.util.ResourceBasedOverride;
@@ -38,6 +38,6 @@
FileLog.setDir(context.getApplicationContext().getFilesDir());
FeatureFlags.initialize(context);
SessionCommitReceiver.applyDefaultUserPrefs(context);
- FolderShape.init(context);
+ IconShape.init(context);
}
}
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 26364be..35b967f 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -167,7 +167,7 @@
public static float getDescendantCoordRelativeToAncestor(
View descendant, View ancestor, float[] coord, boolean includeRootScroll) {
return getDescendantCoordRelativeToAncestor(descendant, ancestor, coord, includeRootScroll,
- false);
+ false, null);
}
/**
@@ -180,12 +180,15 @@
* @param includeRootScroll Whether or not to account for the scroll of the descendant:
* sometimes this is relevant as in a child's coordinates within the descendant.
* @param ignoreTransform If true, view transform is ignored
+ * @param outRotation If not null, and {@param ignoreTransform} is true, this is set to the
+ * overall rotation of the view in degrees.
* @return The factor by which this descendant is scaled relative to this DragLayer. Caution
* this scale factor is assumed to be equal in X and Y, and so if at any point this
* assumption fails, we will need to return a pair of scale factors.
*/
public static float getDescendantCoordRelativeToAncestor(View descendant, View ancestor,
- float[] coord, boolean includeRootScroll, boolean ignoreTransform) {
+ float[] coord, boolean includeRootScroll, boolean ignoreTransform,
+ float[] outRotation) {
float scale = 1.0f;
View v = descendant;
while(v != ancestor && v != null) {
@@ -201,6 +204,10 @@
if (m.isTransposed) {
sMatrix.setRotate(m.surfaceRotation, v.getPivotX(), v.getPivotY());
sMatrix.mapPoints(coord);
+
+ if (outRotation != null) {
+ outRotation[0] += m.surfaceRotation;
+ }
}
}
} else {
diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java
index 2461e28..2450039 100644
--- a/src/com/android/launcher3/folder/FolderAnimationManager.java
+++ b/src/com/android/launcher3/folder/FolderAnimationManager.java
@@ -19,7 +19,7 @@
import static com.android.launcher3.BubbleTextView.TEXT_ALPHA_PROPERTY;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
-import static com.android.launcher3.folder.FolderShape.getShape;
+import static com.android.launcher3.graphics.IconShape.getShape;
import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound;
import android.animation.Animator;
diff --git a/src/com/android/launcher3/folder/PreviewBackground.java b/src/com/android/launcher3/folder/PreviewBackground.java
index 46df77a..09e8276 100644
--- a/src/com/android/launcher3/folder/PreviewBackground.java
+++ b/src/com/android/launcher3/folder/PreviewBackground.java
@@ -16,7 +16,7 @@
package com.android.launcher3.folder;
-import static com.android.launcher3.folder.FolderShape.getShape;
+import static com.android.launcher3.graphics.IconShape.getShape;
import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound;
import android.animation.Animator;
@@ -311,7 +311,7 @@
public Path getClipPath() {
mPath.reset();
- getShape().addShape(mPath, getOffsetX(), getOffsetY(), getScaledRadius());
+ getShape().addToPath(mPath, getOffsetX(), getOffsetY(), getScaledRadius());
return mPath;
}
diff --git a/src/com/android/launcher3/graphics/DrawableFactory.java b/src/com/android/launcher3/graphics/DrawableFactory.java
index ce83a17..c9566cb 100644
--- a/src/com/android/launcher3/graphics/DrawableFactory.java
+++ b/src/com/android/launcher3/graphics/DrawableFactory.java
@@ -16,15 +16,15 @@
package com.android.launcher3.graphics;
+import static com.android.launcher3.graphics.IconShape.getShapePath;
+
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Path;
import android.graphics.Rect;
-import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Process;
@@ -34,7 +34,6 @@
import com.android.launcher3.FastBitmapDrawable;
import com.android.launcher3.ItemInfoWithIcon;
import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.ResourceBasedOverride;
@@ -47,16 +46,8 @@
public class DrawableFactory implements ResourceBasedOverride {
public static final MainThreadInitializedObject<DrawableFactory> INSTANCE =
- new MainThreadInitializedObject<>(c -> {
- DrawableFactory factory = Overrides.getObject(DrawableFactory.class,
- c.getApplicationContext(), R.string.drawable_factory_class);
- factory.mContext = c;
- return factory;
- });
-
-
- private Context mContext;
- private Path mPreloadProgressPath;
+ new MainThreadInitializedObject<>(c -> Overrides.getObject(DrawableFactory.class,
+ c.getApplicationContext(), R.string.drawable_factory_class));
protected final UserHandle mMyUser = Process.myUserHandle();
protected final ArrayMap<UserHandle, Bitmap> mUserBadges = new ArrayMap<>();
@@ -66,7 +57,7 @@
*/
public FastBitmapDrawable newIcon(Context context, ItemInfoWithIcon info) {
FastBitmapDrawable drawable = info.usingLowResIcon()
- ? new PlaceHolderIconDrawable(info, getPreloadProgressPath(), context)
+ ? new PlaceHolderIconDrawable(info, getShapePath(), context)
: new FastBitmapDrawable(info);
drawable.setIsDisabled(info.isDisabled());
return drawable;
@@ -74,7 +65,7 @@
public FastBitmapDrawable newIcon(Context context, BitmapInfo info, ActivityInfo target) {
return info.isLowRes()
- ? new PlaceHolderIconDrawable(info, getPreloadProgressPath(), context)
+ ? new PlaceHolderIconDrawable(info, getShapePath(), context)
: new FastBitmapDrawable(info);
}
@@ -82,29 +73,7 @@
* Returns a FastBitmapDrawable with the icon.
*/
public PreloadIconDrawable newPendingIcon(Context context, ItemInfoWithIcon info) {
- return new PreloadIconDrawable(info, getPreloadProgressPath(), context);
- }
-
- protected Path getPreloadProgressPath() {
- if (mPreloadProgressPath != null) {
- return mPreloadProgressPath;
- }
- if (Utilities.ATLEAST_OREO) {
- // Load the path from Mask Icon
- AdaptiveIconDrawable icon = (AdaptiveIconDrawable)
- mContext.getDrawable(R.drawable.adaptive_icon_drawable_wrapper);
- icon.setBounds(0, 0,
- PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE);
- mPreloadProgressPath = icon.getIconMask();
- } else {
-
- // Create a circle static from top center and going clockwise.
- Path p = new Path();
- p.moveTo(PreloadIconDrawable.PATH_SIZE / 2, 0);
- p.addArc(0, 0, PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE, -90, 360);
- mPreloadProgressPath = p;
- }
- return mPreloadProgressPath;
+ return new PreloadIconDrawable(info, getShapePath(), context);
}
/**
diff --git a/src/com/android/launcher3/folder/FolderShape.java b/src/com/android/launcher3/graphics/IconShape.java
similarity index 86%
rename from src/com/android/launcher3/folder/FolderShape.java
rename to src/com/android/launcher3/graphics/IconShape.java
index ec6078e..88e4452 100644
--- a/src/com/android/launcher3/folder/FolderShape.java
+++ b/src/com/android/launcher3/graphics/IconShape.java
@@ -13,7 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.launcher3.folder;
+package com.android.launcher3.graphics;
+
+import static com.android.launcher3.icons.IconNormalizer.ICON_VISIBLE_AREA_FACTOR;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -31,7 +33,6 @@
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Region.Op;
-import android.graphics.RegionIterator;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
@@ -45,6 +46,8 @@
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
+import com.android.launcher3.icons.GraphicsUtils;
+import com.android.launcher3.icons.IconNormalizer;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.ClipPathView;
@@ -59,22 +62,39 @@
import androidx.annotation.Nullable;
/**
- * Abstract representation of the shape of a folder icon
+ * Abstract representation of the shape of an icon shape
*/
-public abstract class FolderShape {
+public abstract class IconShape {
- private static FolderShape sInstance = new Circle();
+ private static IconShape sInstance = new Circle();
+ private static Path sShapePath;
+ private static float sNormalizationScale = ICON_VISIBLE_AREA_FACTOR;
- public static FolderShape getShape() {
+ public static final int DEFAULT_PATH_SIZE = 100;
+
+ public static IconShape getShape() {
return sInstance;
}
+ public static Path getShapePath() {
+ if (sShapePath == null) {
+ Path p = new Path();
+ getShape().addToPath(p, 0, 0, DEFAULT_PATH_SIZE * 0.5f);
+ sShapePath = p;
+ }
+ return sShapePath;
+ }
+
+ public static float getNormalizationScale() {
+ return sNormalizationScale;
+ }
+
private SparseArray<TypedValue> mAttrs;
public abstract void drawShape(Canvas canvas, float offsetX, float offsetY, float radius,
Paint paint);
- public abstract void addShape(Path path, float offsetX, float offsetY, float radius);
+ public abstract void addToPath(Path path, float offsetX, float offsetY, float radius);
public abstract <T extends View & ClipPathView> Animator createRevealAnimator(T target,
Rect startRect, Rect endRect, float endRadius, boolean isReversed);
@@ -87,7 +107,7 @@
/**
* Abstract shape where the reveal animation is a derivative of a round rect animation
*/
- private static abstract class SimpleRectShape extends FolderShape {
+ private static abstract class SimpleRectShape extends IconShape {
@Override
public final <T extends View & ClipPathView> Animator createRevealAnimator(T target,
@@ -107,7 +127,7 @@
/**
* Abstract shape which draws using {@link Path}
*/
- private static abstract class PathShape extends FolderShape {
+ private static abstract class PathShape extends IconShape {
private final Path mTmpPath = new Path();
@@ -115,7 +135,7 @@
public final void drawShape(Canvas canvas, float offsetX, float offsetY, float radius,
Paint paint) {
mTmpPath.reset();
- addShape(mTmpPath, offsetX, offsetY, radius);
+ addToPath(mTmpPath, offsetX, offsetY, radius);
canvas.drawPath(mTmpPath, paint);
}
@@ -166,7 +186,7 @@
}
@Override
- public void addShape(Path path, float offsetX, float offsetY, float radius) {
+ public void addToPath(Path path, float offsetX, float offsetY, float radius) {
path.addCircle(radius + offsetX, radius + offsetY, radius, Path.Direction.CW);
}
@@ -196,7 +216,7 @@
}
@Override
- public void addShape(Path path, float offsetX, float offsetY, float radius) {
+ public void addToPath(Path path, float offsetX, float offsetY, float radius) {
float cx = radius + offsetX;
float cy = radius + offsetY;
float cr = radius * mRadiusRatio;
@@ -223,7 +243,7 @@
}
@Override
- public void addShape(Path p, float offsetX, float offsetY, float r1) {
+ public void addToPath(Path p, float offsetX, float offsetY, float r1) {
float r2 = r1 * mRadiusRatio;
float cx = r1 + offsetX;
float cy = r1 + offsetY;
@@ -274,7 +294,7 @@
}
@Override
- public void addShape(Path p, float offsetX, float offsetY, float r) {
+ public void addToPath(Path p, float offsetX, float offsetY, float r) {
float cx = r + offsetX;
float cy = r + offsetY;
float control = r - r * mRadiusRatio;
@@ -358,7 +378,7 @@
pickBestShape(context);
}
- private static FolderShape getShapeDefinition(String type, float radius) {
+ private static IconShape getShapeDefinition(String type, float radius) {
switch (type) {
case "Circle":
return new Circle();
@@ -373,8 +393,8 @@
}
}
- private static List<FolderShape> getAllShapes(Context context) {
- ArrayList<FolderShape> result = new ArrayList<>();
+ private static List<IconShape> getAllShapes(Context context) {
+ ArrayList<IconShape> result = new ArrayList<>();
try (XmlResourceParser parser = context.getResources().getXml(R.xml.folder_shapes)) {
// Find the root tag
@@ -393,7 +413,7 @@
if (type == XmlPullParser.START_TAG) {
AttributeSet attrs = Xml.asAttributeSet(parser);
TypedArray a = context.obtainStyledAttributes(attrs, radiusAttr);
- FolderShape shape = getShapeDefinition(parser.getName(), a.getFloat(0, 1));
+ IconShape shape = getShapeDefinition(parser.getName(), a.getFloat(0, 1));
a.recycle();
shape.mAttrs = Themes.createValueMap(context, attrs, keysToIgnore);
@@ -409,7 +429,7 @@
@TargetApi(Build.VERSION_CODES.O)
protected static void pickBestShape(Context context) {
// Pick any large size
- int size = 200;
+ final int size = 200;
Region full = new Region(0, 0, size, size);
Region iconR = new Region();
@@ -420,23 +440,17 @@
Path shapePath = new Path();
Region shapeR = new Region();
- Rect tempRect = new Rect();
// Find the shape with minimum area of divergent region.
int minArea = Integer.MAX_VALUE;
- FolderShape closestShape = null;
- for (FolderShape shape : getAllShapes(context)) {
+ IconShape closestShape = null;
+ for (IconShape shape : getAllShapes(context)) {
shapePath.reset();
- shape.addShape(shapePath, 0, 0, size / 2f);
+ shape.addToPath(shapePath, 0, 0, size / 2f);
shapeR.setPath(shapePath, full);
shapeR.op(iconR, Op.XOR);
- RegionIterator itr = new RegionIterator(shapeR);
- int area = 0;
-
- while (itr.next(tempRect)) {
- area += tempRect.width() * tempRect.height();
- }
+ int area = GraphicsUtils.getArea(shapeR);
if (area < minArea) {
minArea = area;
closestShape = shape;
@@ -446,5 +460,10 @@
if (closestShape != null) {
sInstance = closestShape;
}
+
+ // Initialize shape properties
+ drawable.setBounds(0, 0, DEFAULT_PATH_SIZE, DEFAULT_PATH_SIZE);
+ sShapePath = new Path(drawable.getIconMask());
+ sNormalizationScale = IconNormalizer.normalizeAdaptiveIcon(drawable, size, null);
}
}
diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
index d3a7955..cc4c2ef 100644
--- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java
+++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
@@ -17,6 +17,8 @@
package com.android.launcher3.graphics;
+import static com.android.launcher3.graphics.IconShape.DEFAULT_PATH_SIZE;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
@@ -55,8 +57,6 @@
}
};
- public static final int PATH_SIZE = 100;
-
private static final float PROGRESS_WIDTH = 7;
private static final float PROGRESS_GAP = 2;
private static final int MAX_PAINT_ALPHA = 255;
@@ -123,14 +123,14 @@
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
mTmpMatrix.setScale(
- (bounds.width() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / PATH_SIZE,
- (bounds.height() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / PATH_SIZE);
+ (bounds.width() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE,
+ (bounds.height() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE);
mTmpMatrix.postTranslate(
bounds.left + PROGRESS_WIDTH + PROGRESS_GAP,
bounds.top + PROGRESS_WIDTH + PROGRESS_GAP);
mProgressPath.transform(mTmpMatrix, mScaledTrackPath);
- float scale = bounds.width() / PATH_SIZE;
+ float scale = bounds.width() / DEFAULT_PATH_SIZE;
mProgressPaint.setStrokeWidth(PROGRESS_WIDTH * scale);
mShadowBitmap = getShadowBitmap(bounds.width(), bounds.height(),
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java
index 24a8be5..e2c8c14 100644
--- a/src/com/android/launcher3/views/FloatingIconView.java
+++ b/src/com/android/launcher3/views/FloatingIconView.java
@@ -15,8 +15,6 @@
*/
package com.android.launcher3.views;
-import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP;
-import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT;
import static com.android.launcher3.Utilities.mapToRange;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.config.FeatureFlags.ADAPTIVE_ICON_WINDOW_ANIM;
@@ -56,7 +54,7 @@
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.FolderAdaptiveIcon;
import com.android.launcher3.folder.FolderIcon;
-import com.android.launcher3.folder.FolderShape;
+import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.graphics.ShiftedBitmapDrawable;
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.popup.SystemShortcut;
@@ -86,6 +84,7 @@
private @Nullable Drawable mForeground;
private @Nullable Drawable mBackground;
+ private float mRotation;
private ValueAnimator mRevealAnimator;
private final Rect mStartRevealRect = new Rect();
private final Rect mEndRevealRect = new Rect();
@@ -145,7 +144,7 @@
mTaskCornerRadius = cornerRadius;
if (mIsAdaptiveIcon && shapeRevealProgress >= 0) {
if (mRevealAnimator == null) {
- mRevealAnimator = (ValueAnimator) FolderShape.getShape().createRevealAnimator(this,
+ mRevealAnimator = (ValueAnimator) IconShape.getShape().createRevealAnimator(this,
mStartRevealRect, mEndRevealRect, mTaskCornerRadius / scale, !isOpening);
mRevealAnimator.addListener(new AnimatorListenerAdapter() {
@Override
@@ -190,7 +189,7 @@
* @param positionOut Rect that will hold the size and position of v.
*/
private void matchPositionOf(Launcher launcher, View v, RectF positionOut) {
- getLocationBoundsForView(launcher, v, positionOut);
+ mRotation = getLocationBoundsForView(launcher, v, positionOut);
final LayoutParams lp = new LayoutParams(
Math.round(positionOut.width()),
Math.round(positionOut.height()));
@@ -207,54 +206,43 @@
}
/**
- * Returns the location bounds of a view.
+ * Gets the location bounds of a view and returns the overall rotation.
* - For DeepShortcutView, we return the bounds of the icon view.
* - For BubbleTextView, we return the icon bounds.
*/
- private void getLocationBoundsForView(Launcher launcher, View v, RectF outRect) {
- final boolean isBubbleTextView = v instanceof BubbleTextView;
- final boolean isFolderIcon = v instanceof FolderIcon;
-
- // Deep shortcut views have their icon drawn in a separate view.
- final boolean fromDeepShortcutView = v.getParent() instanceof DeepShortcutView;
-
- final View targetView;
- boolean ignoreTransform = false;
-
+ private float getLocationBoundsForView(Launcher launcher, View v, RectF outRect) {
+ boolean ignoreTransform = true;
if (v instanceof DeepShortcutView) {
- targetView = ((DeepShortcutView) v).getIconView();
- } else if (fromDeepShortcutView) {
- DeepShortcutView view = (DeepShortcutView) v.getParent();
- targetView = view.getIconView();
- } else if ((isBubbleTextView || isFolderIcon) && v.getTag() instanceof ItemInfo
- && (((ItemInfo) v.getTag()).container == CONTAINER_DESKTOP
- || ((ItemInfo) v.getTag()).container == CONTAINER_HOTSEAT)) {
- targetView = v;
- ignoreTransform = true;
- } else {
- targetView = v;
+ v = ((DeepShortcutView) v).getBubbleText();
+ ignoreTransform = false;
+ } else if (v.getParent() instanceof DeepShortcutView) {
+ v = ((DeepShortcutView) v.getParent()).getIconView();
+ ignoreTransform = false;
+ }
+ if (v == null) {
+ return 0;
}
- float[] points = new float[] {0, 0, targetView.getWidth(), targetView.getHeight()};
- Utilities.getDescendantCoordRelativeToAncestor(targetView, launcher.getDragLayer(), points,
- false, ignoreTransform);
-
- float viewLocationLeft = Math.min(points[0], points[2]);
- float viewLocationTop = Math.min(points[1], points[3]);
-
- final Rect iconRect = new Rect();
- if (isBubbleTextView && !fromDeepShortcutView) {
- ((BubbleTextView) v).getIconBounds(iconRect);
- } else if (isFolderIcon) {
- ((FolderIcon) v).getPreviewBounds(iconRect);
+ Rect iconBounds = new Rect();
+ if (v instanceof BubbleTextView) {
+ ((BubbleTextView) v).getIconBounds(iconBounds);
+ } else if (v instanceof FolderIcon) {
+ ((FolderIcon) v).getPreviewBounds(iconBounds);
} else {
- iconRect.set(0, 0, Math.abs(Math.round(points[2] - points[0])),
- Math.abs(Math.round(points[3] - points[1])));
+ iconBounds.set(0, 0, v.getWidth(), v.getHeight());
}
- viewLocationLeft += iconRect.left;
- viewLocationTop += iconRect.top;
- outRect.set(viewLocationLeft, viewLocationTop, viewLocationLeft + iconRect.width(),
- viewLocationTop + iconRect.height());
+
+ float[] points = new float[] {iconBounds.left, iconBounds.top, iconBounds.right,
+ iconBounds.bottom};
+ float[] rotation = new float[] {0};
+ Utilities.getDescendantCoordRelativeToAncestor(v, launcher.getDragLayer(), points,
+ false, ignoreTransform, rotation);
+ outRect.set(
+ Math.min(points[0], points[2]),
+ Math.min(points[1], points[3]),
+ Math.max(points[0], points[2]),
+ Math.max(points[1], points[3]));
+ return rotation[0];
}
@WorkerThread
@@ -425,27 +413,22 @@
invalidate();
}
- private void drawAdaptiveIconIfExists(Canvas canvas) {
+ @Override
+ public void draw(Canvas canvas) {
+ int count = canvas.save();
+ canvas.rotate(mRotation,
+ mFinalDrawableBounds.exactCenterX(), mFinalDrawableBounds.exactCenterY());
+ if (mClipPath != null) {
+ canvas.clipPath(mClipPath);
+ }
+ super.draw(canvas);
if (mBackground != null) {
mBackground.draw(canvas);
}
if (mForeground != null) {
mForeground.draw(canvas);
}
- }
-
- @Override
- public void draw(Canvas canvas) {
- if (mClipPath == null) {
- super.draw(canvas);
- drawAdaptiveIconIfExists(canvas);
- } else {
- int count = canvas.save();
- canvas.clipPath(mClipPath);
- super.draw(canvas);
- drawAdaptiveIconIfExists(canvas);
- canvas.restoreToCount(count);
- }
+ canvas.restoreToCount(count);
}
public void onListenerViewClosed() {
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index 43bdb9f..75db2f1 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -18,9 +18,6 @@
import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static com.android.launcher3.ui.TaplTestsLauncher3.getAppPackageName;
-import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_2BUTTON_OVERLAY;
-import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_3BUTTON_OVERLAY;
-import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_GESTURAL_OVERLAY;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -35,7 +32,6 @@
import android.content.IntentFilter;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.PackageManager;
-import android.os.Build;
import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
@@ -64,7 +60,6 @@
import com.android.launcher3.util.rule.ShellCommandRule;
import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestRule;
@@ -75,7 +70,6 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import java.lang.reflect.Method;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -111,68 +105,6 @@
}
if (TestHelpers.isInLauncherProcess()) Utilities.enableRunningInTestHarnessForTests();
mLauncher = new LauncherInstrumentation(instrumentation);
-
- // b/130558787; b/131419978
- if (TestHelpers.isInLauncherProcess() && !LauncherInstrumentation.needSlowGestures()) {
- try {
- Class systemProps = Class.forName("android.os.SystemProperties");
- Method getInt = systemProps.getMethod("getInt", String.class, int.class);
- int apiLevel = (int) getInt.invoke(null, "ro.product.first_api_level", 0);
-
- if (apiLevel >= Build.VERSION_CODES.P) {
- setActiveOverlay(NAV_BAR_MODE_2BUTTON_OVERLAY,
- LauncherInstrumentation.NavigationModel.TWO_BUTTON);
- }
- if (apiLevel >= Build.VERSION_CODES.O && apiLevel < Build.VERSION_CODES.P) {
- setActiveOverlay(NAV_BAR_MODE_GESTURAL_OVERLAY,
- LauncherInstrumentation.NavigationModel.ZERO_BUTTON);
- }
- if (apiLevel < Build.VERSION_CODES.O) {
- setActiveOverlay(NAV_BAR_MODE_3BUTTON_OVERLAY,
- LauncherInstrumentation.NavigationModel.THREE_BUTTON);
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
- }
- }
-
- public void setActiveOverlay(String overlayPackage,
- LauncherInstrumentation.NavigationModel expectedMode) {
- setOverlayPackageEnabled(NAV_BAR_MODE_3BUTTON_OVERLAY,
- overlayPackage == NAV_BAR_MODE_3BUTTON_OVERLAY);
- setOverlayPackageEnabled(NAV_BAR_MODE_2BUTTON_OVERLAY,
- overlayPackage == NAV_BAR_MODE_2BUTTON_OVERLAY);
- setOverlayPackageEnabled(NAV_BAR_MODE_GESTURAL_OVERLAY,
- overlayPackage == NAV_BAR_MODE_GESTURAL_OVERLAY);
-
- for (int i = 0; i != 100; ++i) {
- if (mLauncher.getNavigationModel() == expectedMode) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return;
- }
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- Assert.fail("Couldn't switch to " + overlayPackage);
- }
-
- private void setOverlayPackageEnabled(String overlayPackage, boolean enable) {
- Log.d(TAG, "setOverlayPackageEnabled: " + overlayPackage + " " + enable);
- final String action = enable ? "enable" : "disable";
- try {
- UiDevice.getInstance(getInstrumentation()).executeShellCommand(
- "cmd overlay " + action + " " + overlayPackage);
- } catch (IOException e) {
- e.printStackTrace();
- }
}
@Rule
diff --git a/tests/src/com/android/launcher3/ui/TestViewHelpers.java b/tests/src/com/android/launcher3/ui/TestViewHelpers.java
index 6fa28f1..2116f5e 100644
--- a/tests/src/com/android/launcher3/ui/TestViewHelpers.java
+++ b/tests/src/com/android/launcher3/ui/TestViewHelpers.java
@@ -114,7 +114,8 @@
Point center = icon.getVisibleCenter();
// Action Down
- sendPointer(MotionEvent.ACTION_DOWN, center);
+ final long downTime = SystemClock.uptimeMillis();
+ sendPointer(downTime, MotionEvent.ACTION_DOWN, center);
UiObject2 dragLayer = findViewById(R.id.drag_layer);
@@ -131,7 +132,7 @@
} else {
moveLocation.y += distanceToMove;
}
- movePointer(center, moveLocation);
+ movePointer(downTime, center, moveLocation);
assertNull(findViewById(R.id.deep_shortcuts_container));
}
@@ -142,19 +143,24 @@
Point moveLocation = dragLayer.getVisibleCenter();
// Move to center
- movePointer(center, moveLocation);
- sendPointer(MotionEvent.ACTION_UP, center);
+ movePointer(downTime, center, moveLocation);
+ sendPointer(downTime, MotionEvent.ACTION_UP, moveLocation);
// Wait until remove target is gone.
getDevice().wait(Until.gone(getSelectorForId(R.id.delete_target_text)),
AbstractLauncherUiTest.DEFAULT_UI_TIMEOUT);
}
- private static void movePointer(Point from, Point to) {
+ private static void movePointer(long downTime, Point from, Point to) {
while (!from.equals(to)) {
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
from.x = getNextMoveValue(to.x, from.x);
from.y = getNextMoveValue(to.y, from.y);
- sendPointer(MotionEvent.ACTION_MOVE, from);
+ sendPointer(downTime, MotionEvent.ACTION_MOVE, from);
}
}
@@ -168,8 +174,8 @@
}
}
- public static void sendPointer(int action, Point point) {
- MotionEvent event = MotionEvent.obtain(SystemClock.uptimeMillis(),
+ public static void sendPointer(long downTime, int action, Point point) {
+ MotionEvent event = MotionEvent.obtain(downTime,
SystemClock.uptimeMillis(), action, point.x, point.y, 0);
getInstrumentation().sendPointerSync(event);
event.recycle();
diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
index 06a8bca..5eb5f19 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
@@ -156,7 +156,8 @@
@Override
public boolean evaluate(ItemInfo info, View view) {
return info instanceof LauncherAppWidgetInfo &&
- ((LauncherAppWidgetInfo) info).providerName.equals(mWidgetInfo.provider) &&
+ ((LauncherAppWidgetInfo) info).providerName.getClassName().equals(
+ mWidgetInfo.provider.getClassName()) &&
((LauncherAppWidgetInfo) info).appWidgetId == mWidgetId;
}
}
diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
index e802acb..0061568 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
@@ -82,7 +82,8 @@
@Override
public boolean evaluate(ItemInfo info, View view) {
return info instanceof LauncherAppWidgetInfo &&
- ((LauncherAppWidgetInfo) info).providerName.equals(widgetInfo.provider);
+ ((LauncherAppWidgetInfo) info).providerName.getClassName().equals(
+ widgetInfo.provider.getClassName());
}
}).call());
}
diff --git a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
index af50190..874ff19 100644
--- a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
@@ -123,7 +123,7 @@
verifyWidgetPresent(info);
}
- @Test @Ignore // b/131116593
+ @Test
public void testUnboundWidget_removed() {
LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, false);
LauncherAppWidgetInfo item = createWidgetInfo(info, false);
@@ -143,7 +143,7 @@
assertFalse(mDevice.findObject(new UiSelector().description(info.label)).exists());
}
- @Test @Ignore // b/131116593
+ @Test
public void testPendingWidget_autoRestored() {
// A non-restored widget with no config screen gets restored automatically.
LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, false);
@@ -181,7 +181,7 @@
LauncherSettings.Favorites.APPWIDGET_ID))));
}
- @Test @Ignore // b/131116593
+ @Test
public void testPendingWidget_notRestored_removed() {
LauncherAppWidgetInfo item = getInvalidWidgetInfo();
item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID
diff --git a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
index 65d8a82..b66fa8a 100644
--- a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
@@ -80,7 +80,7 @@
@Test
public void testEmpty() throws Throwable { /* needed while the broken tests are being fixed */ }
- @Test @Ignore // b/131116593
+ @Test
public void testPinWidgetNoConfig() throws Throwable {
runTest("pinWidgetNoConfig", true, new ItemOperator() {
@Override
@@ -93,7 +93,7 @@
});
}
- @Test @Ignore // b/131116593
+ @Test
public void testPinWidgetNoConfig_customPreview() throws Throwable {
// Command to set custom preview
Intent command = RequestPinItemActivity.getCommandIntent(
@@ -111,7 +111,7 @@
}, command);
}
- @Test @Ignore // b/131116593
+ @Test
public void testPinWidgetWithConfig() throws Throwable {
runTest("pinWidgetWithConfig", true, new ItemOperator() {
@Override
@@ -124,7 +124,7 @@
});
}
- @Test @Ignore // b/131116593
+ @Test
public void testPinShortcut() throws Throwable {
// Command to set the shortcut id
Intent command = RequestPinItemActivity.getCommandIntent(
@@ -181,8 +181,7 @@
// Accept confirmation:
BlockingBroadcastReceiver resultReceiver = new BlockingBroadcastReceiver(mCallbackAction);
- mDevice.wait(Until.findObject(By.text(mTargetContext.getString(
- R.string.place_automatically).toUpperCase())), DEFAULT_UI_TIMEOUT).click();
+ mDevice.wait(Until.findObject(By.text("Add automatically")), DEFAULT_UI_TIMEOUT).click();
Intent result = resultReceiver.blockingGetIntent();
assertNotNull(result);
mAppWidgetId = result.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
diff --git a/tests/tapl/com/android/launcher3/tapl/AllApps.java b/tests/tapl/com/android/launcher3/tapl/AllApps.java
index 19c5047..1ad0037 100644
--- a/tests/tapl/com/android/launcher3/tapl/AllApps.java
+++ b/tests/tapl/com/android/launcher3/tapl/AllApps.java
@@ -70,7 +70,7 @@
final UiObject2 navBar = mLauncher.waitForSystemUiObject("navigation_bar_frame");
allAppsContainer.setGestureMargins(0, 0, 0, navBar.getVisibleBounds().height() + 1);
} else {
- allAppsContainer.setGestureMargins(0, 0, 0, 100);
+ allAppsContainer.setGestureMargins(0, 0, 0, 200);
}
final BySelector appIconSelector = AppIcon.getAppIconSelector(appName, mLauncher);
if (!hasClickableIcon(allAppsContainer, appIconSelector)) {
diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java
index 2de53c3..100a11c 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -38,7 +38,7 @@
"want to fling forward in widgets")) {
LauncherInstrumentation.log("Widgets.flingForward enter");
final UiObject2 widgetsContainer = verifyActiveContainer();
- widgetsContainer.setGestureMargin(100);
+ widgetsContainer.setGestureMargins(0, 0, 0, 200);
widgetsContainer.fling(Direction.DOWN,
(int) (FLING_SPEED * mLauncher.getDisplayDensity()));
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("flung forward")) {