diff options
author | Michael Jurka <mikejurka@google.com> | 2011-01-07 15:37:17 -0800 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2011-01-07 21:06:30 -0800 |
commit | 99b6a5b5f7808291e26f98ee8064bd9f288c3feb (patch) | |
tree | 9eee0c405fc8953e6692f6ef66718877ff89dfd0 /src/com/android/launcher2/CellLayout.java | |
parent | c42d5e330a8bfb83be37cb5dec479e7a9b631f60 (diff) | |
download | android_packages_apps_Trebuchet-99b6a5b5f7808291e26f98ee8064bd9f288c3feb.tar.gz android_packages_apps_Trebuchet-99b6a5b5f7808291e26f98ee8064bd9f288c3feb.tar.bz2 android_packages_apps_Trebuchet-99b6a5b5f7808291e26f98ee8064bd9f288c3feb.zip |
Fixed bug: newly added apps didn't show up immediately
Now, whenever apps change visibility or are removed, we invalidate the bitmap cache for CellLayout
Change-Id: I883ea6cc07b1b09775bb7d262417acb34fbec3de
Diffstat (limited to 'src/com/android/launcher2/CellLayout.java')
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index 2ddebe77f..2359e322a 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -53,7 +53,7 @@ import android.view.animation.LayoutAnimationController; import java.util.Arrays; -public class CellLayout extends ViewGroup implements Dimmable { +public class CellLayout extends ViewGroup implements Dimmable, VisibilityChangedListener { static final String TAG = "CellLayout"; private int mCellWidth; @@ -409,7 +409,11 @@ public class CellLayout extends ViewGroup implements Dimmable { private void invalidateCache() { mIsCacheDirty = true; - invalidateIfNeeded(); + invalidate(); + } + + public void receiveVisibilityChangedMessage(View v) { + invalidateCache(); } public void updateCache() { @@ -620,10 +624,11 @@ public class CellLayout extends ViewGroup implements Dimmable { child.setId(childId); - // We might be in the middle or end of shrinking/fading to a dimmed view - // Make sure this view's alpha is set the same as all the rest of the views - child.setAlpha(getAlpha()); addView(child, index, lp); + if (child instanceof VisibilityChangedBroadcaster) { + VisibilityChangedBroadcaster v = (VisibilityChangedBroadcaster) child; + v.setVisibilityChangedListener(this); + } // invalidate the cache to have it reflect the new item invalidateCache(); @@ -649,34 +654,40 @@ public class CellLayout extends ViewGroup implements Dimmable { public void removeAllViews() { super.removeAllViews(); clearOccupiedCells(); + invalidateCache(); } @Override public void removeAllViewsInLayout() { super.removeAllViewsInLayout(); clearOccupiedCells(); + invalidateCache(); } public void removeViewWithoutMarkingCells(View view) { super.removeView(view); + invalidateCache(); } @Override public void removeView(View view) { markCellsAsUnoccupiedForView(view); super.removeView(view); + invalidateCache(); } @Override public void removeViewAt(int index) { markCellsAsUnoccupiedForView(getChildAt(index)); super.removeViewAt(index); + invalidateCache(); } @Override public void removeViewInLayout(View view) { markCellsAsUnoccupiedForView(view); super.removeViewInLayout(view); + invalidateCache(); } @Override @@ -685,6 +696,7 @@ public class CellLayout extends ViewGroup implements Dimmable { markCellsAsUnoccupiedForView(getChildAt(i)); } super.removeViews(start, count); + invalidateCache(); } @Override @@ -693,6 +705,7 @@ public class CellLayout extends ViewGroup implements Dimmable { markCellsAsUnoccupiedForView(getChildAt(i)); } super.removeViewsInLayout(start, count); + invalidateCache(); } @Override @@ -1713,3 +1726,14 @@ out: for (int i = x; i < x + spanX - 1 && x < xCount; i++) { } } } + +// Custom interfaces used to listen to "visibility changed" events of *children* of Views. Avoided +// using "onVisibilityChanged" in the names because there's a method of that name in framework +// (which can only can be used to listen to ancestors' "visibility changed" events) +interface VisibilityChangedBroadcaster { + public void setVisibilityChangedListener(VisibilityChangedListener listener); +} + +interface VisibilityChangedListener { + public void receiveVisibilityChangedMessage(View v); +} |