diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 09eb6d9975..9427675851 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -3084,6 +3084,10 @@ public class Workspace extends PagedView } 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 5e41bb70e4..0c5a1fc5a8 100644 --- a/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java +++ b/src/com/android/launcher3/dragndrop/FolderAdaptiveIcon.java @@ -19,11 +19,8 @@ package com.android.launcher3.dragndrop; 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 @@ public class FolderAdaptiveIcon extends AdaptiveIconDrawable { 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 @@ public class FolderAdaptiveIcon extends AdaptiveIconDrawable { 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 52d45bb4e9..f8583b89e0 100644 --- a/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java +++ b/src/com/android/launcher3/graphics/ShiftedBitmapDrawable.java @@ -32,10 +32,14 @@ public class ShiftedBitmapDrawable extends Drawable { 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 class ShiftedBitmapDrawable extends Drawable { 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