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

Commit 398a6713 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Fix bug #7367429 Popup window should get its direction from it Anchor...

Merge "Fix bug #7367429 Popup window should get its direction from it Anchor View if it can" into jb-mr1-dev
parents ba0372db b003e28c
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -317,6 +317,8 @@ public final class ViewRootImpl implements ViewParent,
    private final int mDensity;
    private final int mNoncompatDensity;

    private int mViewLayoutDirectionInitial;

    /**
     * Consistency verifier for debugging purposes.
     */
@@ -465,6 +467,7 @@ public final class ViewRootImpl implements ViewParent,
        synchronized (this) {
            if (mView == null) {
                mView = view;
                mViewLayoutDirectionInitial = mView.getRawLayoutDirection();
                mFallbackEventHandler.setView(view);
                mWindowAttributes.copyFrom(attrs);
                attrs = mWindowAttributes;
@@ -1186,7 +1189,10 @@ public final class ViewRootImpl implements ViewParent,
            viewVisibilityChanged = false;
            mLastConfiguration.setTo(host.getResources().getConfiguration());
            mLastSystemUiVisibility = mAttachInfo.mSystemUiVisibility;
            // Set the layout direction if it has not been set before (inherit is the default)
            if (mViewLayoutDirectionInitial == View.LAYOUT_DIRECTION_INHERIT) {
                host.setLayoutDirection(mLastConfiguration.getLayoutDirection());
            }
            host.dispatchAttachedToWindow(attachInfo, 0);
            mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets);
            host.fitSystemWindows(mFitSystemWindowsInsets);
@@ -2682,7 +2688,8 @@ public final class ViewRootImpl implements ViewParent,
                final int lastLayoutDirection = mLastConfiguration.getLayoutDirection();
                final int currentLayoutDirection = config.getLayoutDirection();
                mLastConfiguration.setTo(config);
                if (lastLayoutDirection != currentLayoutDirection) {
                if (lastLayoutDirection != currentLayoutDirection &&
                        mViewLayoutDirectionInitial == View.LAYOUT_DIRECTION_INHERIT) {
                    mView.setLayoutDirection(currentLayoutDirection);
                }
                mView.dispatchConfigurationChanged(config);
+18 −2
Original line number Diff line number Diff line
@@ -142,6 +142,8 @@ public class PopupWindow {
        };
    private int mAnchorXoff, mAnchorYoff;

    private boolean mPopupViewInitialLayoutDirectionInherited;

    /**
     * <p>Create a new empty, non focusable popup window of dimension (0,0).</p>
     *
@@ -968,6 +970,8 @@ public class PopupWindow {
        } else {
            mPopupView = mContentView;
        }
        mPopupViewInitialLayoutDirectionInherited =
                (mPopupView.getRawLayoutDirection() == View.LAYOUT_DIRECTION_INHERIT);
        mPopupWidth = p.width;
        mPopupHeight = p.height;
    }
@@ -985,9 +989,19 @@ public class PopupWindow {
            p.packageName = mContext.getPackageName();
        }
        mPopupView.setFitsSystemWindows(mLayoutInsetDecor);
        setLayoutDirectionFromAnchor();
        mWindowManager.addView(mPopupView, p);
    }

    private void setLayoutDirectionFromAnchor() {
        if (mAnchor != null) {
            View anchor = mAnchor.get();
            if (anchor != null && mPopupViewInitialLayoutDirectionInherited) {
                mPopupView.setLayoutDirection(anchor.getLayoutDirection());
            }
        }
    }

    /**
     * <p>Generate the layout parameters for the popup window.</p>
     *
@@ -1306,6 +1320,7 @@ public class PopupWindow {
        }

        if (update) {
            setLayoutDirectionFromAnchor();
            mWindowManager.updateViewLayout(mPopupView, p);
        }
    }
@@ -1406,6 +1421,7 @@ public class PopupWindow {
        }

        if (update) {
            setLayoutDirectionFromAnchor();
            mWindowManager.updateViewLayout(mPopupView, p);
        }
    }