Fix bugs related to swipe up to home animation.
- Added ConstantState support for FolderAdaptiveIcon and
ShiftedBitmapDrawable.
- Quick fix for NPE in Workspace#mapOverCellLayout while I investigate
further.
Bug: 128460496
Change-Id: I5ec02e25dcf9f17aeb37928e675a033bdc8819ae
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 09eb6d9..9427675 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -3084,6 +3084,10 @@
}
private boolean mapOverCellLayout(boolean recurse, CellLayout layout, ItemOperator op) {
+ // TODO(b/128460496) Potential race condition where layout is not yet loaded
+ if (layout == null) {
+ return false;
+ }
ShortcutAndWidgetContainer container = layout.getShortcutsAndWidgets();
// map over all the shortcuts on the workspace
final int itemCount = container.getChildCount();
diff --git a/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java b/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java
index 5e41bb7..0c5a1fc 100644
--- a/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java
+++ b/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java
@@ -19,11 +19,8 @@
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.ColorFilter;
import android.graphics.Matrix;
-import android.graphics.Paint;
import android.graphics.Path;
-import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.ColorDrawable;
@@ -49,11 +46,15 @@
private final Drawable mBadge;
private final Path mMask;
+ private final ConstantState mConstantState;
private FolderAdaptiveIcon(Drawable bg, Drawable fg, Drawable badge, Path mask) {
super(bg, fg);
mBadge = badge;
mMask = mask;
+
+ mConstantState = new MyConstantState(bg.getConstantState(), fg.getConstantState(),
+ badge.getConstantState(), mask);
}
@Override
@@ -134,4 +135,35 @@
return new FolderAdaptiveIcon(new ColorDrawable(bg.getBgColor()), foreground, badge, mask);
}
+
+ @Override
+ public ConstantState getConstantState() {
+ return mConstantState;
+ }
+
+ private static class MyConstantState extends ConstantState {
+ private final ConstantState mBg;
+ private final ConstantState mFg;
+ private final ConstantState mBadge;
+ private final Path mMask;
+
+ MyConstantState(ConstantState bg, ConstantState fg, ConstantState badge, Path mask) {
+ mBg = bg;
+ mFg = fg;
+ mBadge = badge;
+ mMask = mask;
+ }
+
+ @Override
+ public Drawable newDrawable() {
+ return new FolderAdaptiveIcon(mBg.newDrawable(), mFg.newDrawable(),
+ mBadge.newDrawable(), mMask);
+ }
+
+ @Override
+ public int getChangingConfigurations() {
+ return mBg.getChangingConfigurations() & mFg.getChangingConfigurations()
+ & mBadge.getChangingConfigurations();
+ }
+ }
}
diff --git a/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java b/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java
index 52d45bb..f8583b8 100644
--- a/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java
+++ b/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java
@@ -32,10 +32,14 @@
private float mShiftX;
private float mShiftY;
+ private final ConstantState mConstantState;
+
public ShiftedBitmapDrawable(Bitmap bitmap, float shiftX, float shiftY) {
mBitmap = bitmap;
mShiftX = shiftX;
mShiftY = shiftY;
+
+ mConstantState = new MyConstantState(mBitmap, mShiftX, mShiftY);
}
public float getShiftX() {
@@ -71,4 +75,31 @@
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
+
+ @Override
+ public ConstantState getConstantState() {
+ return mConstantState;
+ }
+
+ private static class MyConstantState extends ConstantState {
+ private final Bitmap mBitmap;
+ private float mShiftX;
+ private float mShiftY;
+
+ MyConstantState(Bitmap bitmap, float shiftX, float shiftY) {
+ mBitmap = bitmap;
+ mShiftX = shiftX;
+ mShiftY = shiftY;
+ }
+
+ @Override
+ public Drawable newDrawable() {
+ return new ShiftedBitmapDrawable(mBitmap, mShiftX, mShiftY);
+ }
+
+ @Override
+ public int getChangingConfigurations() {
+ return 0;
+ }
+ }
}
\ No newline at end of file