Improve feedback when launching apps
- Keep "pressed" state until the activity is launched
- Properly invalidate icons, which solves issue where the edge of "pressed" blue glow was still being rendered
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index ad01fac..3ef0546 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -66,6 +66,8 @@
private boolean mBackgroundSizeChanged;
private Drawable mBackground;
+ private boolean mStayPressed;
+
private VisibilityChangedListener mOnVisibilityChangedListener;
public BubbleTextView(Context context) {
@@ -124,27 +126,37 @@
return who == mBackground || super.verifyDrawable(who);
}
+ private void invalidatePressedOrFocusedBackground() {
+ int padding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS / 2;
+ ((View)getParent()).invalidate(getLeft() - padding, getTop() - padding,
+ getRight() + padding, getBottom() + padding);
+ invalidate();
+ }
+
@Override
protected void drawableStateChanged() {
if (isPressed()) {
// In this case, we have already created the pressed outline on ACTION_DOWN,
// so we just need to do an invalidate to trigger draw
if (!mDidInvalidateForPressedState) {
- invalidate();
+ invalidatePressedOrFocusedBackground();
}
} else {
// Otherwise, either clear the pressed/focused background, or create a background
// for the focused state
final boolean backgroundEmptyBefore = mPressedOrFocusedBackground == null;
- mPressedOrFocusedBackground = null;
+ if (!mStayPressed) {
+ mPressedOrFocusedBackground = null;
+ }
if (isFocused()) {
mPressedOrFocusedBackground = createGlowingOutline(
mTempCanvas, mFocusedGlowColor, mFocusedOutlineColor);
- invalidate();
+ mStayPressed = false;
+ invalidatePressedOrFocusedBackground();
}
final boolean backgroundEmptyNow = mPressedOrFocusedBackground == null;
if (!backgroundEmptyBefore && backgroundEmptyNow) {
- invalidate();
+ invalidatePressedOrFocusedBackground();
}
}
@@ -244,9 +256,16 @@
super.onVisibilityChanged(changedView, visibility);
}
+ void setStayPressed(boolean stayPressed) {
+ mStayPressed = stayPressed;
+ if (!stayPressed) {
+ mPressedOrFocusedBackground = null;
+ }
+ invalidatePressedOrFocusedBackground();
+ }
@Override
public void draw(Canvas canvas) {
- if (mPressedOrFocusedBackground != null && (isPressed() || isFocused())) {
+ if (mPressedOrFocusedBackground != null && (isPressed() || isFocused() || mStayPressed)) {
// The blue glow can extend outside of our clip region, so we first temporarily expand
// the canvas's clip region
canvas.save(Canvas.CLIP_SAVE_FLAG);