Remove CentralSurfaces from ShadeController

The methods ShadeController was calling in CentralSurfaces are now
in ShadeController. A small amount of interaction between the two
classes had to remain, but it's now a small interface instead of a
direct dependency on CentralSurfaces. This work is far from done,
but the dependency was removed and atest passed, so it seemed like
a good place to stop and review.

Bug: 249277686
Test: manual and atest
Change-Id: Ide5c6f1964a83073f39323c083ea1ccc281bc8fe
This commit is contained in:
Justin Weir
2022-11-02 09:38:29 -04:00
parent 4f76d7728b
commit 4c9824b2fd
19 changed files with 381 additions and 294 deletions

View File

@@ -135,7 +135,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
mPowerManager.userActivity(SystemClock.uptimeMillis(), true);
}
mActivityTaskManager.stopSystemLockTaskMode();
mShadeController.collapsePanel(false);
mShadeController.collapseShade(false);
if (mTelecomManager != null && mTelecomManager.isInCall()) {
mTelecomManager.showInCallScreen(false);
if (mEmergencyButtonCallback != null) {

View File

@@ -52,6 +52,7 @@ import com.android.internal.util.ScreenshotHelper;
import com.android.systemui.CoreStartable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.recents.Recents;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -183,15 +184,18 @@ public class SystemActions implements CoreStartable {
private final AccessibilityManager mA11yManager;
private final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
private final NotificationShadeWindowController mNotificationShadeController;
private final ShadeController mShadeController;
private final StatusBarWindowCallback mNotificationShadeCallback;
private boolean mDismissNotificationShadeActionRegistered;
@Inject
public SystemActions(Context context,
NotificationShadeWindowController notificationShadeController,
ShadeController shadeController,
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
Optional<Recents> recentsOptional) {
mContext = context;
mShadeController = shadeController;
mRecentsOptional = recentsOptional;
mReceiver = new SystemActionsBroadcastReceiver();
mLocale = mContext.getResources().getConfiguration().getLocales().get(0);
@@ -529,9 +533,7 @@ public class SystemActions implements CoreStartable {
}
private void handleAccessibilityDismissNotificationShade() {
mCentralSurfacesOptionalLazy.get().ifPresent(
centralSurfaces -> centralSurfaces.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_NONE, false /* force */));
mShadeController.animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE);
}
private void handleDpadUp() {

View File

@@ -869,7 +869,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@Override
public void onLaunchAnimationEnd(boolean launchIsFullScreen) {
if (launchIsFullScreen) {
mCentralSurfaces.instantCollapseNotificationPanel();
mShadeController.get().instantCollapseShade();
}
mOccludeAnimationPlaying = false;

View File

@@ -16,6 +16,9 @@
package com.android.systemui.shade;
import android.view.MotionEvent;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -29,31 +32,32 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
*/
public interface ShadeController {
/**
* Make our window larger and the panel expanded
*/
void instantExpandNotificationsPanel();
/** Make our window larger and the shade expanded */
void instantExpandShade();
/** See {@link #animateCollapsePanels(int, boolean)}. */
void animateCollapsePanels();
/** Collapse the shade instantly with no animation. */
void instantCollapseShade();
/** See {@link #animateCollapsePanels(int, boolean)}. */
void animateCollapsePanels(int flags);
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
void animateCollapseShade();
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
void animateCollapseShade(int flags);
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
void animateCollapseShadeForced();
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
void animateCollapseShadeDelayed();
/**
* Collapse the shade animated, showing the bouncer when on {@link StatusBarState#KEYGUARD} or
* dismissing {@link CentralSurfaces} when on {@link StatusBarState#SHADE}.
* dismissing status bar when on {@link StatusBarState#SHADE}.
*/
void animateCollapsePanels(int flags, boolean force);
/** See {@link #animateCollapsePanels(int, boolean)}. */
void animateCollapsePanels(int flags, boolean force, boolean delayed);
/** See {@link #animateCollapsePanels(int, boolean)}. */
void animateCollapsePanels(int flags, boolean force, boolean delayed, float speedUpFactor);
/**
* If the notifications panel is not fully expanded, collapse it animated.
* If the shade is not fully expanded, collapse it animated.
*
* @return Seems to always return false
*/
@@ -77,9 +81,7 @@ public interface ShadeController {
*/
void addPostCollapseAction(Runnable action);
/**
* Run all of the runnables added by {@link #addPostCollapseAction}.
*/
/** Run all of the runnables added by {@link #addPostCollapseAction}. */
void runPostCollapseRunnables();
/**
@@ -87,13 +89,48 @@ public interface ShadeController {
*
* @return true if the shade was open, else false
*/
boolean collapsePanel();
boolean collapseShade();
/**
* If animate is true, does the same as {@link #collapsePanel()}. Otherwise, instantly collapse
* the panel. Post collapse runnables will be executed
* If animate is true, does the same as {@link #collapseShade()}. Otherwise, instantly collapse
* the shade. Post collapse runnables will be executed
*
* @param animate true to animate the collapse, false for instantaneous collapse
*/
void collapsePanel(boolean animate);
void collapseShade(boolean animate);
/** Makes shade expanded but not visible. */
void makeExpandedInvisible();
/** Makes shade expanded and visible. */
void makeExpandedVisible(boolean force);
/** Returns whether the shade is expanded and visible. */
boolean isExpandedVisible();
/** Handle status bar touch event. */
void onStatusBarTouch(MotionEvent event);
/** Sets the listener for when the visibility of the shade changes. */
void setVisibilityListener(ShadeVisibilityListener listener);
/** */
void setNotificationPresenter(NotificationPresenter presenter);
/** */
void setNotificationShadeWindowViewController(
NotificationShadeWindowViewController notificationShadeWindowViewController);
/** */
void setNotificationPanelViewController(
NotificationPanelViewController notificationPanelViewController);
/** Listens for shade visibility changes. */
interface ShadeVisibilityListener {
/** Called when the visibility of the shade changes. */
void visibilityChanged(boolean visible);
/** Called when shade expanded and visible state changed. */
void expandedVisibleChanged(boolean expandedVisible);
}
}

View File

@@ -16,9 +16,12 @@
package com.android.systemui.shade;
import android.content.ComponentCallbacks2;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
@@ -27,11 +30,12 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowController;
import java.util.ArrayList;
import java.util.Optional;
import javax.inject.Inject;
@@ -39,68 +43,81 @@ import dagger.Lazy;
/** An implementation of {@link ShadeController}. */
@SysUISingleton
public class ShadeControllerImpl implements ShadeController {
public final class ShadeControllerImpl implements ShadeController {
private static final String TAG = "ShadeControllerImpl";
private static final boolean SPEW = false;
private final CommandQueue mCommandQueue;
private final StatusBarStateController mStatusBarStateController;
protected final NotificationShadeWindowController mNotificationShadeWindowController;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private final int mDisplayId;
protected final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
private final CommandQueue mCommandQueue;
private final KeyguardStateController mKeyguardStateController;
private final NotificationShadeWindowController mNotificationShadeWindowController;
private final StatusBarStateController mStatusBarStateController;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private final StatusBarWindowController mStatusBarWindowController;
private final Lazy<AssistManager> mAssistManagerLazy;
private final Lazy<NotificationGutsManager> mGutsManager;
private final ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>();
private boolean mExpandedVisible;
private NotificationPanelViewController mNotificationPanelViewController;
private NotificationPresenter mPresenter;
private NotificationShadeWindowViewController mNotificationShadeWindowViewController;
private ShadeVisibilityListener mShadeVisibilityListener;
@Inject
public ShadeControllerImpl(
CommandQueue commandQueue,
KeyguardStateController keyguardStateController,
StatusBarStateController statusBarStateController,
NotificationShadeWindowController notificationShadeWindowController,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
StatusBarWindowController statusBarWindowController,
NotificationShadeWindowController notificationShadeWindowController,
WindowManager windowManager,
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
Lazy<AssistManager> assistManagerLazy
Lazy<AssistManager> assistManagerLazy,
Lazy<NotificationGutsManager> gutsManager
) {
mCommandQueue = commandQueue;
mStatusBarStateController = statusBarStateController;
mStatusBarWindowController = statusBarWindowController;
mGutsManager = gutsManager;
mNotificationShadeWindowController = notificationShadeWindowController;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mDisplayId = windowManager.getDefaultDisplay().getDisplayId();
// TODO: Remove circular reference to CentralSurfaces when possible.
mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
mKeyguardStateController = keyguardStateController;
mAssistManagerLazy = assistManagerLazy;
}
@Override
public void instantExpandNotificationsPanel() {
public void instantExpandShade() {
// Make our window larger and the panel expanded.
getCentralSurfaces().makeExpandedVisible(true /* force */);
getNotificationPanelViewController().expand(false /* animate */);
makeExpandedVisible(true /* force */);
mNotificationPanelViewController.expand(false /* animate */);
mCommandQueue.recomputeDisableFlags(mDisplayId, false /* animate */);
}
@Override
public void animateCollapsePanels() {
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
public void animateCollapseShade() {
animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE);
}
@Override
public void animateCollapsePanels(int flags) {
animateCollapsePanels(flags, false /* force */, false /* delayed */,
1.0f /* speedUpFactor */);
public void animateCollapseShade(int flags) {
animateCollapsePanels(flags, false, false, 1.0f);
}
@Override
public void animateCollapsePanels(int flags, boolean force) {
animateCollapsePanels(flags, force, false /* delayed */, 1.0f /* speedUpFactor */);
public void animateCollapseShadeForced() {
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true, false, 1.0f);
}
@Override
public void animateCollapsePanels(int flags, boolean force, boolean delayed) {
animateCollapsePanels(flags, force, delayed, 1.0f /* speedUpFactor */);
public void animateCollapseShadeDelayed() {
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true, true, 1.0f);
}
@Override
@@ -111,34 +128,26 @@ public class ShadeControllerImpl implements ShadeController {
return;
}
if (SPEW) {
Log.d(TAG, "animateCollapse():"
+ " mExpandedVisible=" + getCentralSurfaces().isExpandedVisible()
+ " flags=" + flags);
Log.d(TAG,
"animateCollapse(): mExpandedVisible=" + mExpandedVisible + "flags=" + flags);
}
// TODO(b/62444020): remove when this bug is fixed
Log.v(TAG, "NotificationShadeWindow: " + getNotificationShadeWindowView()
+ " canPanelBeCollapsed(): "
+ getNotificationPanelViewController().canPanelBeCollapsed());
if (getNotificationShadeWindowView() != null
&& getNotificationPanelViewController().canPanelBeCollapsed()
&& mNotificationPanelViewController.canPanelBeCollapsed()
&& (flags & CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL) == 0) {
// release focus immediately to kick off focus change transition
mNotificationShadeWindowController.setNotificationShadeFocusable(false);
getCentralSurfaces().getNotificationShadeWindowViewController().cancelExpandHelper();
getNotificationPanelViewController()
.collapsePanel(true /* animate */, delayed, speedUpFactor);
mNotificationShadeWindowViewController.cancelExpandHelper();
mNotificationPanelViewController.collapsePanel(true, delayed, speedUpFactor);
}
}
@Override
public boolean closeShadeIfOpen() {
if (!getNotificationPanelViewController().isFullyCollapsed()) {
if (!mNotificationPanelViewController.isFullyCollapsed()) {
mCommandQueue.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */);
getCentralSurfaces().visibilityChanged(false);
notifyVisibilityChanged(false);
mAssistManagerLazy.get().hideAssist();
}
return false;
@@ -146,21 +155,19 @@ public class ShadeControllerImpl implements ShadeController {
@Override
public boolean isShadeOpen() {
NotificationPanelViewController controller =
getNotificationPanelViewController();
return controller.isExpanding() || controller.isFullyExpanded();
return mNotificationPanelViewController.isExpanding()
|| mNotificationPanelViewController.isFullyExpanded();
}
@Override
public void postOnShadeExpanded(Runnable executable) {
getNotificationPanelViewController().addOnGlobalLayoutListener(
mNotificationPanelViewController.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (getCentralSurfaces().getNotificationShadeWindowView()
.isVisibleToUser()) {
getNotificationPanelViewController().removeOnGlobalLayoutListener(this);
getNotificationPanelViewController().postToView(executable);
if (getNotificationShadeWindowView().isVisibleToUser()) {
mNotificationPanelViewController.removeOnGlobalLayoutListener(this);
mNotificationPanelViewController.postToView(executable);
}
}
});
@@ -183,12 +190,11 @@ public class ShadeControllerImpl implements ShadeController {
}
@Override
public boolean collapsePanel() {
if (!getNotificationPanelViewController().isFullyCollapsed()) {
public boolean collapseShade() {
if (!mNotificationPanelViewController.isFullyCollapsed()) {
// close the shade if it was open
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
true /* force */, true /* delayed */);
getCentralSurfaces().visibilityChanged(false);
animateCollapseShadeDelayed();
notifyVisibilityChanged(false);
return true;
} else {
@@ -197,33 +203,131 @@ public class ShadeControllerImpl implements ShadeController {
}
@Override
public void collapsePanel(boolean animate) {
public void collapseShade(boolean animate) {
if (animate) {
boolean willCollapse = collapsePanel();
boolean willCollapse = collapseShade();
if (!willCollapse) {
runPostCollapseRunnables();
}
} else if (!getPresenter().isPresenterFullyCollapsed()) {
getCentralSurfaces().instantCollapseNotificationPanel();
getCentralSurfaces().visibilityChanged(false);
} else if (!mPresenter.isPresenterFullyCollapsed()) {
instantCollapseShade();
notifyVisibilityChanged(false);
} else {
runPostCollapseRunnables();
}
}
private CentralSurfaces getCentralSurfaces() {
return mCentralSurfacesOptionalLazy.get().get();
@Override
public void onStatusBarTouch(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (mExpandedVisible) {
animateCollapseShade();
}
}
}
private NotificationPresenter getPresenter() {
return getCentralSurfaces().getPresenter();
@Override
public void instantCollapseShade() {
mNotificationPanelViewController.instantCollapse();
runPostCollapseRunnables();
}
protected NotificationShadeWindowView getNotificationShadeWindowView() {
return getCentralSurfaces().getNotificationShadeWindowView();
@Override
public void makeExpandedVisible(boolean force) {
if (SPEW) Log.d(TAG, "Make expanded visible: expanded visible=" + mExpandedVisible);
if (!force && (mExpandedVisible || !mCommandQueue.panelsEnabled())) {
return;
}
mExpandedVisible = true;
// Expand the window to encompass the full screen in anticipation of the drag.
// It's only possible to do atomically because the status bar is at the top of the screen!
mNotificationShadeWindowController.setPanelVisible(true);
notifyVisibilityChanged(true);
mCommandQueue.recomputeDisableFlags(mDisplayId, !force /* animate */);
notifyExpandedVisibleChanged(true);
}
private NotificationPanelViewController getNotificationPanelViewController() {
return getCentralSurfaces().getNotificationPanelViewController();
@Override
public void makeExpandedInvisible() {
if (SPEW) Log.d(TAG, "makeExpandedInvisible: mExpandedVisible=" + mExpandedVisible);
if (!mExpandedVisible || getNotificationShadeWindowView() == null) {
return;
}
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
mNotificationPanelViewController.collapsePanel(false, false, 1.0f);
mNotificationPanelViewController.closeQs();
mExpandedVisible = false;
notifyVisibilityChanged(false);
// Update the visibility of notification shade and status bar window.
mNotificationShadeWindowController.setPanelVisible(false);
mStatusBarWindowController.setForceStatusBarVisible(false);
// Close any guts that might be visible
mGutsManager.get().closeAndSaveGuts(
true /* removeLeavebehind */,
true /* force */,
true /* removeControls */,
-1 /* x */,
-1 /* y */,
true /* resetMenu */);
runPostCollapseRunnables();
notifyExpandedVisibleChanged(false);
mCommandQueue.recomputeDisableFlags(
mDisplayId,
mNotificationPanelViewController.hideStatusBarIconsWhenExpanded() /* animate */);
// Trimming will happen later if Keyguard is showing - doing it here might cause a jank in
// the bouncer appear animation.
if (!mKeyguardStateController.isShowing()) {
WindowManagerGlobal.getInstance().trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
}
}
@Override
public boolean isExpandedVisible() {
return mExpandedVisible;
}
@Override
public void setVisibilityListener(ShadeVisibilityListener listener) {
mShadeVisibilityListener = listener;
}
private void notifyVisibilityChanged(boolean visible) {
mShadeVisibilityListener.visibilityChanged(visible);
}
private void notifyExpandedVisibleChanged(boolean expandedVisible) {
mShadeVisibilityListener.expandedVisibleChanged(expandedVisible);
}
@Override
public void setNotificationPresenter(NotificationPresenter presenter) {
mPresenter = presenter;
}
@Override
public void setNotificationShadeWindowViewController(
NotificationShadeWindowViewController controller) {
mNotificationShadeWindowViewController = controller;
}
private NotificationShadeWindowView getNotificationShadeWindowView() {
return mNotificationShadeWindowViewController.getView();
}
@Override
public void setNotificationPanelViewController(
NotificationPanelViewController notificationPanelViewController) {
mNotificationPanelViewController = notificationPanelViewController;
}
}

View File

@@ -54,8 +54,6 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import java.util.Collections;
import javax.inject.Inject;
/**

View File

@@ -154,7 +154,7 @@ public class NotificationConversationInfo extends LinearLayout implements
// If the user selected Priority and the previous selection was not priority, show a
// People Tile add request.
if (mSelectedAction == ACTION_FAVORITE && getPriority() != mSelectedAction) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
mPeopleSpaceWidgetManager.requestPinAppWidget(mShortcutInfo, new Bundle());
}
mGutsContainer.closeControls(v, /* save= */ true);

View File

@@ -4236,7 +4236,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
mShadeNeedsToClose = false;
postDelayed(
() -> {
mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
mShadeController.animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE);
},
DELAY_BEFORE_SHADE_CLOSE /* delayMillis */);
}

View File

@@ -191,8 +191,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn
void animateExpandSettingsPanel(@Nullable String subpanel);
void animateCollapsePanels(int flags, boolean force);
void collapsePanelOnMainThread();
void togglePanel();
@@ -280,8 +278,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn
void postAnimateOpenPanels();
boolean isExpandedVisible();
boolean isPanelExpanded();
void onInputFocusTransfer(boolean start, boolean cancel, float velocity);
@@ -493,12 +489,13 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn
void updateNotificationPanelTouchState();
/**
* TODO(b/257041702) delete this
* @deprecated Use ShadeController#makeExpandedVisible
*/
@Deprecated
void makeExpandedVisible(boolean force);
void instantCollapseNotificationPanel();
void visibilityChanged(boolean visible);
int getDisplayId();
int getRotation();

View File

@@ -209,7 +209,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
public void animateExpandNotificationsPanel() {
if (CentralSurfaces.SPEW) {
Log.d(CentralSurfaces.TAG,
"animateExpand: mExpandedVisible=" + mCentralSurfaces.isExpandedVisible());
"animateExpand: mExpandedVisible=" + mShadeController.isExpandedVisible());
}
if (!mCommandQueue.panelsEnabled()) {
return;
@@ -222,7 +222,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
public void animateExpandSettingsPanel(@Nullable String subPanel) {
if (CentralSurfaces.SPEW) {
Log.d(CentralSurfaces.TAG,
"animateExpand: mExpandedVisible=" + mCentralSurfaces.isExpandedVisible());
"animateExpand: mExpandedVisible=" + mShadeController.isExpandedVisible());
}
if (!mCommandQueue.panelsEnabled()) {
return;
@@ -276,7 +276,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
if ((diff1 & StatusBarManager.DISABLE_EXPAND) != 0) {
if ((state1 & StatusBarManager.DISABLE_EXPAND) != 0) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
}
}
@@ -293,7 +293,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
if ((diff2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) != 0) {
mCentralSurfaces.updateQsExpansionEnabled();
if ((state2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) != 0) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
}
}
@@ -550,7 +550,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
@Override
public void togglePanel() {
if (mCentralSurfaces.isPanelExpanded()) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
} else {
animateExpandNotificationsPanel();
}

View File

@@ -58,7 +58,6 @@ import android.app.WallpaperInfo;
import android.app.WallpaperManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks2;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -421,12 +420,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mCommandQueueCallbacks.animateExpandSettingsPanel(subpanel);
}
/** */
@Override
public void animateCollapsePanels(int flags, boolean force) {
mCommandQueueCallbacks.animateCollapsePanels(flags, force);
}
/** */
@Override
public void togglePanel() {
@@ -510,8 +503,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
private View mReportRejectedTouch;
private boolean mExpandedVisible;
private final NotificationGutsManager mGutsManager;
private final NotificationLogger mNotificationLogger;
private final ShadeExpansionStateManager mShadeExpansionStateManager;
@@ -910,6 +901,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
updateDisplaySize();
mStatusBarHideIconsForBouncerManager.setDisplayId(mDisplayId);
initShadeVisibilityListener();
// start old BaseStatusBar.start().
mWindowManagerService = WindowManagerGlobal.getWindowManagerService();
mDevicePolicyManager = (DevicePolicyManager) mContext.getSystemService(
@@ -1100,6 +1093,25 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
requestTopUi, componentTag))));
}
@VisibleForTesting
void initShadeVisibilityListener() {
mShadeController.setVisibilityListener(new ShadeController.ShadeVisibilityListener() {
@Override
public void visibilityChanged(boolean visible) {
onShadeVisibilityChanged(visible);
}
@Override
public void expandedVisibleChanged(boolean expandedVisible) {
if (expandedVisible) {
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
} else {
onExpandedInvisible();
}
}
});
}
private void onFoldedStateChanged(boolean isFolded, boolean willGoToSleep) {
Trace.beginSection("CentralSurfaces#onFoldedStateChanged");
onFoldedStateChangedInternal(isFolded, willGoToSleep);
@@ -1245,7 +1257,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mNotificationPanelViewController.initDependencies(
this,
this::makeExpandedInvisible,
mShadeController::makeExpandedInvisible,
mNotificationShelfController);
BackDropView backdrop = mNotificationShadeWindowView.findViewById(R.id.backdrop);
@@ -1448,6 +1460,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mRemoteInputManager.addControllerCallback(mNotificationShadeWindowController);
mStackScrollerController.setNotificationActivityStarter(mNotificationActivityStarter);
mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
mShadeController.setNotificationPresenter(mPresenter);
mNotificationsController.initialize(
this,
mPresenter,
@@ -1497,11 +1510,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
return (v, event) -> {
mAutoHideController.checkUserAutoHide(event);
mRemoteInputManager.checkRemoteInputOutside(event);
if (event.getAction() == MotionEvent.ACTION_UP) {
if (mExpandedVisible) {
mShadeController.animateCollapsePanels();
}
}
mShadeController.onStatusBarTouch(event);
return mNotificationShadeWindowView.onTouchEvent(event);
};
}
@@ -1523,6 +1532,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mNotificationShadeWindowViewController.setupExpandedStatusBar();
mNotificationPanelViewController =
mCentralSurfacesComponent.getNotificationPanelViewController();
mShadeController.setNotificationPanelViewController(mNotificationPanelViewController);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mCentralSurfacesComponent.getLockIconViewController().init();
mStackScrollerController =
mCentralSurfacesComponent.getNotificationStackScrollLayoutController();
@@ -1845,7 +1857,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
&& isLaunchForActivity) {
onClosingFinished();
} else {
mShadeController.collapsePanel(true /* animate */);
mShadeController.collapseShade(true /* animate */);
}
}
@@ -1856,7 +1868,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
onClosingFinished();
}
if (launchIsFullScreen) {
instantCollapseNotificationPanel();
mShadeController.instantCollapseShade();
}
}
@@ -1947,34 +1959,14 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
}
@Override
public void makeExpandedVisible(boolean force) {
if (SPEW) Log.d(TAG, "Make expanded visible: expanded visible=" + mExpandedVisible);
if (!force && (mExpandedVisible || !mCommandQueue.panelsEnabled())) {
return;
}
mExpandedVisible = true;
// Expand the window to encompass the full screen in anticipation of the drag.
// This is only possible to do atomically because the status bar is at the top of the screen!
mNotificationShadeWindowController.setPanelVisible(true);
visibilityChanged(true);
mCommandQueue.recomputeDisableFlags(mDisplayId, !force /* animate */);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@Override
public void postAnimateCollapsePanels() {
mMainExecutor.execute(mShadeController::animateCollapsePanels);
mMainExecutor.execute(mShadeController::animateCollapseShade);
}
@Override
public void postAnimateForceCollapsePanels() {
mMainExecutor.execute(
() -> mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE,
true /* force */));
mMainExecutor.execute(mShadeController::animateCollapseShadeForced);
}
@Override
@@ -1982,11 +1974,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mMessageRouter.sendMessage(MSG_OPEN_SETTINGS_PANEL);
}
@Override
public boolean isExpandedVisible() {
return mExpandedVisible;
}
@Override
public boolean isPanelExpanded() {
return mPanelExpanded;
@@ -2016,46 +2003,13 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
}
void makeExpandedInvisible() {
if (SPEW) Log.d(TAG, "makeExpandedInvisible: mExpandedVisible=" + mExpandedVisible);
if (!mExpandedVisible || mNotificationShadeWindowView == null) {
return;
}
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
mNotificationPanelViewController.collapsePanel(/*animate=*/ false, false /* delayed*/,
1.0f /* speedUpFactor */);
mNotificationPanelViewController.closeQs();
mExpandedVisible = false;
visibilityChanged(false);
// Update the visibility of notification shade and status bar window.
mNotificationShadeWindowController.setPanelVisible(false);
mStatusBarWindowController.setForceStatusBarVisible(false);
// Close any guts that might be visible
mGutsManager.closeAndSaveGuts(true /* removeLeavebehind */, true /* force */,
true /* removeControls */, -1 /* x */, -1 /* y */, true /* resetMenu */);
mShadeController.runPostCollapseRunnables();
private void onExpandedInvisible() {
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
if (!mNotificationActivityStarter.isCollapsingToShowActivityOverLockscreen()) {
showBouncerOrLockScreenIfKeyguard();
} else if (DEBUG) {
Log.d(TAG, "Not showing bouncer due to activity showing over lockscreen");
}
mCommandQueue.recomputeDisableFlags(
mDisplayId,
mNotificationPanelViewController.hideStatusBarIconsWhenExpanded() /* animate */);
// Trimming will happen later if Keyguard is showing - doing it here might cause a jank in
// the bouncer appear animation.
if (!mKeyguardStateController.isShowing()) {
WindowManagerGlobal.getInstance().trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
}
}
/** Called when a touch event occurred on {@link PhoneStatusBarView}. */
@@ -2092,7 +2046,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
final boolean upOrCancel =
event.getAction() == MotionEvent.ACTION_UP ||
event.getAction() == MotionEvent.ACTION_CANCEL;
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, !upOrCancel || mExpandedVisible);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR,
!upOrCancel || mShadeController.isExpandedVisible());
}
}
@@ -2241,7 +2196,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal);
synchronized (mQueueLock) {
pw.println("Current Status Bar state:");
pw.println(" mExpandedVisible=" + mExpandedVisible);
pw.println(" mExpandedVisible=" + mShadeController.isExpandedVisible());
pw.println(" mDisplayMetrics=" + mDisplayMetrics);
pw.println(" mStackScroller: " + CentralSurfaces.viewInfo(mStackScroller));
pw.println(" mStackScroller: " + CentralSurfaces.viewInfo(mStackScroller)
@@ -2556,10 +2511,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
}
if (dismissShade) {
if (mExpandedVisible && !mBouncerShowing) {
mShadeController.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
true /* force */, true /* delayed*/);
if (mShadeController.isExpandedVisible() && !mBouncerShowing) {
mShadeController.animateCollapseShadeDelayed();
} else {
// Do it after DismissAction has been processed to conserve the needed
// ordering.
@@ -2601,7 +2554,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
flags |= CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL;
}
}
mShadeController.animateCollapsePanels(flags);
mShadeController.animateCollapseShade(flags);
}
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
if (mNotificationShadeWindowController != null) {
@@ -2716,10 +2669,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
com.android.systemui.R.dimen.physical_power_button_center_screen_location_y));
}
// Visibility reporting
protected void handleVisibleToUserChanged(boolean visibleToUser) {
if (visibleToUser) {
handleVisibleToUserChangedImpl(visibleToUser);
onVisibleToUser();
mNotificationLogger.startNotificationLogging();
if (!mIsBackCallbackRegistered) {
@@ -2736,7 +2688,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
} else {
mNotificationLogger.stopNotificationLogging();
handleVisibleToUserChangedImpl(visibleToUser);
onInvisibleToUser();
if (mIsBackCallbackRegistered) {
ViewRootImpl viewRootImpl = getViewRootImpl();
@@ -2756,41 +2708,38 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
}
// Visibility reporting
void handleVisibleToUserChangedImpl(boolean visibleToUser) {
if (visibleToUser) {
/* The LEDs are turned off when the notification panel is shown, even just a little bit.
* See also CentralSurfaces.setPanelExpanded for another place where we attempt to do
* this.
*/
boolean pinnedHeadsUp = mHeadsUpManager.hasPinnedHeadsUp();
boolean clearNotificationEffects =
!mPresenter.isPresenterFullyCollapsed() &&
(mState == StatusBarState.SHADE
|| mState == StatusBarState.SHADE_LOCKED);
int notificationLoad = mNotificationsController.getActiveNotificationsCount();
if (pinnedHeadsUp && mPresenter.isPresenterFullyCollapsed()) {
notificationLoad = 1;
}
final int finalNotificationLoad = notificationLoad;
mUiBgExecutor.execute(() -> {
try {
mBarService.onPanelRevealed(clearNotificationEffects,
finalNotificationLoad);
} catch (RemoteException ex) {
// Won't fail unless the world has ended.
}
});
} else {
mUiBgExecutor.execute(() -> {
try {
mBarService.onPanelHidden();
} catch (RemoteException ex) {
// Won't fail unless the world has ended.
}
});
void onVisibleToUser() {
/* The LEDs are turned off when the notification panel is shown, even just a little bit.
* See also CentralSurfaces.setPanelExpanded for another place where we attempt to do
* this.
*/
boolean pinnedHeadsUp = mHeadsUpManager.hasPinnedHeadsUp();
boolean clearNotificationEffects =
!mPresenter.isPresenterFullyCollapsed() && (mState == StatusBarState.SHADE
|| mState == StatusBarState.SHADE_LOCKED);
int notificationLoad = mNotificationsController.getActiveNotificationsCount();
if (pinnedHeadsUp && mPresenter.isPresenterFullyCollapsed()) {
notificationLoad = 1;
}
final int finalNotificationLoad = notificationLoad;
mUiBgExecutor.execute(() -> {
try {
mBarService.onPanelRevealed(clearNotificationEffects,
finalNotificationLoad);
} catch (RemoteException ex) {
// Won't fail unless the world has ended.
}
});
}
void onInvisibleToUser() {
mUiBgExecutor.execute(() -> {
try {
mBarService.onPanelHidden();
} catch (RemoteException ex) {
// Won't fail unless the world has ended.
}
});
}
private void logStateToEventlog() {
@@ -2968,7 +2917,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
private void updatePanelExpansionForKeyguard() {
if (mState == StatusBarState.KEYGUARD && mBiometricUnlockController.getMode()
!= BiometricUnlockController.MODE_WAKE_AND_UNLOCK && !mBouncerShowing) {
mShadeController.instantExpandNotificationsPanel();
mShadeController.instantExpandShade();
}
}
@@ -3087,7 +3036,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// too heavy for the CPU and GPU on any device.
mNavigationBarController.disableAnimationsDuringHide(mDisplayId, delay);
} else if (!mNotificationPanelViewController.isCollapsing()) {
instantCollapseNotificationPanel();
mShadeController.instantCollapseShade();
}
// Keyguard state has changed, but QS is not listening anymore. Make sure to update the tile
@@ -3245,8 +3194,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
@Override
public boolean onMenuPressed() {
if (shouldUnlockOnMenuPressed()) {
mShadeController.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL /* flags */, true /* force */);
mShadeController.animateCollapseShadeForced();
return true;
}
return false;
@@ -3291,7 +3239,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
if (mState != StatusBarState.KEYGUARD && mState != StatusBarState.SHADE_LOCKED
&& !isBouncerShowingOverDream()) {
if (mNotificationPanelViewController.canPanelBeCollapsed()) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
}
return true;
}
@@ -3301,8 +3249,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
@Override
public boolean onSpacePressed() {
if (mDeviceInteractive && mState != StatusBarState.SHADE) {
mShadeController.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL /* flags */, true /* force */);
mShadeController.animateCollapseShadeForced();
return true;
}
return false;
@@ -3341,12 +3288,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
}
}
@Override
public void instantCollapseNotificationPanel() {
mNotificationPanelViewController.instantCollapse();
mShadeController.runPostCollapseRunnables();
}
/**
* Collapse the panel directly if we are on the main thread, post the collapsing on the main
* thread if we are not.
@@ -3354,9 +3295,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
@Override
public void collapsePanelOnMainThread() {
if (Looper.getMainLooper().isCurrentThread()) {
mShadeController.collapsePanel();
mShadeController.collapseShade();
} else {
mContext.getMainExecutor().execute(mShadeController::collapsePanel);
mContext.getMainExecutor().execute(mShadeController::collapseShade);
}
}
@@ -3496,7 +3437,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mNotificationShadeWindowViewController.cancelCurrentTouch();
}
if (mPanelExpanded && mState == StatusBarState.SHADE) {
mShadeController.animateCollapsePanels();
mShadeController.animateCollapseShade();
}
}
@@ -3559,7 +3500,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// The unlocked screen off and fold to aod animations might use our LightRevealScrim -
// we need to be expanded for it to be visible.
if (mDozeParameters.shouldShowLightRevealScrim()) {
makeExpandedVisible(true);
mShadeController.makeExpandedVisible(true);
}
DejankUtils.stopDetectingBlockingIpcs(tag);
@@ -3588,7 +3529,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// If we are waking up during the screen off animation, we should undo making the
// expanded visible (we did that so the LightRevealScrim would be visible).
if (mScreenOffAnimationController.shouldHideLightRevealScrimOnWakeUp()) {
makeExpandedInvisible();
mShadeController.makeExpandedInvisible();
}
});
@@ -3643,6 +3584,12 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mNotificationIconAreaController.setAnimationsEnabled(!disabled);
}
//TODO(b/257041702) delete
@Override
public void makeExpandedVisible(boolean force) {
mShadeController.makeExpandedVisible(force);
}
final ScreenLifecycle.Observer mScreenObserver = new ScreenLifecycle.Observer() {
@Override
public void onScreenTurningOn(Runnable onDrawn) {
@@ -3923,8 +3870,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING, 0);
if (BANNER_ACTION_SETUP.equals(action)) {
mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
true /* force */);
mShadeController.animateCollapseShadeForced();
mContext.startActivity(new Intent(Settings.ACTION_APP_NOTIFICATION_REDACTION)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@@ -3986,7 +3932,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
action.run();
}).start();
return collapsePanel ? mShadeController.collapsePanel() : willAnimateOnKeyguard;
return collapsePanel ? mShadeController.collapseShade() : willAnimateOnKeyguard;
}
@Override
@@ -4081,8 +4027,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mMainExecutor.execute(runnable);
}
@Override
public void visibilityChanged(boolean visible) {
private void onShadeVisibilityChanged(boolean visible) {
if (mVisible != visible) {
mVisible = visible;
if (!visible) {

View File

@@ -260,11 +260,11 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
if (showOverLockscreen) {
mShadeController.addPostCollapseAction(runnable);
mShadeController.collapsePanel(true /* animate */);
mShadeController.collapseShade(true /* animate */);
} else if (mKeyguardStateController.isShowing()
&& mCentralSurfaces.isOccluded()) {
mStatusBarKeyguardViewManager.addAfterKeyguardGoneRunnable(runnable);
mShadeController.collapsePanel();
mShadeController.collapseShade();
} else {
runnable.run();
}
@@ -406,7 +406,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
private void expandBubbleStack(NotificationEntry entry) {
mBubblesManagerOptional.get().expandStackAndSelectBubble(entry);
mShadeController.collapsePanel();
mShadeController.collapseShade();
}
private void startNotificationIntent(
@@ -593,9 +593,9 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
private void collapseOnMainThread() {
if (Looper.getMainLooper().isCurrentThread()) {
mShadeController.collapsePanel();
mShadeController.collapseShade();
} else {
mMainThreadHandler.post(mShadeController::collapsePanel);
mMainThreadHandler.post(mShadeController::collapseShade);
}
}
}

View File

@@ -180,7 +180,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
}
};
mShadeController.postOnShadeExpanded(clickPendingViewRunnable);
mShadeController.instantExpandNotificationsPanel();
mShadeController.instantExpandShade();
}
}

