Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7068c395 authored by Alan Viverette's avatar Alan Viverette
Browse files

Fix hotspot movement on focus change

BUG: 15726988
Change-Id: I97f88e5f7e404ecfcd5c254fddd18c8f6616064e
parent 67eb5bbd
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -4852,8 +4852,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     */
    private void manageFocusHotspot(boolean focused, View v) {
        final Rect r = new Rect();
        if (!focused && v != null && mAttachInfo != null) {
            v.getBoundsOnScreen(r);
        if (v != null && mAttachInfo != null) {
            v.getHotspotBounds(r);
            final int[] location = mAttachInfo.mTmpLocation;
            getLocationOnScreen(location);
            r.offset(-location[0], -location[1]);
@@ -4866,6 +4866,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        drawableHotspotChanged(x, y);
    }
    /**
     * Populates <code>outRect</code> with the hotspot bounds. By default,
     * the hotspot bounds are identical to the screen bounds.
     *
     * @param outRect rect to populate with hotspot bounds
     * @hide Only for internal use by views and widgets.
     */
    public void getHotspotBounds(Rect outRect) {
        final Drawable background = getBackground();
        if (background != null) {
            background.getHotspotBounds(outRect);
        } else {
            getBoundsOnScreen(outRect);
        }
    }
    /**
     * Request that a rectangle of this view be visible on the screen,
     * scrolling if necessary just enough.
+5 −0
Original line number Diff line number Diff line
@@ -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.
     *
+23 −0
Original line number Diff line number Diff line
@@ -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;
+6 −0
Original line number Diff line number Diff line
@@ -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);
+17 −0
Original line number Diff line number Diff line
@@ -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
Loading