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

Commit be69929b authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "Moved PhoneStatusBarView touchHandler out of NPVC" into tm-qpr-dev

parents d088d689 a842c698
Loading
Loading
Loading
Loading
+10 −55
Original line number Diff line number Diff line
@@ -200,7 +200,6 @@ import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -4587,55 +4586,6 @@ public final class NotificationPanelViewController implements Dumpable {
        return new TouchHandler();
    }

    private final PhoneStatusBarView.TouchEventHandler mStatusBarViewTouchEventHandler =
            new PhoneStatusBarView.TouchEventHandler() {
                @Override
                public void onInterceptTouchEvent(MotionEvent event) {
                    mCentralSurfaces.onTouchEvent(event);
                }

                @Override
                public boolean handleTouchEvent(MotionEvent event) {
                    mCentralSurfaces.onTouchEvent(event);

                    // TODO(b/202981994): Move the touch debugging in this method to a central
                    //  location. (Right now, it's split between CentralSurfaces and here.)

                    // If panels aren't enabled, ignore the gesture and don't pass it down to the
                    // panel view.
                    if (!mCommandQueue.panelsEnabled()) {
                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
                            Log.v(
                                    TAG,
                                    String.format(
                                            "onTouchForwardedFromStatusBar: "
                                                    + "panel disabled, ignoring touch at (%d,%d)",
                                            (int) event.getX(),
                                            (int) event.getY()
                                    )
                            );
                        }
                        return false;
                    }

                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        // If the view that would receive the touch is disabled, just have status
                        // bar eat the gesture.
                        if (!mView.isEnabled()) {
                            mShadeLog.logMotionEvent(event,
                                    "onTouchForwardedFromStatusBar: panel view disabled");
                            return true;
                        }
                        if (isFullyCollapsed() && event.getY() < 1f) {
                            // b/235889526 Eat events on the top edge of the phone when collapsed
                            mShadeLog.logMotionEvent(event, "top edge touch ignored");
                            return true;
                        }
                    }
                    return mView.dispatchTouchEvent(event);
                }
            };

    public NotificationStackScrollLayoutController getNotificationStackScrollLayoutController() {
        return mNotificationStackScrollLayoutController;
    }
