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

Commit 925145ca authored by Mady Mellor's avatar Mady Mellor Committed by android-build-merger
Browse files

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

am: 97d52db8

Change-Id: If650965f0e30c7ba39cae124449e02090a824f32
parents 43c327b4 97d52db8
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;