Merge "Bubbles ignore gestures when notif expanded" into tm-qpr-dev am: d59f2ed60a

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

Change-Id: I0ce8b5021d9758392fdddc6bfef1c05de6158e1b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ats Jenk
2022-05-17 22:01:02 +00:00
committed by Automerger Merge Worker
8 changed files with 82 additions and 12 deletions

View File

@@ -25,6 +25,7 @@ import static android.view.View.VISIBLE;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_GESTURE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.wm.shell.bubbles.BubblePositioner.TASKBAR_POSITION_BOTTOM;
@@ -859,6 +860,19 @@ public class BubbleController {
}
}
private void onNotificationPanelExpandedChanged(boolean expanded) {
if (DEBUG_BUBBLE_GESTURE) {
Log.d(TAG, "onNotificationPanelExpandedChanged: expanded=" + expanded);
}
if (mStackView != null && mStackView.isExpanded()) {
if (expanded) {
mStackView.stopMonitoringSwipeUpGesture();
} else {
mStackView.startMonitoringSwipeUpGesture();
}
}
}
private void setSysuiProxy(Bubbles.SysuiProxy proxy) {
mSysuiProxy = proxy;
}
@@ -1441,6 +1455,18 @@ public class BubbleController {
return mStackView;
}
/**
* Check if notification panel is in an expanded state.
* Makes a call to System UI process and delivers the result via {@code callback} on the
* WM Shell main thread.
*
* @param callback callback that has the result of notification panel expanded state
*/
public void isNotificationPanelExpanded(Consumer<Boolean> callback) {
mSysuiProxy.isNotificationPanelExpand(expanded ->
mMainExecutor.execute(() -> callback.accept(expanded)));
}
/**
* Description of current bubble state.
*/
@@ -1809,6 +1835,12 @@ public class BubbleController {
});
}
@Override
public void onNotificationPanelExpandedChanged(boolean expanded) {
mMainExecutor.execute(
() -> BubbleController.this.onNotificationPanelExpandedChanged(expanded));
}
@Override
public void dump(PrintWriter pw, String[] args) {
try {

View File

@@ -21,6 +21,7 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static com.android.wm.shell.animation.Interpolators.ALPHA_IN;
import static com.android.wm.shell.animation.Interpolators.ALPHA_OUT;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_GESTURE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_STACK_VIEW;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
@@ -1930,11 +1931,13 @@ public class BubbleStackView extends FrameLayout
return;
}
boolean wasExpanded = mIsExpanded;
hideCurrentInputMethod();
mBubbleController.getSysuiProxy().onStackExpandChanged(shouldExpand);
if (mIsExpanded) {
if (wasExpanded) {
stopMonitoringSwipeUpGesture();
if (HOME_GESTURE_ENABLED) {
animateCollapse();
@@ -1949,14 +1952,24 @@ public class BubbleStackView extends FrameLayout
logBubbleEvent(mExpandedBubble,
FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
if (HOME_GESTURE_ENABLED) {
startMonitoringSwipeUpGesture();
mBubbleController.isNotificationPanelExpanded(notifPanelExpanded -> {
if (!notifPanelExpanded && mIsExpanded) {
startMonitoringSwipeUpGesture();
}
});
}
}
notifyExpansionChanged(mExpandedBubble, mIsExpanded);
}
private void startMonitoringSwipeUpGesture() {
stopMonitoringSwipeUpGesture();
/**
* Monitor for swipe up gesture that is used to collapse expanded view
*/
void startMonitoringSwipeUpGesture() {
if (DEBUG_BUBBLE_GESTURE) {
Log.d(TAG, "startMonitoringSwipeUpGesture");
}
stopMonitoringSwipeUpGestureInternal();
if (isGestureNavEnabled()) {
mBubblesNavBarGestureTracker = new BubblesNavBarGestureTracker(mContext, mPositioner);
@@ -1971,7 +1984,17 @@ public class BubbleStackView extends FrameLayout
== WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
}
private void stopMonitoringSwipeUpGesture() {
/**
* Stop monitoring for swipe up gesture
*/
void stopMonitoringSwipeUpGesture() {
if (DEBUG_BUBBLE_GESTURE) {
Log.d(TAG, "stopMonitoringSwipeUpGesture");
}
stopMonitoringSwipeUpGestureInternal();
}
private void stopMonitoringSwipeUpGestureInternal() {
if (mBubblesNavBarGestureTracker != null) {
mBubblesNavBarGestureTracker.stop();
mBubblesNavBarGestureTracker = null;

View File

@@ -212,6 +212,11 @@ public interface Bubbles {
NotificationChannel channel,
int modificationType);
/**
* Called when notification panel is expanded or collapsed
*/
void onNotificationPanelExpandedChanged(boolean expanded);
/**
* Called when the status bar has become visible or invisible (either permanently or
* temporarily).
@@ -277,7 +282,7 @@ public interface Bubbles {
/** Callback to tell SysUi components execute some methods. */
interface SysuiProxy {
void isNotificationShadeExpand(Consumer<Boolean> callback);
void isNotificationPanelExpand(Consumer<Boolean> callback);
void getPendingOrActiveEntry(String key, Consumer<BubbleEntry> callback);

View File

@@ -199,8 +199,9 @@ public class SystemActions extends CoreStartable {
mNotificationShadeController = notificationShadeController;
// Saving in instance variable since to prevent GC since
// NotificationShadeWindowController.registerCallback() only keeps weak references.
mNotificationShadeCallback = (keyguardShowing, keyguardOccluded, bouncerShowing, mDozing) ->
registerOrUnregisterDismissNotificationShadeAction();
mNotificationShadeCallback =
(keyguardShowing, keyguardOccluded, bouncerShowing, mDozing, panelExpanded) ->
registerOrUnregisterDismissNotificationShadeAction();
mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
}

View File

@@ -736,7 +736,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
}
private void onStatusBarStateChanged(boolean keyguardShowing, boolean keyguardOccluded,
boolean bouncerShowing, boolean isDozing) {
boolean bouncerShowing, boolean isDozing, boolean panelExpanded) {
mSysUiState.setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING,
keyguardShowing && !keyguardOccluded)
.setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED,

View File

@@ -502,7 +502,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
cb.onStateChanged(mCurrentState.mKeyguardShowing,
mCurrentState.mKeyguardOccluded,
mCurrentState.mBouncerShowing,
mCurrentState.mDozing);
mCurrentState.mDozing,
mCurrentState.mPanelExpanded);
}
}

View File

@@ -17,5 +17,5 @@ package com.android.systemui.statusbar.phone;
public interface StatusBarWindowCallback {
void onStateChanged(boolean keyguardShowing, boolean keyguardOccluded, boolean bouncerShowing,
boolean isDozing);
boolean isDozing, boolean panelExpanded);
}

View File

@@ -78,6 +78,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -121,6 +122,7 @@ public class BubblesManager implements Dumpable {
private final Bubbles.SysuiProxy mSysuiProxy;
// TODO (b/145659174): allow for multiple callbacks to support the "shadow" new notif pipeline
private final List<NotifCallback> mCallbacks = new ArrayList<>();
private final StatusBarWindowCallback mStatusBarWindowCallback;
/**
* Creates {@link BubblesManager}, returns {@code null} if Optional {@link Bubbles} not present
@@ -273,9 +275,15 @@ public class BubblesManager implements Dumpable {
});
// Store callback in a field so it won't get GC'd
mStatusBarWindowCallback =
(keyguardShowing, keyguardOccluded, bouncerShowing, isDozing, panelExpanded) ->
mBubbles.onNotificationPanelExpandedChanged(panelExpanded);
notificationShadeWindowController.registerCallback(mStatusBarWindowCallback);
mSysuiProxy = new Bubbles.SysuiProxy() {
@Override
public void isNotificationShadeExpand(Consumer<Boolean> callback) {
public void isNotificationPanelExpand(Consumer<Boolean> callback) {
sysuiMainExecutor.execute(() -> {
callback.accept(mNotificationShadeWindowController.getPanelExpanded());
});