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:
@@ -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) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
|
||||
}
|
||||
};
|
||||
mShadeController.postOnShadeExpanded(clickPendingViewRunnable);
|
||||
mShadeController.instantExpandNotificationsPanel();
|
||||
mShadeController.instantExpandShade();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user