@@ -5237,6 +5187,11 @@ public final class NotificationPanelViewController implements Dumpable {
        return mView.onInterceptTouchEvent(event);
    }

    /** */
    public boolean sendTouchEventToView(MotionEvent event) {
        return mView.dispatchTouchEvent(event);
    }

    /** */
    public void requestLayoutOnView() {
        mView.requestLayout();
@@ -5247,6 +5202,11 @@ public final class NotificationPanelViewController implements Dumpable {
        ViewGroupFadeHelper.reset(mView);
    }

    /** */
    public boolean isViewEnabled() {
        return mView.isEnabled();
    }

    private void beginJankMonitoring() {
        if (mInteractionJankMonitor == null) {
            return;
@@ -5796,11 +5756,6 @@ public final class NotificationPanelViewController implements Dumpable {
        mCurrentPanelState = state;
    }

    /** Returns the handler that the status bar should forward touches to. */
    public PhoneStatusBarView.TouchEventHandler getStatusBarTouchEventHandler() {
        return mStatusBarViewTouchEventHandler;
    }

    @VisibleForTesting
    StatusBarStateController getStatusBarStateController() {
        return mStatusBarStateController;
+5 −2
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.RemoteAnimationAdapter;
import android.view.View;
import android.view.ViewGroup;
@@ -283,7 +282,11 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn

    void animateCollapseQuickSettings();

    void onTouchEvent(MotionEvent event);
    /** */
    boolean getCommandQueuePanelsEnabled();

    /** */
    int getStatusBarWindowState();

    BiometricUnlockController getBiometricUnlockController();

+6 −36
Original line number Diff line number Diff line
@@ -94,7 +94,6 @@ import android.view.Display;
import android.view.IRemoteAnimationRunner;
import android.view.IWindowManager;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.ThreadedRenderer;
import android.view.View;
import android.view.ViewGroup;
@@ -2031,43 +2030,14 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        }
    }

    /** Called when a touch event occurred on {@link PhoneStatusBarView}. */
    @Override
    public void onTouchEvent(MotionEvent event) {
        // TODO(b/202981994): Move this touch debugging to a central location. (Right now, it's
        //   split between NotificationPanelViewController and here.)
        if (DEBUG_GESTURES) {
            if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
                EventLog.writeEvent(EventLogTags.SYSUI_STATUSBAR_TOUCH,
                        event.getActionMasked(), (int) event.getX(), (int) event.getY(),
                        mDisabled1, mDisabled2);
            }

        }

        if (SPEW) {
            Log.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled1="
                    + mDisabled1 + " mDisabled2=" + mDisabled2);
        } else if (CHATTY) {
            if (event.getAction() != MotionEvent.ACTION_MOVE) {
                Log.d(TAG, String.format(
                            "panel: %s at (%f, %f) mDisabled1=0x%08x mDisabled2=0x%08x",
                            MotionEvent.actionToString(event.getAction()),
                            event.getRawX(), event.getRawY(), mDisabled1, mDisabled2));
            }
        }

        if (DEBUG_GESTURES) {
            mGestureRec.add(event);
    public boolean getCommandQueuePanelsEnabled() {
        return mCommandQueue.panelsEnabled();
    }

        if (mStatusBarWindowState == WINDOW_STATE_SHOWING) {
            final boolean upOrCancel =
                    event.getAction() == MotionEvent.ACTION_UP ||
                    event.getAction() == MotionEvent.ACTION_CANCEL;
            setInteracting(StatusBarManager.WINDOW_STATUS_BAR,
                    !upOrCancel || mShadeController.isExpandedVisible());
        }
    @Override
    public int getStatusBarWindowState() {
        return mStatusBarWindowState;
    }

    @Override
+67 −5
Original line number Diff line number Diff line
@@ -15,14 +15,20 @@
 */
package com.android.systemui.statusbar.phone

import android.app.StatusBarManager.WINDOW_STATE_SHOWING
import android.app.StatusBarManager.WINDOW_STATUS_BAR
import android.content.res.Configuration
import android.graphics.Point
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import com.android.systemui.R
import com.android.systemui.shade.ShadeController
import com.android.systemui.shade.ShadeLogger
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.phone.PhoneStatusBarView.TouchEventHandler
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UNFOLD_STATUS_BAR
@@ -35,14 +41,18 @@ import java.util.Optional
import javax.inject.Inject
import javax.inject.Named

private const val TAG = "PhoneStatusBarViewController"

/** Controller for [PhoneStatusBarView].  */
class PhoneStatusBarViewController private constructor(
    view: PhoneStatusBarView,
    @Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider?,
    private val centralSurfaces: CentralSurfaces,
    private val shadeController: ShadeController,
    private val shadeLogger: ShadeLogger,
    private val moveFromCenterAnimationController: StatusBarMoveFromCenterAnimationController?,
    private val userChipViewModel: StatusBarUserChipViewModel,
    private val viewUtil: ViewUtil,
    touchEventHandler: PhoneStatusBarView.TouchEventHandler,
    private val configurationController: ConfigurationController
) : ViewController<PhoneStatusBarView>(view) {

@@ -90,7 +100,7 @@ class PhoneStatusBarViewController private constructor(
    }

    init {
        mView.setTouchEventHandler(touchEventHandler)
        mView.setTouchEventHandler(PhoneStatusBarViewTouchHandler())
        mView.init(userChipViewModel)
    }

@@ -120,6 +130,54 @@ class PhoneStatusBarViewController private constructor(
        return viewUtil.touchIsWithinView(mView, x, y)
    }

    /** Called when a touch event occurred on {@link PhoneStatusBarView}. */
    fun onTouchEvent(event: MotionEvent) {
        if (centralSurfaces.statusBarWindowState == WINDOW_STATE_SHOWING) {
            val upOrCancel =
                    event.action == MotionEvent.ACTION_UP ||
                    event.action == MotionEvent.ACTION_CANCEL
            centralSurfaces.setInteracting(WINDOW_STATUS_BAR,
                    !upOrCancel || shadeController.isExpandedVisible)
        }
    }

    inner class PhoneStatusBarViewTouchHandler : TouchEventHandler {
        override fun onInterceptTouchEvent(event: MotionEvent) {
            onTouchEvent(event)
        }

        override fun handleTouchEvent(event: MotionEvent): Boolean {
            onTouchEvent(event)

            // If panels aren't enabled, ignore the gesture and don't pass it down to the
            // panel view.
            if (!centralSurfaces.commandQueuePanelsEnabled) {
                if (event.action == MotionEvent.ACTION_DOWN) {
                    Log.v(TAG, String.format("onTouchForwardedFromStatusBar: panel disabled, " +
                            "ignoring touch at (${event.x.toInt()},${event.y.toInt()})"))
                }
                return false
            }

            if (event.action == MotionEvent.ACTION_DOWN) {
                // If the view that would receive the touch is disabled, just have status
                // bar eat the gesture.
                if (!centralSurfaces.notificationPanelViewController.isViewEnabled) {
                    shadeLogger.logMotionEvent(event,
                            "onTouchForwardedFromStatusBar: panel view disabled")
                    return true
                }
                if (centralSurfaces.notificationPanelViewController.isFullyCollapsed &&
                        event.y < 1f) {
                    // b/235889526 Eat events on the top edge of the phone when collapsed
                    shadeLogger.logMotionEvent(event, "top edge touch ignored")
                    return true
                }
            }
            return centralSurfaces.notificationPanelViewController.sendTouchEventToView(event)
        }
    }

    class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
        override fun getViewCenter(view: View, outPoint: Point) =
            when (view.id) {
@@ -157,20 +215,24 @@ class PhoneStatusBarViewController private constructor(
        @Named(UNFOLD_STATUS_BAR)
        private val progressProvider: Optional<ScopedUnfoldTransitionProgressProvider>,
        private val userChipViewModel: StatusBarUserChipViewModel,
        private val centralSurfaces: CentralSurfaces,
        private val shadeController: ShadeController,
        private val shadeLogger: ShadeLogger,
        private val viewUtil: ViewUtil,
        private val configurationController: ConfigurationController,
    ) {
        fun create(
            view: PhoneStatusBarView,
            touchEventHandler: PhoneStatusBarView.TouchEventHandler
            view: PhoneStatusBarView
        ) =
            PhoneStatusBarViewController(
                view,
                progressProvider.getOrNull(),
                centralSurfaces,
                shadeController,
                shadeLogger,
                unfoldComponent.getOrNull()?.getStatusBarMoveFromCenterAnimationController(),
                userChipViewModel,
                viewUtil,
                touchEventHandler,
                configurationController
            )
    }
+2 −5
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.view.View;
import com.android.systemui.R;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.phone.PhoneStatusBarTransitions;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
@@ -127,11 +126,9 @@ public interface StatusBarFragmentModule {
    @StatusBarFragmentScope
    static PhoneStatusBarViewController providePhoneStatusBarViewController(
            PhoneStatusBarViewController.Factory phoneStatusBarViewControllerFactory,
            @RootView PhoneStatusBarView phoneStatusBarView,
            NotificationPanelViewController notificationPanelViewController) {
            @RootView PhoneStatusBarView phoneStatusBarView) {
        return phoneStatusBarViewControllerFactory.create(
                phoneStatusBarView,
                notificationPanelViewController.getStatusBarTouchEventHandler());
                phoneStatusBarView);
    }

    /** */
Loading