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

Commit 5b3f611a authored by Shawn Lee's avatar Shawn Lee Committed by Automerger Merge Worker
Browse files

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

Merge "Moved PhoneStatusBarView touchHandler out of NPVC" into tm-qpr-dev am: be69929b am: 4de42cb5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20487107



Change-Id: I449f6c9946aee9e5efe2ab639e184d4d5dfe4deb
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 2a5d68a7 4de42cb5
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;
@@ -285,7 +284,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
@@ -93,7 +93,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;
@@ -2011,43 +2010,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