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

Commit f8b00cb5 authored by Justin Weir's avatar Justin Weir Committed by Android (Google) Code Review
Browse files

Merge "Merge PanelEventsEmitter into ShadeExpansionStateManager" into tm-qpr-dev

parents 9b45e65e ba0c161e
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -43,7 +43,8 @@ import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.NotifPanelEvents
import com.android.systemui.shade.ShadeStateEvents
import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener
import com.android.systemui.statusbar.CrossFadeHelper
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
@@ -96,7 +97,7 @@ constructor(
    private val dreamOverlayStateController: DreamOverlayStateController,
    configurationController: ConfigurationController,
    wakefulnessLifecycle: WakefulnessLifecycle,
    panelEventsEvents: NotifPanelEvents,
    panelEventsEvents: ShadeStateEvents,
    private val secureSettings: SecureSettings,
    @Main private val handler: Handler,
) {
@@ -534,8 +535,8 @@ constructor(
            mediaHosts.forEach { it?.updateViewVisibility() }
        }

        panelEventsEvents.registerListener(
            object : NotifPanelEvents.Listener {
        panelEventsEvents.addShadeStateEventsListener(
            object : ShadeStateEventsListener {
                override fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {
                    skipQqsOnExpansion = isExpandImmediateEnabled
                    updateDesiredLocation()
+3 −46
Original line number Diff line number Diff line
@@ -135,7 +135,6 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.camera.CameraGestureHelper;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.DisplayId;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.DozeLog;
@@ -231,7 +230,6 @@ import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.util.Compile;
import com.android.systemui.util.LargeScreenUtils;
import com.android.systemui.util.ListenerSet;
import com.android.systemui.util.Utils;
import com.android.systemui.util.time.SystemClock;
import com.android.wm.shell.animation.FlingAnimationUtils;
@@ -372,7 +370,6 @@ public final class NotificationPanelViewController {
    private final TapAgainViewController mTapAgainViewController;
    private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
    private final RecordingController mRecordingController;
    private final PanelEventsEmitter mPanelEventsEmitter;
    private final boolean mVibrateOnOpening;
    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
    private final FlingAnimationUtils mFlingAnimationUtilsClosing;
@@ -880,7 +877,6 @@ public final class NotificationPanelViewController {
            Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider,
            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
            NotificationListContainer notificationListContainer,
            PanelEventsEmitter panelEventsEmitter,
            NotificationStackSizeCalculator notificationStackSizeCalculator,
            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
            ShadeTransitionController shadeTransitionController,
@@ -993,7 +989,6 @@ public final class NotificationPanelViewController {
        mMediaDataManager = mediaDataManager;
        mTapAgainViewController = tapAgainViewController;
        mSysUiState = sysUiState;
        mPanelEventsEmitter = panelEventsEmitter;
        pulseExpansionHandler.setPulseExpandAbortListener(() -> {
            if (mQs != null) {
                mQs.animateHeaderSlidingOut();
@@ -1948,7 +1943,7 @@ public final class NotificationPanelViewController {
    private void setQsExpandImmediate(boolean expandImmediate) {
        if (expandImmediate != mQsExpandImmediate) {
            mQsExpandImmediate = expandImmediate;
            mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate);
            mShadeExpansionStateManager.notifyExpandImmediateChange(expandImmediate);
        }
    }

@@ -3889,7 +3884,7 @@ public final class NotificationPanelViewController {
        boolean wasRunning = mIsLaunchAnimationRunning;
        mIsLaunchAnimationRunning = running;
        if (wasRunning != mIsLaunchAnimationRunning) {
            mPanelEventsEmitter.notifyLaunchingActivityChanged(running);
            mShadeExpansionStateManager.notifyLaunchingActivityChanged(running);
        }
    }

@@ -3898,7 +3893,7 @@ public final class NotificationPanelViewController {
        boolean wasClosing = isClosing();
        mClosing = isClosing;
        if (wasClosing != isClosing) {
            mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing);
            mShadeExpansionStateManager.notifyPanelCollapsingChanged(isClosing);
        }
        mAmbientState.setIsClosing(isClosing);
    }
@@ -5921,44 +5916,6 @@ public final class NotificationPanelViewController {
        }
    }

    @SysUISingleton
    static class PanelEventsEmitter implements NotifPanelEvents {

        private final ListenerSet<Listener> mListeners = new ListenerSet<>();

        @Inject
        PanelEventsEmitter() {
        }

        @Override
        public void registerListener(@androidx.annotation.NonNull @NonNull Listener listener) {
            mListeners.addIfAbsent(listener);
        }

        @Override
        public void unregisterListener(@androidx.annotation.NonNull @NonNull Listener listener) {
            mListeners.remove(listener);
        }

        private void notifyLaunchingActivityChanged(boolean isLaunchingActivity) {
            for (Listener cb : mListeners) {
                cb.onLaunchingActivityChanged(isLaunchingActivity);
            }
        }

        private void notifyPanelCollapsingChanged(boolean isCollapsing) {
            for (NotifPanelEvents.Listener cb : mListeners) {
                cb.onPanelCollapsingChanged(isCollapsing);
            }
        }

        private void notifyExpandImmediateChange(boolean expandImmediateEnabled) {
            for (NotifPanelEvents.Listener cb : mListeners) {
                cb.onExpandImmediateChanged(expandImmediateEnabled);
            }
        }
    }

    /** Handles MotionEvents for the Shade. */
    public final class TouchHandler implements View.OnTouchListener {
        private long mLastTouchDownTime = -1L;
+3 −4
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@ import com.android.systemui.dagger.SysUISingleton;
import dagger.Binds;
import dagger.Module;

/** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */
/** Provides a {@link ShadeStateEvents} in {@link SysUISingleton} scope. */
@Module
public abstract class NotifPanelEventsModule {
public abstract class ShadeEventsModule {
    @Binds
    abstract NotifPanelEvents bindPanelEvents(
            NotificationPanelViewController.PanelEventsEmitter impl);
    abstract ShadeStateEvents bindShadeEvents(ShadeExpansionStateManager impl);
}
+29 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.IntDef
import android.util.Log
import androidx.annotation.FloatRange
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener
import com.android.systemui.util.Compile
import java.util.concurrent.CopyOnWriteArrayList
import javax.inject.Inject
@@ -30,11 +31,12 @@ import javax.inject.Inject
 * TODO(b/200063118): Make this class the one source of truth for the state of panel expansion.
 */
@SysUISingleton
class ShadeExpansionStateManager @Inject constructor() {
class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents {

    private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>()
    private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>()
    private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>()
    private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>()

    @PanelState private var state: Int = STATE_CLOSED
    @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f
@@ -79,6 +81,14 @@ class ShadeExpansionStateManager @Inject constructor() {
        stateListeners.remove(listener)
    }

    override fun addShadeStateEventsListener(listener: ShadeStateEventsListener) {
        shadeStateEventsListeners.addIfAbsent(listener)
    }

    override fun removeShadeStateEventsListener(listener: ShadeStateEventsListener) {
        shadeStateEventsListeners.remove(listener)
    }

    /** Returns true if the panel is currently closed and false otherwise. */
    fun isClosed(): Boolean = state == STATE_CLOSED

@@ -162,6 +172,24 @@ class ShadeExpansionStateManager @Inject constructor() {
        stateListeners.forEach { it.onPanelStateChanged(state) }
    }

    fun notifyLaunchingActivityChanged(isLaunchingActivity: Boolean) {
        for (cb in shadeStateEventsListeners) {
            cb.onLaunchingActivityChanged(isLaunchingActivity)
        }
    }

    fun notifyPanelCollapsingChanged(isCollapsing: Boolean) {
        for (cb in shadeStateEventsListeners) {
            cb.onPanelCollapsingChanged(isCollapsing)
        }
    }

    fun notifyExpandImmediateChange(expandImmediateEnabled: Boolean) {
        for (cb in shadeStateEventsListeners) {
            cb.onExpandImmediateChanged(expandImmediateEnabled)
        }
    }

    private fun debugLog(msg: String) {
        if (!DEBUG) return
        Log.v(TAG, msg)
+10 −13
Original line number Diff line number Diff line
@@ -17,26 +17,24 @@
package com.android.systemui.shade

/** Provides certain notification panel events. */
interface NotifPanelEvents {
interface ShadeStateEvents {

    /** Registers callbacks to be invoked when notification panel events occur. */
    fun registerListener(listener: Listener)
    fun addShadeStateEventsListener(listener: ShadeStateEventsListener)

    /** Unregisters callbacks previously registered via [registerListener]  */
    fun unregisterListener(listener: Listener)
    /** Unregisters callbacks previously registered via [addShadeStateEventsListener] */
    fun removeShadeStateEventsListener(listener: ShadeStateEventsListener)

    /** Callbacks for certain notification panel events. */
    interface Listener {
    interface ShadeStateEventsListener {

        /** Invoked when the notification panel starts or stops collapsing. */
        @JvmDefault
        fun onPanelCollapsingChanged(isCollapsing: Boolean) {}
        @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {}

        /**
         * Invoked when the notification panel starts or stops launching an [android.app.Activity].
         */
        @JvmDefault
        fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {}
        @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {}

        /**
         * Invoked when the "expand immediate" attribute changes.
@@ -47,7 +45,6 @@ interface NotifPanelEvents {
         * Another example is when full QS is showing, and we swipe up from the bottom. Instead of
         * going to QQS, the panel fully collapses.
         */
        @JvmDefault
        fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {}
        @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {}
    }
}
Loading