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

Commit 4617507f authored by Caitlin Cassidy's avatar Caitlin Cassidy Committed by Android (Google) Code Review
Browse files

Merge changes If31a0d78,I3e327a83,I41e1854e into sc-v2-dev

* changes:
  [Status Bar Refactor] Remove some indirection about minFraction between NotificationPanelViewController and PanelBar.
  [Status Bar Refactor] Remove PanelBar#onPanelFullyOpened and instead handle that logic in the listener callback.
  [Status Bar Refactor] Add a PanelStateChangeListener interface and use it in PanelBar#go.
parents 385e7072 4cbf1b63
Loading
Loading
Loading
Loading
+32 −16
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL;
import static com.android.systemui.statusbar.phone.PanelBar.STATE_CLOSED;
import static com.android.systemui.statusbar.phone.PanelBar.STATE_OPEN;
import static com.android.systemui.statusbar.phone.PanelBar.STATE_OPENING;

import static java.lang.Float.isNaN;

@@ -57,7 +60,6 @@ import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.SensorLocationInternal;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
@@ -80,6 +82,7 @@ import android.view.ViewPropertyAnimator;
import android.view.ViewStub;
import android.view.ViewTreeObserver;
import android.view.WindowInsets;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
@@ -1802,15 +1805,6 @@ public class NotificationPanelViewController extends PanelViewController {
        return !mQsTouchAboveFalsingThreshold;
    }

    /**
     * Percentage of panel expansion offset, caused by pulling down on a heads-up.
     */
    @Override
    public void setMinFraction(float minFraction) {
        mMinFraction = minFraction;
        mDepthController.setPanelPullDownMinFraction(mMinFraction);
    }

    private float computeQsExpansionFraction() {
        if (mQSAnimatingHiddenFromCollapsed) {
            // When hiding QS from collapsed state, the expansion can sometimes temporarily
@@ -2232,12 +2226,6 @@ public class NotificationPanelViewController extends PanelViewController {
        updateQSExpansionEnabledAmbient();
    }

    @Override
    public void setIsShadeOpening(boolean opening) {
        mAmbientState.setIsShadeOpening(opening);
        updateQSExpansionEnabledAmbient();
    }

    private void updateQSExpansionEnabledAmbient() {
        final float scrollRangeToTop = mAmbientState.getTopPadding() - mQuickQsOffsetHeight;
        mQsExpansionEnabledAmbient = mShouldUseSplitNotificationShade
@@ -3344,8 +3332,14 @@ public class NotificationPanelViewController extends PanelViewController {
        return mBarState == KEYGUARD;
    }

    /**
     * Sets the minimum fraction for the panel expansion offset. This may be non-zero in certain
     * cases, such as if there's a heads-up notification.
     */
    public void setPanelScrimMinFraction(float minFraction) {
        mBar.onPanelMinFractionChanged(minFraction);
        mMinFraction = minFraction;
        mDepthController.setPanelPullDownMinFraction(mMinFraction);
    }

    public void clearNotificationEffects() {
@@ -4633,4 +4627,26 @@ public class NotificationPanelViewController extends PanelViewController {
            return insets;
        }
    }

    private final PanelBar.PanelStateChangeListener mPanelStateChangeListener =
            new PanelBar.PanelStateChangeListener() {

                @PanelBar.PanelState
                private int mCurrentState = STATE_CLOSED;

                @Override
                public void onStateChanged(@PanelBar.PanelState int state) {
                    mAmbientState.setIsShadeOpening(state == STATE_OPENING);
                    updateQSExpansionEnabledAmbient();

                    if (state == STATE_OPEN && mCurrentState != state) {
                        mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
                    }
                    mCurrentState = state;
                }
            };

    public PanelBar.PanelStateChangeListener getPanelStateChangeListener() {
        return mPanelStateChangeListener;
    }
}
+27 −18
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@
package com.android.systemui.statusbar.phone;

import static java.lang.Float.isNaN;
import static java.lang.annotation.RetentionPolicy.SOURCE;

import android.annotation.CallSuper;
import android.annotation.IntDef;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
@@ -27,6 +28,10 @@ import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;

import androidx.annotation.Nullable;

import java.lang.annotation.Retention;

public abstract class PanelBar extends FrameLayout {
    public static final boolean DEBUG = false;
    public static final String TAG = PanelBar.class.getSimpleName();
@@ -40,24 +45,25 @@ public abstract class PanelBar extends FrameLayout {
        Log.v(TAG, String.format(fmt, args));
    }

    /** Enum for the current state of the panel. */
    @Retention(SOURCE)
    @IntDef({STATE_CLOSED, STATE_OPENING, STATE_OPEN})
    @interface PanelState {}
    public static final int STATE_CLOSED = 0;
    public static final int STATE_OPENING = 1;
    public static final int STATE_OPEN = 2;

    PanelViewController mPanel;
    private PanelViewController mPanel;
    @Nullable private PanelStateChangeListener mPanelStateChangeListener;
    private int mState = STATE_CLOSED;
    private boolean mTracking;

    public void go(int state) {
    private void go(@PanelState int state) {
        if (DEBUG) LOG("go state: %d -> %d", mState, state);
        mState = state;
        if (mPanel != null) {
            mPanel.setIsShadeOpening(state == STATE_OPENING);
        }
        if (mPanelStateChangeListener != null) {
            mPanelStateChangeListener.onStateChanged(state);
        }

    protected boolean isShadeOpening() {
        return mState == STATE_OPENING;
    }

    @Override
@@ -97,6 +103,11 @@ public abstract class PanelBar extends FrameLayout {
        pv.setBar(this);
    }

    /** Sets the listener that will be notified of panel state changes. */
    public void setPanelStateChangeListener(PanelStateChangeListener listener) {
        mPanelStateChangeListener = listener;
    }

    public boolean panelEnabled() {
        return true;
    }
@@ -137,10 +148,7 @@ public abstract class PanelBar extends FrameLayout {
    /**
     * Percentage of panel expansion offset, caused by pulling down on a heads-up.
     */
    @CallSuper
    public void onPanelMinFractionChanged(float minFraction) {
        mPanel.setMinFraction(minFraction);
    }
    abstract void onPanelMinFractionChanged(float minFraction);

    /**
     * @param frac the fraction from the expansion in [0, 1]
@@ -166,7 +174,6 @@ public abstract class PanelBar extends FrameLayout {
        }
        if (fullyOpened && !mTracking) {
            go(STATE_OPEN);
            onPanelFullyOpened();
        } else if (fullyClosed && !mTracking && mState != STATE_CLOSED) {
            go(STATE_CLOSED);
            onPanelCollapsed();
@@ -207,10 +214,6 @@ public abstract class PanelBar extends FrameLayout {
        if (DEBUG) LOG("onPanelCollapsed");
    }

    public void onPanelFullyOpened() {
        if (DEBUG) LOG("onPanelFullyOpened");
    }

    public void onTrackingStarted() {
        mTracking = true;
    }
@@ -226,4 +229,10 @@ public abstract class PanelBar extends FrameLayout {
    public void onClosingFinished() {

    }

    /** An interface that will be notified of panel state changes. */
    public interface PanelStateChangeListener {
        /** Called when the state changes. */
        void onStateChanged(@PanelState int state);
    }
}
+0 −12
Original line number Diff line number Diff line
@@ -342,13 +342,6 @@ public abstract class PanelViewController {

    protected abstract float getOpeningHeight();

    /**
     * Minimum fraction from where expansion should start. This is set when pulling down on a
     * heads-up notification.
     * @param minFraction Fraction from 0 to 1.
     */
    public abstract void setMinFraction(float minFraction);

    /**
     * @return whether the swiping direction is upwards and above a 45 degree angle compared to the
     * horizontal direction
@@ -1171,11 +1164,6 @@ public abstract class PanelViewController {
        return new OnConfigurationChangedListener();
    }

    /**
     * Set that the panel is currently opening and not fully opened or closed.
     */
    public abstract void setIsShadeOpening(boolean opening);

    public class TouchHandler implements View.OnTouchListener {
        public boolean onInterceptTouchEvent(MotionEvent event) {
            if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted
+0 −12
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ public class PhoneStatusBarView extends PanelBar {

    StatusBar mBar;

    boolean mIsFullyOpenedPanel = false;
    private ScrimController mScrimController;
    private float mMinFraction;
    private Runnable mHideExpandedRunnable = new Runnable() {
@@ -216,22 +215,12 @@ public class PhoneStatusBarView extends PanelBar {
        super.onPanelCollapsed();
        // Close the status bar in the next frame so we can show the end of the animation.
        post(mHideExpandedRunnable);
        mIsFullyOpenedPanel = false;
    }

    public void removePendingHideExpandedRunnables() {
        removeCallbacks(mHideExpandedRunnable);
    }

    @Override
    public void onPanelFullyOpened() {
        super.onPanelFullyOpened();
        if (!mIsFullyOpenedPanel) {
            mPanel.getView().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
        }
        mIsFullyOpenedPanel = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean barConsumedEvent = mBar.interceptTouchEvent(event);
@@ -283,7 +272,6 @@ public class PhoneStatusBarView extends PanelBar {
        if (isNaN(minFraction)) {
            throw new IllegalArgumentException("minFraction cannot be NaN");
        }
        super.onPanelMinFractionChanged(minFraction);
        if (mMinFraction != minFraction) {
            mMinFraction = minFraction;
            updateScrimFraction();
+2 −0
Original line number Diff line number Diff line
@@ -1161,6 +1161,8 @@ public class StatusBar extends SystemUI implements
                    mStatusBarView = (PhoneStatusBarView) statusBarFragment.getView();
                    mStatusBarView.setBar(this);
                    mStatusBarView.setPanel(mNotificationPanelViewController);
                    mStatusBarView.setPanelStateChangeListener(
                            mNotificationPanelViewController.getPanelStateChangeListener());
                    mStatusBarView.setScrimController(mScrimController);
                    mStatusBarView.setExpansionChangedListeners(mExpansionChangedListeners);
                    for (ExpansionChangedListener listener : mExpansionChangedListeners) {
Loading