Merge "Bubbles ignore gestures when notif expanded" into tm-qpr-dev am: d59f2ed60a am: 9a34bf69ca
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18385992 Change-Id: Ifefe49f3a6e10c93a9652553a9cc21dc7a099d3b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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;
|
||||
@@ -879,6 +880,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;
|
||||
}
|
||||
@@ -1461,6 +1475,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.
|
||||
*/
|
||||
@@ -1836,6 +1862,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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -213,6 +213,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).
|
||||
@@ -285,7 +290,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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -502,7 +502,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
cb.onStateChanged(mCurrentState.mKeyguardShowing,
|
||||
mCurrentState.mKeyguardOccluded,
|
||||
mCurrentState.mBouncerShowing,
|
||||
mCurrentState.mDozing);
|
||||
mCurrentState.mDozing,
|
||||
mCurrentState.mPanelExpanded);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -278,9 +280,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());
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user