View File

@@ -549,7 +549,7 @@ public class BubblesManager {
} catch (RemoteException e) {
Log.e(TAG, e.getMessage());
}
mShadeController.collapsePanel(true);
mShadeController.collapseShade(true);
if (entry.getRow() != null) {
entry.getRow().updateBubbleButton();
}
@@ -597,7 +597,7 @@ public class BubblesManager {
}
if (shouldBubble) {
mShadeController.collapsePanel(true);
mShadeController.collapseShade(true);
if (entry.getRow() != null) {
entry.getRow().updateBubbleButton();
}

View File

@@ -116,13 +116,6 @@ public class CommandQueueTest extends SysuiTestCase {
verify(mCallbacks).animateExpandNotificationsPanel();
}
@Test
public void testCollapsePanels() {
mCommandQueue.animateCollapsePanels();
waitForIdleSync();
verify(mCallbacks).animateCollapsePanels(eq(0), eq(false));
}
@Test
public void testExpandSettings() {
String panel = "some_panel";

View File

@@ -41,7 +41,6 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger;
import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerFake;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import org.junit.Before;

View File

@@ -136,7 +136,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
StatusBarManager.DISABLE2_NOTIFICATION_SHADE, false);
verify(mCentralSurfaces).updateQsExpansionEnabled();
verify(mShadeController).animateCollapsePanels();
verify(mShadeController).animateCollapseShade();
// Trying to open it does nothing.
mSbcqCallbacks.animateExpandNotificationsPanel();
@@ -154,7 +154,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
mSbcqCallbacks.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_NONE,
StatusBarManager.DISABLE2_NONE, false);
verify(mCentralSurfaces).updateQsExpansionEnabled();
verify(mShadeController, never()).animateCollapsePanels();
verify(mShadeController, never()).animateCollapseShade();
// Can now be opened.
mSbcqCallbacks.animateExpandNotificationsPanel();

