Loading packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +10 −10 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis private boolean mIsEnabled; private int mCurrentBoundedUserId = -1; private float mNavBarButtonAlpha; private MotionEvent mStatusBarGestureDownEvent; private boolean mInputFocusTransferStarted; private float mWindowCornerRadius; private boolean mSupportsRoundedCornersOnWindows; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; Loading Loading @@ -164,6 +164,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } } // TODO: change the method signature to use (boolean inputFocusTransferStarted) @Override public void onStatusBarMotionEvent(MotionEvent event) { if (!verifyCaller("onStatusBarMotionEvent")) { Loading @@ -175,16 +176,16 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis mHandler.post(()->{ StatusBar bar = SysUiServiceProvider.getComponent(mContext, StatusBar.class); if (bar != null) { bar.dispatchNotificationsPanelTouchEvent(event); int action = event.getActionMasked(); if (action == ACTION_DOWN) { mStatusBarGestureDownEvent = MotionEvent.obtain(event); mInputFocusTransferStarted = true; } if (action == ACTION_UP || action == ACTION_CANCEL) { mStatusBarGestureDownEvent.recycle(); mStatusBarGestureDownEvent = null; mInputFocusTransferStarted = false; } bar.onInputFocusTransfer(mInputFocusTransferStarted); event.recycle(); } }); Loading Loading @@ -590,14 +591,12 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } public void cleanupAfterDeath() { if (mStatusBarGestureDownEvent != null) { if (mInputFocusTransferStarted) { mHandler.post(()-> { StatusBar bar = SysUiServiceProvider.getComponent(mContext, StatusBar.class); if (bar != null) { mStatusBarGestureDownEvent.setAction(MotionEvent.ACTION_CANCEL); bar.dispatchNotificationsPanelTouchEvent(mStatusBarGestureDownEvent); mStatusBarGestureDownEvent.recycle(); mStatusBarGestureDownEvent = null; mInputFocusTransferStarted = false; bar.onInputFocusTransfer(false); } }); } Loading Loading @@ -782,6 +781,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis pw.println(QuickStepContract.isBackGestureDisabled(mSysUiStateFlags)); pw.print(" assistantGestureDisabled="); pw.println(QuickStepContract.isAssistantGestureDisabled(mSysUiStateFlags)); pw.print(" mInputFocusTransferStarted="); pw.println(mInputFocusTransferStarted); } public interface OverviewProxyListener { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +30 −2 Original line number Diff line number Diff line Loading @@ -290,6 +290,8 @@ public class NotificationPanelView extends PanelView implements private boolean mIsFullWidth; private boolean mBlockingExpansionForCurrentTouch; private boolean mExpectingOpenPanelGesture; /** * Current dark amount that follows regular interpolation curve of animation. */ Loading Loading @@ -1246,6 +1248,28 @@ public class NotificationPanelView extends PanelView implements } } /** * Input focus transfer is about to happen. */ public void startWaitingForOpenPanelGesture() { if (!isFullyCollapsed()) { return; } mExpectingOpenPanelGesture = true; onTrackingStarted(); } /** * Input focus transfer has already happened as this view decided to intercept * very first down event. */ public void stopWaitingForOpenPanelGesture() { if (mExpectingOpenPanelGesture) { mExpectingOpenPanelGesture = false; onTrackingStopped(false); } } @Override protected boolean flingExpands(float vel, float vectorVel, float x, float y) { boolean expands = super.flingExpands(vel, vectorVel, x, y); Loading @@ -1258,8 +1282,12 @@ public class NotificationPanelView extends PanelView implements } @Override protected boolean hasConflictingGestures() { return mBarState != StatusBarState.SHADE; protected boolean shouldGestureWaitForTouchSlop() { if (mExpectingOpenPanelGesture) { mExpectingOpenPanelGesture = false; return false; } return isFullyCollapsed() || mBarState != StatusBarState.SHADE; } @Override Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +2 −2 Original line number Diff line number Diff line Loading @@ -301,7 +301,7 @@ public abstract class PanelView extends FrameLayout { final float y = event.getY(pointerIndex); if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mGestureWaitForTouchSlop = isFullyCollapsed() || hasConflictingGestures(); mGestureWaitForTouchSlop = shouldGestureWaitForTouchSlop(); mIgnoreXTouchSlop = isFullyCollapsed() || shouldGestureIgnoreXTouchSlop(x, y); } Loading Loading @@ -519,7 +519,7 @@ public abstract class PanelView extends FrameLayout { return (int) (mUnlockFalsingThreshold * factor); } protected abstract boolean hasConflictingGestures(); protected abstract boolean shouldGestureWaitForTouchSlop(); protected abstract boolean shouldGestureIgnoreXTouchSlop(float x, float y); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +8 −9 Original line number Diff line number Diff line Loading @@ -1918,19 +1918,18 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarKeyguardViewManager.readyForKeyguardDone(); } public void dispatchNotificationsPanelTouchEvent(MotionEvent ev) { /** * Called when another window is about to transfer it's input focus. */ public void onInputFocusTransfer(boolean start) { if (!mCommandQueue.panelsEnabled()) { return; } mNotificationPanel.dispatchTouchEvent(ev); int action = ev.getAction(); if (action == MotionEvent.ACTION_DOWN) { // Start ignoring all touch events coming to status bar window. // TODO: handle case where ACTION_UP is not sent over the binder mStatusBarWindowController.setNotTouchable(true); } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { mStatusBarWindowController.setNotTouchable(false); if (start) { mNotificationPanel.startWaitingForOpenPanelGesture(); } else { mNotificationPanel.stopWaitingForOpenPanelGesture(); } } Loading Loading
packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +10 −10 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis private boolean mIsEnabled; private int mCurrentBoundedUserId = -1; private float mNavBarButtonAlpha; private MotionEvent mStatusBarGestureDownEvent; private boolean mInputFocusTransferStarted; private float mWindowCornerRadius; private boolean mSupportsRoundedCornersOnWindows; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; Loading Loading @@ -164,6 +164,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } } // TODO: change the method signature to use (boolean inputFocusTransferStarted) @Override public void onStatusBarMotionEvent(MotionEvent event) { if (!verifyCaller("onStatusBarMotionEvent")) { Loading @@ -175,16 +176,16 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis mHandler.post(()->{ StatusBar bar = SysUiServiceProvider.getComponent(mContext, StatusBar.class); if (bar != null) { bar.dispatchNotificationsPanelTouchEvent(event); int action = event.getActionMasked(); if (action == ACTION_DOWN) { mStatusBarGestureDownEvent = MotionEvent.obtain(event); mInputFocusTransferStarted = true; } if (action == ACTION_UP || action == ACTION_CANCEL) { mStatusBarGestureDownEvent.recycle(); mStatusBarGestureDownEvent = null; mInputFocusTransferStarted = false; } bar.onInputFocusTransfer(mInputFocusTransferStarted); event.recycle(); } }); Loading Loading @@ -590,14 +591,12 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } public void cleanupAfterDeath() { if (mStatusBarGestureDownEvent != null) { if (mInputFocusTransferStarted) { mHandler.post(()-> { StatusBar bar = SysUiServiceProvider.getComponent(mContext, StatusBar.class); if (bar != null) { mStatusBarGestureDownEvent.setAction(MotionEvent.ACTION_CANCEL); bar.dispatchNotificationsPanelTouchEvent(mStatusBarGestureDownEvent); mStatusBarGestureDownEvent.recycle(); mStatusBarGestureDownEvent = null; mInputFocusTransferStarted = false; bar.onInputFocusTransfer(false); } }); } Loading Loading @@ -782,6 +781,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis pw.println(QuickStepContract.isBackGestureDisabled(mSysUiStateFlags)); pw.print(" assistantGestureDisabled="); pw.println(QuickStepContract.isAssistantGestureDisabled(mSysUiStateFlags)); pw.print(" mInputFocusTransferStarted="); pw.println(mInputFocusTransferStarted); } public interface OverviewProxyListener { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +30 −2 Original line number Diff line number Diff line Loading @@ -290,6 +290,8 @@ public class NotificationPanelView extends PanelView implements private boolean mIsFullWidth; private boolean mBlockingExpansionForCurrentTouch; private boolean mExpectingOpenPanelGesture; /** * Current dark amount that follows regular interpolation curve of animation. */ Loading Loading @@ -1246,6 +1248,28 @@ public class NotificationPanelView extends PanelView implements } } /** * Input focus transfer is about to happen. */ public void startWaitingForOpenPanelGesture() { if (!isFullyCollapsed()) { return; } mExpectingOpenPanelGesture = true; onTrackingStarted(); } /** * Input focus transfer has already happened as this view decided to intercept * very first down event. */ public void stopWaitingForOpenPanelGesture() { if (mExpectingOpenPanelGesture) { mExpectingOpenPanelGesture = false; onTrackingStopped(false); } } @Override protected boolean flingExpands(float vel, float vectorVel, float x, float y) { boolean expands = super.flingExpands(vel, vectorVel, x, y); Loading @@ -1258,8 +1282,12 @@ public class NotificationPanelView extends PanelView implements } @Override protected boolean hasConflictingGestures() { return mBarState != StatusBarState.SHADE; protected boolean shouldGestureWaitForTouchSlop() { if (mExpectingOpenPanelGesture) { mExpectingOpenPanelGesture = false; return false; } return isFullyCollapsed() || mBarState != StatusBarState.SHADE; } @Override Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +2 −2 Original line number Diff line number Diff line Loading @@ -301,7 +301,7 @@ public abstract class PanelView extends FrameLayout { final float y = event.getY(pointerIndex); if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mGestureWaitForTouchSlop = isFullyCollapsed() || hasConflictingGestures(); mGestureWaitForTouchSlop = shouldGestureWaitForTouchSlop(); mIgnoreXTouchSlop = isFullyCollapsed() || shouldGestureIgnoreXTouchSlop(x, y); } Loading Loading @@ -519,7 +519,7 @@ public abstract class PanelView extends FrameLayout { return (int) (mUnlockFalsingThreshold * factor); } protected abstract boolean hasConflictingGestures(); protected abstract boolean shouldGestureWaitForTouchSlop(); protected abstract boolean shouldGestureIgnoreXTouchSlop(float x, float y); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +8 −9 Original line number Diff line number Diff line Loading @@ -1918,19 +1918,18 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarKeyguardViewManager.readyForKeyguardDone(); } public void dispatchNotificationsPanelTouchEvent(MotionEvent ev) { /** * Called when another window is about to transfer it's input focus. */ public void onInputFocusTransfer(boolean start) { if (!mCommandQueue.panelsEnabled()) { return; } mNotificationPanel.dispatchTouchEvent(ev); int action = ev.getAction(); if (action == MotionEvent.ACTION_DOWN) { // Start ignoring all touch events coming to status bar window. // TODO: handle case where ACTION_UP is not sent over the binder mStatusBarWindowController.setNotTouchable(true); } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { mStatusBarWindowController.setNotTouchable(false); if (start) { mNotificationPanel.startWaitingForOpenPanelGesture(); } else { mNotificationPanel.stopWaitingForOpenPanelGesture(); } } Loading