Loading core/api/test-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1042,6 +1042,11 @@ package android.graphics.drawable { method public android.graphics.Xfermode getXfermode(); } public class RippleDrawable extends android.graphics.drawable.LayerDrawable { method public float getTargetBackgroundOpacity(); method public void setBackgroundActive(boolean, boolean, boolean, boolean); } public class ShapeDrawable extends android.graphics.drawable.Drawable { method public void setXfermode(@Nullable android.graphics.Xfermode); } Loading graphics/java/android/graphics/drawable/RippleDrawable.java +24 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.graphics.drawable; import android.annotation.TestApi; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; import static java.lang.annotation.ElementType.METHOD; Loading Loading @@ -321,6 +323,7 @@ public class RippleDrawable extends LayerDrawable { boolean pressed = false; boolean focused = false; boolean hovered = false; boolean windowFocused = false; for (int state : stateSet) { if (state == R.attr.state_enabled) { Loading @@ -331,10 +334,12 @@ public class RippleDrawable extends LayerDrawable { pressed = true; } else if (state == R.attr.state_hovered) { hovered = true; } else if (state == R.attr.state_window_focused) { windowFocused = true; } } setRippleActive(enabled && pressed); setBackgroundActive(hovered, focused, pressed); setBackgroundActive(hovered, focused, pressed, windowFocused); return changed; } Loading @@ -358,7 +363,10 @@ public class RippleDrawable extends LayerDrawable { } } private void setBackgroundActive(boolean hovered, boolean focused, boolean pressed) { /** @hide */ @TestApi public void setBackgroundActive(boolean hovered, boolean focused, boolean pressed, boolean windowFocused) { if (mState.mRippleStyle == STYLE_SOLID) { if (mBackground == null && (hovered || focused)) { mBackground = new RippleBackground(this, mHotspotBounds, isBounded()); Loading @@ -370,7 +378,7 @@ public class RippleDrawable extends LayerDrawable { } else { if (focused || hovered) { if (!pressed) { enterPatternedBackgroundAnimation(focused, hovered); enterPatternedBackgroundAnimation(focused, hovered, windowFocused); } } else { exitPatternedBackgroundAnimation(); Loading Loading @@ -840,9 +848,20 @@ public class RippleDrawable extends LayerDrawable { invalidateSelf(false); } private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered) { /** @hide */ @TestApi public float getTargetBackgroundOpacity() { return mTargetBackgroundOpacity; } private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered, boolean windowFocused) { mBackgroundOpacity = 0; mTargetBackgroundOpacity = focused ? .6f : hovered ? .2f : 0f; if (focused) { mTargetBackgroundOpacity = windowFocused ? .6f : .2f; } else { mTargetBackgroundOpacity = hovered ? .2f : 0f; } if (mBackgroundAnimation != null) mBackgroundAnimation.cancel(); // after cancel mRunBackgroundAnimation = true; Loading Loading
core/api/test-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1042,6 +1042,11 @@ package android.graphics.drawable { method public android.graphics.Xfermode getXfermode(); } public class RippleDrawable extends android.graphics.drawable.LayerDrawable { method public float getTargetBackgroundOpacity(); method public void setBackgroundActive(boolean, boolean, boolean, boolean); } public class ShapeDrawable extends android.graphics.drawable.Drawable { method public void setXfermode(@Nullable android.graphics.Xfermode); } Loading
graphics/java/android/graphics/drawable/RippleDrawable.java +24 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.graphics.drawable; import android.annotation.TestApi; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; import static java.lang.annotation.ElementType.METHOD; Loading Loading @@ -321,6 +323,7 @@ public class RippleDrawable extends LayerDrawable { boolean pressed = false; boolean focused = false; boolean hovered = false; boolean windowFocused = false; for (int state : stateSet) { if (state == R.attr.state_enabled) { Loading @@ -331,10 +334,12 @@ public class RippleDrawable extends LayerDrawable { pressed = true; } else if (state == R.attr.state_hovered) { hovered = true; } else if (state == R.attr.state_window_focused) { windowFocused = true; } } setRippleActive(enabled && pressed); setBackgroundActive(hovered, focused, pressed); setBackgroundActive(hovered, focused, pressed, windowFocused); return changed; } Loading @@ -358,7 +363,10 @@ public class RippleDrawable extends LayerDrawable { } } private void setBackgroundActive(boolean hovered, boolean focused, boolean pressed) { /** @hide */ @TestApi public void setBackgroundActive(boolean hovered, boolean focused, boolean pressed, boolean windowFocused) { if (mState.mRippleStyle == STYLE_SOLID) { if (mBackground == null && (hovered || focused)) { mBackground = new RippleBackground(this, mHotspotBounds, isBounded()); Loading @@ -370,7 +378,7 @@ public class RippleDrawable extends LayerDrawable { } else { if (focused || hovered) { if (!pressed) { enterPatternedBackgroundAnimation(focused, hovered); enterPatternedBackgroundAnimation(focused, hovered, windowFocused); } } else { exitPatternedBackgroundAnimation(); Loading Loading @@ -840,9 +848,20 @@ public class RippleDrawable extends LayerDrawable { invalidateSelf(false); } private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered) { /** @hide */ @TestApi public float getTargetBackgroundOpacity() { return mTargetBackgroundOpacity; } private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered, boolean windowFocused) { mBackgroundOpacity = 0; mTargetBackgroundOpacity = focused ? .6f : hovered ? .2f : 0f; if (focused) { mTargetBackgroundOpacity = windowFocused ? .6f : .2f; } else { mTargetBackgroundOpacity = hovered ? .2f : 0f; } if (mBackgroundAnimation != null) mBackgroundAnimation.cancel(); // after cancel mRunBackgroundAnimation = true; Loading