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

Commit 97d52db8 authored by Mady Mellor's avatar Mady Mellor Committed by Android (Google) Code Review
Browse files

Merge "Fixes issue where the notification menu was not visible after RTL changes" into oc-dev

parents bbc764e8 d9c2232c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -96,4 +96,7 @@ public interface NotificationMenuRowPlugin extends Plugin {
    public default boolean useDefaultMenuItems() {
        return false;
    }

    public default void onConfigurationChanged() {
    }
}
+25 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.animation.ObjectAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Configuration;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.ColorDrawable;
@@ -84,6 +86,11 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
    private static final int COLORED_DIVIDER_ALPHA = 0x7B;
    private static final int MENU_VIEW_INDEX = 0;

    public interface LayoutListener {
        public void onLayout();
    }

    private LayoutListener mLayoutListener;
    private final NotificationInflater mNotificationInflater;
    private int mIconTransformContentShift;
    private int mIconTransformContentShiftNoIcon;
@@ -834,6 +841,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        onNotificationUpdated();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (mMenuRow.getMenuView() != null) {
            mMenuRow.onConfigurationChanged();
        }
    }

    public void setContentBackground(int customBackgroundColor, boolean animate,
            NotificationContentView notificationContentView) {
        if (getShowingLayout() == notificationContentView) {
@@ -1580,6 +1594,14 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        mIsSystemChildExpanded = expanded;
    }

    public void setLayoutListener(LayoutListener listener) {
        mLayoutListener = listener;
    }

    public void removeListener() {
        mLayoutListener = null;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
@@ -1588,6 +1610,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
            mMenuRow.onHeightUpdate();
        }
        updateContentShiftHeight();
        if (mLayoutListener != null) {
            mLayoutListener.onLayout();
        }
    }

    /**
+19 −11
Original line number Diff line number Diff line
@@ -45,7 +45,8 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;

public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener {
public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener,
        ExpandableNotificationRow.LayoutListener {

    private static final boolean DEBUG = false;
    private static final String TAG = "swipe";
@@ -166,6 +167,18 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        createMenuViews();
    }

    @Override
    public void onConfigurationChanged() {
        mParent.setLayoutListener(this);
    }

    @Override
    public void onLayout() {
        mIconsPlaced = false; // Force icons to be re-placed
        setMenuLocation();
        mParent.removeListener();
    }

    private void createMenuViews() {
        // Filter the menu items based on the notification
        if (mParent != null && mParent.getStatusBarNotification() != null) {
@@ -460,22 +473,17 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl

    private void setMenuLocation() {
        boolean showOnLeft = mTranslation > 0;
        if ((mIconsPlaced && showOnLeft == mOnLeft) || mSnapping || mParent == null) {
        if ((mIconsPlaced && showOnLeft == mOnLeft) || mSnapping
                || !mMenuContainer.isAttachedToWindow()) {
            // Do nothing
            return;
        }
        final boolean isRtl = mParent.isLayoutRtl();
        final int count = mMenuContainer.getChildCount();
        final int width = mParent.getWidth();
        for (int i = 0; i < count; i++) {
            final View v = mMenuContainer.getChildAt(i);
            final float left = isRtl
                    ? -(width - mHorizSpaceForIcon * (i + 1))
                    : i * mHorizSpaceForIcon;
            final float right = isRtl
                    ? -i * mHorizSpaceForIcon
                    : width - (mHorizSpaceForIcon * (i + 1));
            v.setTranslationX(showOnLeft ? left : right);
            final float left = i * mHorizSpaceForIcon;
            final float right = mParent.getWidth() - (mHorizSpaceForIcon * (i + 1));
            v.setX(showOnLeft ? left : right);
        }
        mOnLeft = showOnLeft;
        mIconsPlaced = true;