View File

@@ -392,10 +392,21 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
return null;
}).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
mShadeController = spy(new ShadeControllerImpl(mCommandQueue,
mStatusBarStateController, mNotificationShadeWindowController,
mStatusBarKeyguardViewManager, mContext.getSystemService(WindowManager.class),
() -> Optional.of(mCentralSurfaces), () -> mAssistManager));
mShadeController = spy(new ShadeControllerImpl(
mCommandQueue,
mKeyguardStateController,
mStatusBarStateController,
mStatusBarKeyguardViewManager,
mStatusBarWindowController,
mNotificationShadeWindowController,
mContext.getSystemService(WindowManager.class),
() -> mAssistManager,
() -> mNotificationGutsManager
));
mShadeController.setNotificationPanelViewController(mNotificationPanelViewController);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mShadeController.setNotificationPresenter(mNotificationPresenter);
when(mOperatorNameViewControllerFactory.create(any()))
.thenReturn(mOperatorNameViewController);
@@ -492,6 +503,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
return mViewRootImpl;
}
};
mCentralSurfaces.initShadeVisibilityListener();
when(mViewRootImpl.getOnBackInvokedDispatcher())
.thenReturn(mOnBackInvokedDispatcher);
when(mKeyguardViewMediator.registerCentralSurfaces(
@@ -807,7 +819,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
when(mNotificationPanelViewController.canPanelBeCollapsed()).thenReturn(true);
mOnBackInvokedCallback.getValue().onBackInvoked();
verify(mShadeController).animateCollapsePanels();
verify(mShadeController).animateCollapseShade();
}
@Test
@@ -1030,7 +1042,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
}
@Test
public void collapseShade_callsAnimateCollapsePanels_whenExpanded() {
public void collapseShade_callsanimateCollapseShade_whenExpanded() {
// GIVEN the shade is expanded
mCentralSurfaces.onShadeExpansionFullyChanged(true);
mCentralSurfaces.setBarStateForTest(StatusBarState.SHADE);
@@ -1038,12 +1050,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
// WHEN collapseShade is called
mCentralSurfaces.collapseShade();
// VERIFY that animateCollapsePanels is called
verify(mShadeController).animateCollapsePanels();
// VERIFY that animateCollapseShade is called
verify(mShadeController).animateCollapseShade();
}
@Test
public void collapseShade_doesNotCallAnimateCollapsePanels_whenCollapsed() {
public void collapseShade_doesNotCallanimateCollapseShade_whenCollapsed() {
// GIVEN the shade is collapsed
mCentralSurfaces.onShadeExpansionFullyChanged(false);
mCentralSurfaces.setBarStateForTest(StatusBarState.SHADE);
@@ -1051,12 +1063,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
// WHEN collapseShade is called
mCentralSurfaces.collapseShade();
// VERIFY that animateCollapsePanels is NOT called
verify(mShadeController, never()).animateCollapsePanels();
// VERIFY that animateCollapseShade is NOT called
verify(mShadeController, never()).animateCollapseShade();
}
@Test
public void collapseShadeForBugReport_callsAnimateCollapsePanels_whenFlagDisabled() {
public void collapseShadeForBugReport_callsanimateCollapseShade_whenFlagDisabled() {
// GIVEN the shade is expanded & flag enabled
mCentralSurfaces.onShadeExpansionFullyChanged(true);
mCentralSurfaces.setBarStateForTest(StatusBarState.SHADE);
@@ -1065,12 +1077,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
// WHEN collapseShadeForBugreport is called
mCentralSurfaces.collapseShadeForBugreport();
// VERIFY that animateCollapsePanels is called
verify(mShadeController).animateCollapsePanels();
// VERIFY that animateCollapseShade is called
verify(mShadeController).animateCollapseShade();
}
@Test
public void collapseShadeForBugReport_doesNotCallAnimateCollapsePanels_whenFlagEnabled() {
public void collapseShadeForBugReport_doesNotCallanimateCollapseShade_whenFlagEnabled() {
// GIVEN the shade is expanded & flag enabled
mCentralSurfaces.onShadeExpansionFullyChanged(true);
mCentralSurfaces.setBarStateForTest(StatusBarState.SHADE);
@@ -1079,8 +1091,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
// WHEN collapseShadeForBugreport is called
mCentralSurfaces.collapseShadeForBugreport();
// VERIFY that animateCollapsePanels is called
verify(mShadeController, never()).animateCollapsePanels();
// VERIFY that animateCollapseShade is called
verify(mShadeController, never()).animateCollapseShade();
}
@Test

View File

@@ -263,7 +263,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
while (!runnables.isEmpty()) runnables.remove(0).run();
// Then
verify(mShadeController, atLeastOnce()).collapsePanel();
verify(mShadeController, atLeastOnce()).collapseShade();
verify(mActivityLaunchAnimator).startPendingIntentWithAnimation(any(),
eq(false) /* animate */, any(), any());
@@ -296,7 +296,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
verify(mBubblesManager).expandStackAndSelectBubble(eq(mBubbleNotificationRow.getEntry()));
// This is called regardless, and simply short circuits when there is nothing to do.
verify(mShadeController, atLeastOnce()).collapsePanel();
verify(mShadeController, atLeastOnce()).collapseShade();
verify(mAssistManager).hideAssist();
@@ -329,7 +329,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
// Then
verify(mBubblesManager).expandStackAndSelectBubble(eq(mBubbleNotificationRow.getEntry()));
verify(mShadeController, atLeastOnce()).collapsePanel();
verify(mShadeController, atLeastOnce()).collapseShade();
verify(mAssistManager).hideAssist();
@@ -357,7 +357,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
// Then
verify(mBubblesManager).expandStackAndSelectBubble(mBubbleNotificationRow.getEntry());
verify(mShadeController, atLeastOnce()).collapsePanel();
verify(mShadeController, atLeastOnce()).collapseShade();
verify(mAssistManager).hideAssist();