summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-07-13 17:49:39 -0700
committerAlan Viverette <alanv@google.com>2014-07-16 00:06:14 +0000
commit7068c39526459c18a020e29c1ebfa6aed54e2d0f (patch)
tree82a88b511a75b0ce26fca637efd01abba14c27b5 /graphics/java
parent67eb5bbd5374fe96209cf7b68543cb48ee959b96 (diff)
downloadframeworks_base-7068c39526459c18a020e29c1ebfa6aed54e2d0f.zip
frameworks_base-7068c39526459c18a020e29c1ebfa6aed54e2d0f.tar.gz
frameworks_base-7068c39526459c18a020e29c1ebfa6aed54e2d0f.tar.bz2
Fix hotspot movement on focus change
BUG: 15726988 Change-Id: I97f88e5f7e404ecfcd5c254fddd18c8f6616064e
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/DrawableContainer.java23
-rw-r--r--graphics/java/android/graphics/drawable/InsetDrawable.java6
-rw-r--r--graphics/java/android/graphics/drawable/LayerDrawable.java17
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java6
5 files changed, 57 insertions, 0 deletions
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index e7a073c..89236ad 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -516,6 +516,11 @@ public abstract class Drawable {
*/
public void setHotspotBounds(int left, int top, int right, int bottom) {}
+ /** @hide For internal use only. Individual results may vary. */
+ public void getHotspotBounds(Rect outRect) {
+ outRect.set(getBounds());
+ }
+
/**
* Whether this drawable requests projection.
*
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index ed44cde..771322d 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -52,6 +52,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
*/
private static final boolean DEFAULT_DITHER = true;
private DrawableContainerState mDrawableContainerState;
+ private Rect mHotspotBounds;
private Drawable mCurrDrawable;
private int mAlpha = 0xFF;
@@ -273,11 +274,27 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
@Override
public void setHotspotBounds(int left, int top, int right, int bottom) {
+ if (mHotspotBounds == null) {
+ mHotspotBounds = new Rect(left, top, bottom, right);
+ } else {
+ mHotspotBounds.set(left, top, bottom, right);
+ }
+
if (mCurrDrawable != null) {
mCurrDrawable.setHotspotBounds(left, top, right, bottom);
}
}
+ /** @hide */
+ @Override
+ public void getHotspotBounds(Rect outRect) {
+ if (mHotspotBounds != null) {
+ outRect.set(mHotspotBounds);
+ } else {
+ super.getHotspotBounds(outRect);
+ }
+ }
+
@Override
protected boolean onStateChange(int[] state) {
if (mLastDrawable != null) {
@@ -430,6 +447,12 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
d.setBounds(getBounds());
d.setLayoutDirection(getLayoutDirection());
d.setAutoMirrored(mDrawableContainerState.mAutoMirrored);
+
+ final Rect hotspotBounds = mHotspotBounds;
+ if (hotspotBounds != null) {
+ d.setHotspotBounds(hotspotBounds.left, hotspotBounds.top,
+ hotspotBounds.right, hotspotBounds.bottom);
+ }
}
} else {
mCurrDrawable = null;
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index d214a47..6db96b6 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -232,6 +232,12 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
mInsetState.mDrawable.setHotspotBounds(left, top, right, bottom);
}
+ /** @hide */
+ @Override
+ public void getHotspotBounds(Rect outRect) {
+ mInsetState.mDrawable.getHotspotBounds(outRect);
+ }
+
@Override
public boolean setVisible(boolean visible, boolean restart) {
mInsetState.mDrawable.setVisible(visible, restart);
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index fa68bc5..8d83c74 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -80,6 +80,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
private int[] mPaddingB;
private final Rect mTmpRect = new Rect();
+ private Rect mHotspotBounds;
private boolean mMutated;
/**
@@ -630,6 +631,22 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
for (int i = 0; i < N; i++) {
array[i].mDrawable.setHotspotBounds(left, top, right, bottom);
}
+
+ if (mHotspotBounds == null) {
+ mHotspotBounds = new Rect(left, top, right, bottom);
+ } else {
+ mHotspotBounds.set(left, top, right, bottom);
+ }
+ }
+
+ /** @hide */
+ @Override
+ public void getHotspotBounds(Rect outRect) {
+ if (mHotspotBounds != null) {
+ outRect.set(mHotspotBounds);
+ } else {
+ super.getHotspotBounds(outRect);
+ }
}
@Override
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 4f05313..f955f7c 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -471,6 +471,12 @@ public class RippleDrawable extends LayerDrawable {
onHotspotBoundsChanged();
}
+ /** @hide */
+ @Override
+ public void getHotspotBounds(Rect outRect) {
+ outRect.set(mHotspotBounds);
+ }
+
/**
* Notifies all the animating ripples that the hotspot bounds have changed.
*/