Merge changes from topic "b249277686_shadeCs" into udc-qpr-dev
* changes: Move shade code out of CentralSurfaces Move shade code out of CentralSurfaces
This commit is contained in:
committed by
Android (Google) Code Review
commit
2904a18287
@@ -133,6 +133,9 @@ public interface ActivityStarter {
|
||||
boolean willAnimateOnKeyguard,
|
||||
@Nullable String customMessage);
|
||||
|
||||
/** Whether we should animate an activity launch. */
|
||||
boolean shouldAnimateLaunch(boolean isActivityIntent);
|
||||
|
||||
interface Callback {
|
||||
void onActivityStarted(int resultCode);
|
||||
}
|
||||
|
||||
@@ -485,13 +485,11 @@ public class SystemActions implements CoreStartable {
|
||||
}
|
||||
|
||||
private void handleNotifications() {
|
||||
mCentralSurfacesOptionalLazy.get().ifPresent(
|
||||
CentralSurfaces::animateExpandNotificationsPanel);
|
||||
mShadeController.animateExpandShade();
|
||||
}
|
||||
|
||||
private void handleQuickSettings() {
|
||||
mCentralSurfacesOptionalLazy.get().ifPresent(
|
||||
centralSurfaces -> centralSurfaces.animateExpandSettingsPanel(null));
|
||||
mShadeController.animateExpandQs();
|
||||
}
|
||||
|
||||
private void handlePowerDialog() {
|
||||
|
||||
@@ -125,6 +125,7 @@ import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
|
||||
import com.android.systemui.plugins.GlobalActionsPanelPlugin;
|
||||
import com.android.systemui.scrim.ScrimDrawable;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
@@ -250,6 +251,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
protected Handler mMainHandler;
|
||||
private int mSmallestScreenWidthDp;
|
||||
private final Optional<CentralSurfaces> mCentralSurfacesOptional;
|
||||
private final ShadeController mShadeController;
|
||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
|
||||
@@ -360,6 +362,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
@Main Handler handler,
|
||||
PackageManager packageManager,
|
||||
Optional<CentralSurfaces> centralSurfacesOptional,
|
||||
ShadeController shadeController,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
DialogLaunchAnimator dialogLaunchAnimator) {
|
||||
mContext = context;
|
||||
@@ -392,6 +395,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mMainHandler = handler;
|
||||
mSmallestScreenWidthDp = resources.getConfiguration().smallestScreenWidthDp;
|
||||
mCentralSurfacesOptional = centralSurfacesOptional;
|
||||
mShadeController = shadeController;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
|
||||
@@ -700,7 +704,9 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mAdapter, mOverflowAdapter, mSysuiColorExtractor, mStatusBarService,
|
||||
mLightBarController,
|
||||
mNotificationShadeWindowController, this::onRefresh, mKeyguardShowing,
|
||||
mPowerAdapter, mUiEventLogger, mCentralSurfacesOptional, mKeyguardUpdateMonitor,
|
||||
mPowerAdapter, mUiEventLogger, mCentralSurfacesOptional,
|
||||
mShadeController,
|
||||
mKeyguardUpdateMonitor,
|
||||
mLockPatternUtils);
|
||||
|
||||
dialog.setOnDismissListener(this);
|
||||
@@ -2205,6 +2211,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
private UiEventLogger mUiEventLogger;
|
||||
private GestureDetector mGestureDetector;
|
||||
private Optional<CentralSurfaces> mCentralSurfacesOptional;
|
||||
private final ShadeController mShadeController;
|
||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private LockPatternUtils mLockPatternUtils;
|
||||
private float mWindowDimAmount;
|
||||
@@ -2278,6 +2285,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
Runnable onRefreshCallback, boolean keyguardShowing,
|
||||
MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger,
|
||||
Optional<CentralSurfaces> centralSurfacesOptional,
|
||||
ShadeController shadeController,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
LockPatternUtils lockPatternUtils) {
|
||||
// We set dismissOnDeviceLock to false because we have a custom broadcast receiver to
|
||||
@@ -2295,6 +2303,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mKeyguardShowing = keyguardShowing;
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mCentralSurfacesOptional = centralSurfacesOptional;
|
||||
mShadeController = shadeController;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mLockPatternUtils = lockPatternUtils;
|
||||
mGestureDetector = new GestureDetector(mContext, mGestureListener);
|
||||
@@ -2342,12 +2351,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE);
|
||||
if (mCentralSurfacesOptional.map(CentralSurfaces::isKeyguardShowing).orElse(false)) {
|
||||
// match existing lockscreen behavior to open QS when swiping from status bar
|
||||
mCentralSurfacesOptional.ifPresent(
|
||||
centralSurfaces -> centralSurfaces.animateExpandSettingsPanel(null));
|
||||
mShadeController.animateExpandQs();
|
||||
} else {
|
||||
// otherwise, swiping down should expand notification shade
|
||||
mCentralSurfacesOptional.ifPresent(
|
||||
centralSurfaces -> centralSurfaces.animateExpandNotificationsPanel());
|
||||
mShadeController.animateExpandShade();
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@@ -52,8 +52,8 @@ import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepositor
|
||||
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
|
||||
import com.android.systemui.settings.UserFileManager;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.AutoTileManager;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.tuner.TunerService.Tunable;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
@@ -66,7 +66,6 @@ import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.Predicate;
|
||||
@@ -108,7 +107,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P
|
||||
private AutoTileManager mAutoTiles;
|
||||
private final ArrayList<QSFactory> mQsFactories = new ArrayList<>();
|
||||
private int mCurrentUser;
|
||||
private final Optional<CentralSurfaces> mCentralSurfacesOptional;
|
||||
private final ShadeController mShadeController;
|
||||
private Context mUserContext;
|
||||
private UserTracker mUserTracker;
|
||||
private SecureSettings mSecureSettings;
|
||||
@@ -129,7 +128,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P
|
||||
PluginManager pluginManager,
|
||||
TunerService tunerService,
|
||||
Provider<AutoTileManager> autoTiles,
|
||||
Optional<CentralSurfaces> centralSurfacesOptional,
|
||||
ShadeController shadeController,
|
||||
QSLogger qsLogger,
|
||||
UserTracker userTracker,
|
||||
SecureSettings secureSettings,
|
||||
@@ -148,7 +147,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P
|
||||
mUserFileManager = userFileManager;
|
||||
mFeatureFlags = featureFlags;
|
||||
|
||||
mCentralSurfacesOptional = centralSurfacesOptional;
|
||||
mShadeController = shadeController;
|
||||
|
||||
mQsFactories.add(defaultFactory);
|
||||
pluginManager.addPluginListener(this, QSFactory.class, true);
|
||||
@@ -209,17 +208,17 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P
|
||||
|
||||
@Override
|
||||
public void collapsePanels() {
|
||||
mCentralSurfacesOptional.ifPresent(CentralSurfaces::postAnimateCollapsePanels);
|
||||
mShadeController.postAnimateCollapseShade();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceCollapsePanels() {
|
||||
mCentralSurfacesOptional.ifPresent(CentralSurfaces::postAnimateForceCollapsePanels);
|
||||
mShadeController.postAnimateForceCollapseShade();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openPanels() {
|
||||
mCentralSurfacesOptional.ifPresent(CentralSurfaces::postAnimateOpenPanels);
|
||||
mShadeController.postAnimateExpandQs();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
package com.android.systemui.qs.pipeline.domain.interactor
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces
|
||||
import java.util.Optional
|
||||
import com.android.systemui.shade.ShadeController
|
||||
import javax.inject.Inject
|
||||
|
||||
/** Encapsulates business logic for interacting with the QS panel. */
|
||||
@@ -37,17 +36,17 @@ interface PanelInteractor {
|
||||
class PanelInteractorImpl
|
||||
@Inject
|
||||
constructor(
|
||||
private val centralSurfaces: Optional<CentralSurfaces>,
|
||||
private val shadeController: ShadeController,
|
||||
) : PanelInteractor {
|
||||
override fun collapsePanels() {
|
||||
centralSurfaces.ifPresent { it.postAnimateCollapsePanels() }
|
||||
shadeController.postAnimateCollapseShade()
|
||||
}
|
||||
|
||||
override fun forceCollapsePanels() {
|
||||
centralSurfaces.ifPresent { it.postAnimateForceCollapsePanels() }
|
||||
shadeController.postAnimateForceCollapseShade()
|
||||
}
|
||||
|
||||
override fun openPanels() {
|
||||
centralSurfaces.ifPresent { it.postAnimateOpenPanels() }
|
||||
shadeController.postAnimateExpandQs()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
|
||||
@Override
|
||||
public void toggleNotificationPanel() {
|
||||
verifyCallerAndClearCallingIdentityPostMain("toggleNotificationPanel", () ->
|
||||
mCentralSurfacesOptionalLazy.get().ifPresent(CentralSurfaces::togglePanel));
|
||||
mCommandQueue.togglePanel());
|
||||
}
|
||||
|
||||
private boolean verifyCaller(String reason) {
|
||||
|
||||
@@ -38,23 +38,38 @@ public interface ShadeController {
|
||||
/** Collapse the shade instantly with no animation. */
|
||||
void instantCollapseShade();
|
||||
|
||||
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
|
||||
/** See {@link #animateCollapseShade(int, boolean, boolean, float)}. */
|
||||
void animateCollapseShade();
|
||||
|
||||
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
|
||||
/** See {@link #animateCollapseShade(int, boolean, boolean, float)}. */
|
||||
void animateCollapseShade(int flags);
|
||||
|
||||
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
|
||||
/** See {@link #animateCollapseShade(int, boolean, boolean, float)}. */
|
||||
void animateCollapseShadeForced();
|
||||
|
||||
/** See {@link #animateCollapsePanels(int, boolean, boolean, float)}. */
|
||||
void animateCollapseShadeDelayed();
|
||||
/** See {@link #animateCollapseShade(int, boolean, boolean, float)}. */
|
||||
void animateCollapseShadeForcedDelayed();
|
||||
|
||||
/**
|
||||
* Collapse the shade animated, showing the bouncer when on {@link StatusBarState#KEYGUARD} or
|
||||
* dismissing status bar when on {@link StatusBarState#SHADE}.
|
||||
*/
|
||||
void animateCollapsePanels(int flags, boolean force, boolean delayed, float speedUpFactor);
|
||||
void animateCollapseShade(int flags, boolean force, boolean delayed, float speedUpFactor);
|
||||
|
||||
/** Expand the shade with an animation. */
|
||||
void animateExpandShade();
|
||||
|
||||
/** Expand the shade with quick settings expanded with an animation. */
|
||||
void animateExpandQs();
|
||||
|
||||
/** Posts a request to collapse the shade. */
|
||||
void postAnimateCollapseShade();
|
||||
|
||||
/** Posts a request to force collapse the shade. */
|
||||
void postAnimateForceCollapseShade();
|
||||
|
||||
/** Posts a request to expand the shade to quick settings. */
|
||||
void postAnimateExpandQs();
|
||||
|
||||
/**
|
||||
* If the shade is not fully expanded, collapse it animated.
|
||||
@@ -115,6 +130,9 @@ public interface ShadeController {
|
||||
*/
|
||||
void collapseShade(boolean animate);
|
||||
|
||||
/** Calls #collapseShade if already on the main thread. If not, posts a call to it. */
|
||||
void collapseOnMainThread();
|
||||
|
||||
/** Makes shade expanded but not visible. */
|
||||
void makeExpandedInvisible();
|
||||
|
||||
@@ -127,8 +145,11 @@ public interface ShadeController {
|
||||
/** Handle status bar touch event. */
|
||||
void onStatusBarTouch(MotionEvent event);
|
||||
|
||||
/** Called when the shade finishes collapsing. */
|
||||
void onClosingFinished();
|
||||
/** Called when a launch animation was cancelled. */
|
||||
void onLaunchAnimationCancelled(boolean isLaunchForActivity);
|
||||
|
||||
/** Called when a launch animation ends. */
|
||||
void onLaunchAnimationEnd(boolean launchIsFullScreen);
|
||||
|
||||
/** Sets the listener for when the visibility of the shade changes. */
|
||||
void setVisibilityListener(ShadeVisibilityListener listener);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.systemui.shade;
|
||||
|
||||
import android.content.ComponentCallbacks2;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.ViewTreeObserver;
|
||||
@@ -25,6 +26,7 @@ import android.view.WindowManagerGlobal;
|
||||
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationPresenter;
|
||||
@@ -32,12 +34,14 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.window.StatusBarWindowController;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -51,11 +55,13 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
private final int mDisplayId;
|
||||
|
||||
private final CommandQueue mCommandQueue;
|
||||
private final Executor mMainExecutor;
|
||||
private final KeyguardStateController mKeyguardStateController;
|
||||
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private final StatusBarWindowController mStatusBarWindowController;
|
||||
private final DeviceProvisionedController mDeviceProvisionedController;
|
||||
|
||||
private final Lazy<AssistManager> mAssistManagerLazy;
|
||||
private final Lazy<NotificationGutsManager> mGutsManager;
|
||||
@@ -72,18 +78,22 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
@Inject
|
||||
public ShadeControllerImpl(
|
||||
CommandQueue commandQueue,
|
||||
@Main Executor mainExecutor,
|
||||
KeyguardStateController keyguardStateController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
StatusBarWindowController statusBarWindowController,
|
||||
DeviceProvisionedController deviceProvisionedController,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
WindowManager windowManager,
|
||||
Lazy<AssistManager> assistManagerLazy,
|
||||
Lazy<NotificationGutsManager> gutsManager
|
||||
) {
|
||||
mCommandQueue = commandQueue;
|
||||
mMainExecutor = mainExecutor;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mStatusBarWindowController = statusBarWindowController;
|
||||
mDeviceProvisionedController = deviceProvisionedController;
|
||||
mGutsManager = gutsManager;
|
||||
mNotificationShadeWindowController = notificationShadeWindowController;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
@@ -107,21 +117,21 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
|
||||
@Override
|
||||
public void animateCollapseShade(int flags) {
|
||||
animateCollapsePanels(flags, false, false, 1.0f);
|
||||
animateCollapseShade(flags, false, false, 1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateCollapseShadeForced() {
|
||||
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true, false, 1.0f);
|
||||
animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE, true, false, 1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateCollapseShadeDelayed() {
|
||||
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true, true, 1.0f);
|
||||
public void animateCollapseShadeForcedDelayed() {
|
||||
animateCollapseShade(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true, true, 1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateCollapsePanels(int flags, boolean force, boolean delayed,
|
||||
public void animateCollapseShade(int flags, boolean force, boolean delayed,
|
||||
float speedUpFactor) {
|
||||
if (!force && mStatusBarStateController.getState() != StatusBarState.SHADE) {
|
||||
runPostCollapseRunnables();
|
||||
@@ -142,6 +152,25 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateExpandShade() {
|
||||
if (!mCommandQueue.panelsEnabled()) {
|
||||
return;
|
||||
}
|
||||
mNotificationPanelViewController.expandToNotifications();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateExpandQs() {
|
||||
if (!mCommandQueue.panelsEnabled()) {
|
||||
return;
|
||||
}
|
||||
// Settings are not available in setup
|
||||
if (!mDeviceProvisionedController.isCurrentUserSetup()) return;
|
||||
|
||||
mNotificationPanelViewController.expandToQs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean closeShadeIfOpen() {
|
||||
if (!mNotificationPanelViewController.isFullyCollapsed()) {
|
||||
@@ -167,6 +196,20 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
public boolean isExpandingOrCollapsing() {
|
||||
return mNotificationPanelViewController.isExpandingOrCollapsing();
|
||||
}
|
||||
@Override
|
||||
public void postAnimateCollapseShade() {
|
||||
mMainExecutor.execute(this::animateCollapseShade);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postAnimateForceCollapseShade() {
|
||||
mMainExecutor.execute(this::animateCollapseShadeForced);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postAnimateExpandQs() {
|
||||
mMainExecutor.execute(this::animateExpandQs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postOnShadeExpanded(Runnable executable) {
|
||||
@@ -202,7 +245,7 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
public boolean collapseShade() {
|
||||
if (!mNotificationPanelViewController.isFullyCollapsed()) {
|
||||
// close the shade if it was open
|
||||
animateCollapseShadeDelayed();
|
||||
animateCollapseShadeForcedDelayed();
|
||||
notifyVisibilityChanged(false);
|
||||
|
||||
return true;
|
||||
@@ -226,6 +269,15 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collapseOnMainThread() {
|
||||
if (Looper.getMainLooper().isCurrentThread()) {
|
||||
collapseShade();
|
||||
} else {
|
||||
mMainExecutor.execute(this::collapseShade);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusBarTouch(MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
@@ -235,8 +287,7 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClosingFinished() {
|
||||
private void onClosingFinished() {
|
||||
runPostCollapseRunnables();
|
||||
if (!mPresenter.isPresenterFullyCollapsed()) {
|
||||
// if we set it not to be focusable when collapsing, we have to undo it when we aborted
|
||||
@@ -245,6 +296,27 @@ public final class ShadeControllerImpl implements ShadeController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLaunchAnimationCancelled(boolean isLaunchForActivity) {
|
||||
if (mPresenter.isPresenterFullyCollapsed()
|
||||
&& !mPresenter.isCollapsing()
|
||||
&& isLaunchForActivity) {
|
||||
onClosingFinished();
|
||||
} else {
|
||||
collapseShade(true /* animate */);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLaunchAnimationEnd(boolean launchIsFullScreen) {
|
||||
if (!mPresenter.isCollapsing()) {
|
||||
onClosingFinished();
|
||||
}
|
||||
if (launchIsFullScreen) {
|
||||
instantCollapseShade();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void instantCollapseShade() {
|
||||
mNotificationPanelViewController.instantCollapse();
|
||||
|
||||
@@ -148,7 +148,7 @@ public class ExpandableNotificationRowDragController {
|
||||
private void dismissShade() {
|
||||
// Speed up dismissing the shade since the drag needs to be handled by
|
||||
// the shell layer underneath
|
||||
mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */,
|
||||
mShadeController.animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */,
|
||||
false /* delayed */, 1.1f /* speedUpFactor */);
|
||||
}
|
||||
|
||||
|
||||
@@ -388,6 +388,35 @@ constructor(
|
||||
mainExecutor.executeDelayed(runnable, delay.toLong())
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether we should animate an activity launch.
|
||||
*
|
||||
* Note: This method must be called *before* dismissing the keyguard.
|
||||
*/
|
||||
private fun shouldAnimateLaunch(
|
||||
isActivityIntent: Boolean,
|
||||
showOverLockscreen: Boolean,
|
||||
): Boolean {
|
||||
// TODO(b/184121838): Support launch animations when occluded.
|
||||
if (keyguardStateController.isOccluded) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Always animate if we are not showing the keyguard or if we animate over the lockscreen
|
||||
// (without unlocking it).
|
||||
if (showOverLockscreen || !keyguardStateController.isShowing) {
|
||||
return true
|
||||
}
|
||||
|
||||
// We don't animate non-activity launches as they can break the animation.
|
||||
// TODO(b/184121838): Support non activity launches on the lockscreen.
|
||||
return isActivityIntent
|
||||
}
|
||||
|
||||
override fun shouldAnimateLaunch(isActivityIntent: Boolean): Boolean {
|
||||
return shouldAnimateLaunch(isActivityIntent, false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Encapsulates the activity logic for activity starter.
|
||||
*
|
||||
@@ -419,7 +448,7 @@ constructor(
|
||||
val animate =
|
||||
animationController != null &&
|
||||
!willLaunchResolverActivity &&
|
||||
centralSurfaces?.shouldAnimateLaunch(true /* isActivityIntent */) == true
|
||||
shouldAnimateLaunch(isActivityIntent = true)
|
||||
val animController =
|
||||
wrapAnimationController(
|
||||
animationController = animationController,
|
||||
@@ -538,7 +567,7 @@ constructor(
|
||||
val animate =
|
||||
!willLaunchResolverActivity &&
|
||||
animationController != null &&
|
||||
centralSurfaces?.shouldAnimateLaunch(intent.isActivity) == true
|
||||
shouldAnimateLaunch(intent.isActivity)
|
||||
|
||||
// If we animate, don't collapse the shade and defer the keyguard dismiss (in case we
|
||||
// run the animation on the keyguard). The animation will take care of (instantly)
|
||||
@@ -595,7 +624,7 @@ constructor(
|
||||
Log.w(TAG, "Sending intent failed: $e")
|
||||
if (!collapse) {
|
||||
// executeRunnableDismissingKeyguard did not collapse for us already.
|
||||
centralSurfaces?.collapsePanelOnMainThread()
|
||||
shadeControllerLazy.get().collapseOnMainThread()
|
||||
}
|
||||
// TODO: Dismiss Keyguard.
|
||||
}
|
||||
@@ -637,7 +666,7 @@ constructor(
|
||||
|
||||
val animate =
|
||||
animationController != null &&
|
||||
centralSurfaces?.shouldAnimateLaunch(
|
||||
shouldAnimateLaunch(
|
||||
/* isActivityIntent= */ true,
|
||||
showOverLockscreenWhenLocked
|
||||
) == true
|
||||
@@ -804,7 +833,7 @@ constructor(
|
||||
shadeControllerLazy.get().isExpandedVisible &&
|
||||
!statusBarKeyguardViewManagerLazy.get().isBouncerShowing
|
||||
) {
|
||||
shadeControllerLazy.get().animateCollapseShadeDelayed()
|
||||
shadeControllerLazy.get().animateCollapseShadeForcedDelayed()
|
||||
} else {
|
||||
// Do it after DismissAction has been processed to conserve the
|
||||
// needed ordering.
|
||||
@@ -867,7 +896,8 @@ constructor(
|
||||
if (dismissShade) {
|
||||
return StatusBarLaunchAnimatorController(
|
||||
animationController,
|
||||
it,
|
||||
it.shadeViewController,
|
||||
shadeControllerLazy.get(),
|
||||
notifShadeWindowControllerLazy.get(),
|
||||
isLaunchForActivity
|
||||
)
|
||||
|
||||
@@ -185,14 +185,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner {
|
||||
return contextForUser.getPackageManager();
|
||||
}
|
||||
|
||||
void animateExpandNotificationsPanel();
|
||||
|
||||
void animateExpandSettingsPanel(@Nullable String subpanel);
|
||||
|
||||
void collapsePanelOnMainThread();
|
||||
|
||||
void togglePanel();
|
||||
|
||||
void start();
|
||||
|
||||
boolean updateIsKeyguard();
|
||||
@@ -228,25 +220,10 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner {
|
||||
|
||||
boolean isOccluded();
|
||||
|
||||
//TODO: These can / should probably be moved to NotificationPresenter or ShadeController
|
||||
void onLaunchAnimationCancelled(boolean isLaunchForActivity);
|
||||
|
||||
void onLaunchAnimationEnd(boolean launchIsFullScreen);
|
||||
|
||||
boolean shouldAnimateLaunch(boolean isActivityIntent, boolean showOverLockscreen);
|
||||
|
||||
boolean shouldAnimateLaunch(boolean isActivityIntent);
|
||||
|
||||
boolean isDeviceInVrMode();
|
||||
|
||||
NotificationPresenter getPresenter();
|
||||
|
||||
void postAnimateCollapsePanels();
|
||||
|
||||
void postAnimateForceCollapsePanels();
|
||||
|
||||
void postAnimateOpenPanels();
|
||||
|
||||
boolean isPanelExpanded();
|
||||
|
||||
/**
|
||||
@@ -264,8 +241,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner {
|
||||
*/
|
||||
default void onStatusBarTrackpadEvent(MotionEvent event) {}
|
||||
|
||||
void animateCollapseQuickSettings();
|
||||
|
||||
/** */
|
||||
boolean getCommandQueuePanelsEnabled();
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
|
||||
|
||||
@Override
|
||||
public void animateCollapsePanels(int flags, boolean force) {
|
||||
mShadeController.animateCollapsePanels(flags, force, false /* delayed */,
|
||||
mShadeController.animateCollapseShade(flags, force, false /* delayed */,
|
||||
1.0f /* speedUpFactor */);
|
||||
}
|
||||
|
||||
@@ -218,11 +218,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
|
||||
Log.d(CentralSurfaces.TAG,
|
||||
"animateExpand: mExpandedVisible=" + mShadeController.isExpandedVisible());
|
||||
}
|
||||
if (!mCommandQueue.panelsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mShadeViewController.expandToNotifications();
|
||||
mShadeController.animateExpandShade();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -231,14 +227,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
|
||||
Log.d(CentralSurfaces.TAG,
|
||||
"animateExpand: mExpandedVisible=" + mShadeController.isExpandedVisible());
|
||||
}
|
||||
if (!mCommandQueue.panelsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Settings are not available in setup
|
||||
if (!mDeviceProvisionedController.isCurrentUserSetup()) return;
|
||||
|
||||
mShadeViewController.expandToQs();
|
||||
mShadeController.animateExpandQs();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -559,7 +548,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
|
||||
if (mCentralSurfaces.isPanelExpanded()) {
|
||||
mShadeController.animateCollapseShade();
|
||||
} else {
|
||||
animateExpandNotificationsPanel();
|
||||
mShadeController.animateExpandShade();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,6 @@ import android.net.Uri;
|
||||
import android.os.Binder;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
@@ -411,24 +410,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
return mQSPanelController;
|
||||
}
|
||||
|
||||
/** */
|
||||
@Override
|
||||
public void animateExpandNotificationsPanel() {
|
||||
mCommandQueueCallbacks.animateExpandNotificationsPanel();
|
||||
}
|
||||
|
||||
/** */
|
||||
@Override
|
||||
public void animateExpandSettingsPanel(@Nullable String subpanel) {
|
||||
mCommandQueueCallbacks.animateExpandSettingsPanel(subpanel);
|
||||
}
|
||||
|
||||
/** */
|
||||
@Override
|
||||
public void togglePanel() {
|
||||
mCommandQueueCallbacks.togglePanel();
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link StatusBarState} of the status bar.
|
||||
*/
|
||||
@@ -1822,58 +1803,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
return mKeyguardStateController.isOccluded();
|
||||
}
|
||||
|
||||
/** A launch animation was cancelled. */
|
||||
//TODO: These can / should probably be moved to NotificationPresenter or ShadeController
|
||||
@Override
|
||||
public void onLaunchAnimationCancelled(boolean isLaunchForActivity) {
|
||||
if (mPresenter.isPresenterFullyCollapsed() && !mPresenter.isCollapsing()
|
||||
&& isLaunchForActivity) {
|
||||
mShadeController.onClosingFinished();
|
||||
} else {
|
||||
mShadeController.collapseShade(true /* animate */);
|
||||
}
|
||||
}
|
||||
|
||||
/** A launch animation ended. */
|
||||
@Override
|
||||
public void onLaunchAnimationEnd(boolean launchIsFullScreen) {
|
||||
if (!mPresenter.isCollapsing()) {
|
||||
mShadeController.onClosingFinished();
|
||||
}
|
||||
if (launchIsFullScreen) {
|
||||
mShadeController.instantCollapseShade();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether we should animate an activity launch.
|
||||
*
|
||||
* Note: This method must be called *before* dismissing the keyguard.
|
||||
*/
|
||||
@Override
|
||||
public boolean shouldAnimateLaunch(boolean isActivityIntent, boolean showOverLockscreen) {
|
||||
// TODO(b/184121838): Support launch animations when occluded.
|
||||
if (isOccluded()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Always animate if we are not showing the keyguard or if we animate over the lockscreen
|
||||
// (without unlocking it).
|
||||
if (showOverLockscreen || !mKeyguardStateController.isShowing()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// We don't animate non-activity launches as they can break the animation.
|
||||
// TODO(b/184121838): Support non activity launches on the lockscreen.
|
||||
return isActivityIntent;
|
||||
}
|
||||
|
||||
/** Whether we should animate an activity launch. */
|
||||
@Override
|
||||
public boolean shouldAnimateLaunch(boolean isActivityIntent) {
|
||||
return shouldAnimateLaunch(isActivityIntent, false /* showOverLockscreen */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeviceInVrMode() {
|
||||
return mPresenter.isDeviceInVrMode();
|
||||
@@ -1929,21 +1858,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postAnimateCollapsePanels() {
|
||||
mMainExecutor.execute(mShadeController::animateCollapseShade);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postAnimateForceCollapsePanels() {
|
||||
mMainExecutor.execute(mShadeController::animateCollapseShadeForced);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postAnimateOpenPanels() {
|
||||
mMessageRouter.sendMessage(MSG_OPEN_SETTINGS_PANEL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPanelExpanded() {
|
||||
return mPanelExpanded;
|
||||
@@ -1970,14 +1884,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
mCentralSurfacesComponent.getNotificationPanelViewController().handleExternalTouch(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateCollapseQuickSettings() {
|
||||
if (mState == StatusBarState.SHADE) {
|
||||
mShadeSurface.collapse(
|
||||
true, false /* delayed */, 1.0f /* speedUpFactor */);
|
||||
}
|
||||
}
|
||||
|
||||
private void onExpandedInvisible() {
|
||||
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
|
||||
if (!mNotificationActivityStarter.isCollapsingToShowActivityOverLockscreen()) {
|
||||
@@ -2956,19 +2862,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Collapse the panel directly if we are on the main thread, post the collapsing on the main
|
||||
* thread if we are not.
|
||||
*/
|
||||
@Override
|
||||
public void collapsePanelOnMainThread() {
|
||||
if (Looper.getMainLooper().isCurrentThread()) {
|
||||
mShadeController.collapseShade();
|
||||
} else {
|
||||
mContext.getMainExecutor().execute(mShadeController::collapseShade);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the light reveal effect to reflect the reason we're waking or sleeping (for example,
|
||||
* from the power button).
|
||||
@@ -3768,8 +3661,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
||||
|
||||
if (userSetup != mUserSetup) {
|
||||
mUserSetup = userSetup;
|
||||
if (!mUserSetup) {
|
||||
animateCollapseQuickSettings();
|
||||
if (!mUserSetup && mState == StatusBarState.SHADE) {
|
||||
mShadeSurface.collapse(true /* animate */, false /* delayed */,
|
||||
1.0f /* speedUpFactor */);
|
||||
}
|
||||
updateQsExpansionEnabled();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.android.systemui.statusbar.phone
|
||||
import android.view.View
|
||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
||||
import com.android.systemui.animation.LaunchAnimator
|
||||
import com.android.systemui.shade.ShadeController
|
||||
import com.android.systemui.shade.ShadeViewController
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController
|
||||
|
||||
/**
|
||||
@@ -11,7 +13,8 @@ import com.android.systemui.statusbar.NotificationShadeWindowController
|
||||
*/
|
||||
class StatusBarLaunchAnimatorController(
|
||||
private val delegate: ActivityLaunchAnimator.Controller,
|
||||
private val centralSurfaces: CentralSurfaces,
|
||||
private val shadeViewController: ShadeViewController,
|
||||
private val shadeController: ShadeController,
|
||||
private val notificationShadeWindowController: NotificationShadeWindowController,
|
||||
private val isLaunchForActivity: Boolean = true
|
||||
) : ActivityLaunchAnimator.Controller by delegate {
|
||||
@@ -23,25 +26,25 @@ class StatusBarLaunchAnimatorController(
|
||||
override fun onIntentStarted(willAnimate: Boolean) {
|
||||
delegate.onIntentStarted(willAnimate)
|
||||
if (willAnimate) {
|
||||
centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(true)
|
||||
shadeViewController.setIsLaunchAnimationRunning(true)
|
||||
} else {
|
||||
centralSurfaces.collapsePanelOnMainThread()
|
||||
shadeController.collapseOnMainThread()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
|
||||
delegate.onLaunchAnimationStart(isExpandingFullyAbove)
|
||||
centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(true)
|
||||
shadeViewController.setIsLaunchAnimationRunning(true)
|
||||
if (!isExpandingFullyAbove) {
|
||||
centralSurfaces.shadeViewController.collapseWithDuration(
|
||||
shadeViewController.collapseWithDuration(
|
||||
ActivityLaunchAnimator.TIMINGS.totalDuration.toInt())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
|
||||
delegate.onLaunchAnimationEnd(isExpandingFullyAbove)
|
||||
centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(false)
|
||||
centralSurfaces.onLaunchAnimationEnd(isExpandingFullyAbove)
|
||||
shadeViewController.setIsLaunchAnimationRunning(false)
|
||||
shadeController.onLaunchAnimationEnd(isExpandingFullyAbove)
|
||||
}
|
||||
|
||||
override fun onLaunchAnimationProgress(
|
||||
@@ -50,12 +53,12 @@ class StatusBarLaunchAnimatorController(
|
||||
linearProgress: Float
|
||||
) {
|
||||
delegate.onLaunchAnimationProgress(state, progress, linearProgress)
|
||||
centralSurfaces.shadeViewController.applyLaunchAnimationProgress(linearProgress)
|
||||
shadeViewController.applyLaunchAnimationProgress(linearProgress)
|
||||
}
|
||||
|
||||
override fun onLaunchAnimationCancelled(newKeyguardOccludedState: Boolean?) {
|
||||
delegate.onLaunchAnimationCancelled()
|
||||
centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(false)
|
||||
centralSurfaces.onLaunchAnimationCancelled(isLaunchForActivity)
|
||||
shadeViewController.setIsLaunchAnimationRunning(false)
|
||||
shadeController.onLaunchAnimationCancelled(isLaunchForActivity)
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
|
||||
private final CentralSurfaces mCentralSurfaces;
|
||||
private final NotificationPresenter mPresenter;
|
||||
private final ShadeViewController mNotificationPanel;
|
||||
private final ShadeViewController mShadeViewController;
|
||||
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
private final ActivityLaunchAnimator mActivityLaunchAnimator;
|
||||
private final NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider;
|
||||
@@ -158,7 +158,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
OnUserInteractionCallback onUserInteractionCallback,
|
||||
CentralSurfaces centralSurfaces,
|
||||
NotificationPresenter presenter,
|
||||
ShadeViewController panel,
|
||||
ShadeViewController shadeViewController,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
ActivityLaunchAnimator activityLaunchAnimator,
|
||||
NotificationLaunchAnimatorControllerProvider notificationAnimationProvider,
|
||||
@@ -193,7 +193,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
// TODO: use KeyguardStateController#isOccluded to remove this dependency
|
||||
mCentralSurfaces = centralSurfaces;
|
||||
mPresenter = presenter;
|
||||
mNotificationPanel = panel;
|
||||
mShadeViewController = shadeViewController;
|
||||
mActivityLaunchAnimator = activityLaunchAnimator;
|
||||
mNotificationAnimationProvider = notificationAnimationProvider;
|
||||
mUserTracker = userTracker;
|
||||
@@ -237,7 +237,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
&& mActivityIntentHelper.wouldPendingLaunchResolverActivity(intent,
|
||||
mLockscreenUserManager.getCurrentUserId());
|
||||
final boolean animate = !willLaunchResolverActivity
|
||||
&& mCentralSurfaces.shouldAnimateLaunch(isActivityIntent);
|
||||
&& mActivityStarter.shouldAnimateLaunch(isActivityIntent);
|
||||
boolean showOverLockscreen = mKeyguardStateController.isShowing() && intent != null
|
||||
&& mActivityIntentHelper.wouldPendingShowOverLockscreen(intent,
|
||||
mLockscreenUserManager.getCurrentUserId());
|
||||
@@ -288,7 +288,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
}
|
||||
|
||||
// Always defer the keyguard dismiss when animating.
|
||||
return animate || !mNotificationPanel.isFullyCollapsed();
|
||||
return animate || !mShadeViewController.isFullyCollapsed();
|
||||
}
|
||||
|
||||
private void handleNotificationClickAfterPanelCollapsed(
|
||||
@@ -323,7 +323,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
removeHunAfterClick(row);
|
||||
// Show work challenge, do not run PendingIntent and
|
||||
// remove notification
|
||||
collapseOnMainThread();
|
||||
mShadeController.collapseOnMainThread();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -440,7 +440,8 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
ActivityLaunchAnimator.Controller animationController =
|
||||
new StatusBarLaunchAnimatorController(
|
||||
mNotificationAnimationProvider.getAnimatorController(row, null),
|
||||
mCentralSurfaces,
|
||||
mShadeViewController,
|
||||
mShadeController,
|
||||
mNotificationShadeWindowController,
|
||||
isActivityIntent);
|
||||
mActivityLaunchAnimator.startPendingIntentWithAnimation(
|
||||
@@ -472,7 +473,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
@Override
|
||||
public void startNotificationGutsIntent(final Intent intent, final int appUid,
|
||||
ExpandableNotificationRow row) {
|
||||
boolean animate = mCentralSurfaces.shouldAnimateLaunch(true /* isActivityIntent */);
|
||||
boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
|
||||
ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
|
||||
@Override
|
||||
public boolean onDismiss() {
|
||||
@@ -480,7 +481,8 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
ActivityLaunchAnimator.Controller animationController =
|
||||
new StatusBarLaunchAnimatorController(
|
||||
mNotificationAnimationProvider.getAnimatorController(row),
|
||||
mCentralSurfaces,
|
||||
mShadeViewController,
|
||||
mShadeController,
|
||||
mNotificationShadeWindowController,
|
||||
true /* isActivityIntent */);
|
||||
|
||||
@@ -507,7 +509,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
|
||||
@Override
|
||||
public void startHistoryIntent(View view, boolean showHistory) {
|
||||
boolean animate = mCentralSurfaces.shouldAnimateLaunch(true /* isActivityIntent */);
|
||||
boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
|
||||
ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
|
||||
@Override
|
||||
public boolean onDismiss() {
|
||||
@@ -529,7 +531,8 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
viewController == null ? null
|
||||
: new StatusBarLaunchAnimatorController(
|
||||
viewController,
|
||||
mCentralSurfaces,
|
||||
mShadeViewController,
|
||||
mShadeController,
|
||||
mNotificationShadeWindowController,
|
||||
true /* isActivityIntent */);
|
||||
|
||||
@@ -630,11 +633,4 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
|
||||
return true;
|
||||
}
|
||||
|
||||
private void collapseOnMainThread() {
|
||||
if (Looper.getMainLooper().isCurrentThread()) {
|
||||
mShadeController.collapseShade();
|
||||
} else {
|
||||
mMainThreadHandler.post(mShadeController::collapseShade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.GlobalActions;
|
||||
import com.android.systemui.settings.UserContextProvider;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
@@ -128,6 +129,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
@Mock private UserContextProvider mUserContextProvider;
|
||||
@Mock private VibratorHelper mVibratorHelper;
|
||||
@Mock private CentralSurfaces mCentralSurfaces;
|
||||
@Mock private ShadeController mShadeController;
|
||||
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock private DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
@Mock private OnBackInvokedDispatcher mOnBackInvokedDispatcher;
|
||||
@@ -177,6 +179,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
mHandler,
|
||||
mPackageManager,
|
||||
Optional.of(mCentralSurfaces),
|
||||
mShadeController,
|
||||
mKeyguardUpdateMonitor,
|
||||
mDialogLaunchAnimator);
|
||||
mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();
|
||||
@@ -317,7 +320,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
MotionEvent end = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 500, 0);
|
||||
gestureListener.onFling(start, end, 0, 1000);
|
||||
verifyLogPosted(GlobalActionsDialogLite.GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE);
|
||||
verify(mCentralSurfaces).animateExpandSettingsPanel(null);
|
||||
verify(mShadeController).animateExpandQs();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -341,7 +344,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
MotionEvent end = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 500, 0);
|
||||
gestureListener.onFling(start, end, 0, 1000);
|
||||
verifyLogPosted(GlobalActionsDialogLite.GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE);
|
||||
verify(mCentralSurfaces).animateExpandNotificationsPanel();
|
||||
verify(mShadeController).animateExpandShade();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -67,8 +67,8 @@ import com.android.systemui.qs.logging.QSLogger;
|
||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||
import com.android.systemui.settings.UserFileManager;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.AutoTileManager;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.FakeSharedPreferences;
|
||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||
@@ -86,7 +86,6 @@ import org.mockito.stubbing.Answer;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Provider;
|
||||
@@ -110,7 +109,7 @@ public class QSTileHostTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private Provider<AutoTileManager> mAutoTiles;
|
||||
@Mock
|
||||
private CentralSurfaces mCentralSurfaces;
|
||||
private ShadeController mShadeController;
|
||||
@Mock
|
||||
private QSLogger mQSLogger;
|
||||
@Mock
|
||||
@@ -161,7 +160,7 @@ public class QSTileHostTest extends SysuiTestCase {
|
||||
mSecureSettings = new FakeSettings();
|
||||
saveSetting("");
|
||||
mQSTileHost = new TestQSTileHost(mContext, mDefaultFactory, mMainExecutor,
|
||||
mPluginManager, mTunerService, mAutoTiles, mCentralSurfaces,
|
||||
mPluginManager, mTunerService, mAutoTiles, mShadeController,
|
||||
mQSLogger, mUserTracker, mSecureSettings, mCustomTileStatePersister,
|
||||
mTileLifecycleManagerFactory, mUserFileManager, mFeatureFlags);
|
||||
|
||||
@@ -682,13 +681,13 @@ public class QSTileHostTest extends SysuiTestCase {
|
||||
QSFactory defaultFactory, Executor mainExecutor,
|
||||
PluginManager pluginManager, TunerService tunerService,
|
||||
Provider<AutoTileManager> autoTiles,
|
||||
CentralSurfaces centralSurfaces, QSLogger qsLogger,
|
||||
ShadeController shadeController, QSLogger qsLogger,
|
||||
UserTracker userTracker, SecureSettings secureSettings,
|
||||
CustomTileStatePersister customTileStatePersister,
|
||||
TileLifecycleManager.Factory tileLifecycleManagerFactory,
|
||||
UserFileManager userFileManager, FeatureFlags featureFlags) {
|
||||
super(context, defaultFactory, mainExecutor, pluginManager,
|
||||
tunerService, autoTiles, Optional.of(centralSurfaces), qsLogger,
|
||||
tunerService, autoTiles, shadeController, qsLogger,
|
||||
userTracker, secureSettings, customTileStatePersister,
|
||||
tileLifecycleManagerFactory, userFileManager, featureFlags);
|
||||
}
|
||||
|
||||
@@ -18,8 +18,7 @@ package com.android.systemui.qs.pipeline.domain.interactor
|
||||
import android.testing.AndroidTestingRunner
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces
|
||||
import java.util.Optional
|
||||
import com.android.systemui.shade.ShadeController
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
@@ -31,7 +30,7 @@ import org.mockito.MockitoAnnotations
|
||||
@SmallTest
|
||||
class PanelInteractorImplTest : SysuiTestCase() {
|
||||
|
||||
@Mock private lateinit var centralSurfaces: CentralSurfaces
|
||||
@Mock private lateinit var shadeController: ShadeController
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
@@ -40,37 +39,28 @@ class PanelInteractorImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun openPanels_callsCentralSurfaces() {
|
||||
val underTest = PanelInteractorImpl(Optional.of(centralSurfaces))
|
||||
val underTest = PanelInteractorImpl(shadeController)
|
||||
|
||||
underTest.openPanels()
|
||||
|
||||
verify(centralSurfaces).postAnimateOpenPanels()
|
||||
verify(shadeController).postAnimateExpandQs()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun collapsePanels_callsCentralSurfaces() {
|
||||
val underTest = PanelInteractorImpl(Optional.of(centralSurfaces))
|
||||
val underTest = PanelInteractorImpl(shadeController)
|
||||
|
||||
underTest.collapsePanels()
|
||||
|
||||
verify(centralSurfaces).postAnimateCollapsePanels()
|
||||
verify(shadeController).postAnimateCollapseShade()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun forceCollapsePanels_callsCentralSurfaces() {
|
||||
val underTest = PanelInteractorImpl(Optional.of(centralSurfaces))
|
||||
val underTest = PanelInteractorImpl(shadeController)
|
||||
|
||||
underTest.forceCollapsePanels()
|
||||
|
||||
verify(centralSurfaces).postAnimateForceCollapsePanels()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun whenOptionalEmpty_doesnThrow() {
|
||||
val underTest = PanelInteractorImpl(Optional.empty())
|
||||
|
||||
underTest.openPanels()
|
||||
underTest.collapsePanels()
|
||||
underTest.forceCollapsePanels()
|
||||
verify(shadeController).postAnimateForceCollapseShade()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.shade
|
||||
|
||||
import android.testing.AndroidTestingRunner
|
||||
import android.view.Display
|
||||
import android.view.WindowManager
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.assist.AssistManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.statusbar.CommandQueue
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||
import com.android.systemui.statusbar.window.StatusBarWindowController
|
||||
import com.android.systemui.util.concurrency.FakeExecutor
|
||||
import com.android.systemui.util.mockito.whenever
|
||||
import com.android.systemui.util.time.FakeSystemClock
|
||||
import dagger.Lazy
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.ArgumentMatchers
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
@SmallTest
|
||||
class ShadeControllerImplTest : SysuiTestCase() {
|
||||
@Mock private lateinit var commandQueue: CommandQueue
|
||||
@Mock private lateinit var keyguardStateController: KeyguardStateController
|
||||
@Mock private lateinit var statusBarStateController: StatusBarStateController
|
||||
@Mock private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager
|
||||
@Mock private lateinit var statusBarWindowController: StatusBarWindowController
|
||||
@Mock private lateinit var deviceProvisionedController: DeviceProvisionedController
|
||||
@Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController
|
||||
@Mock private lateinit var windowManager: WindowManager
|
||||
@Mock private lateinit var assistManager: AssistManager
|
||||
@Mock private lateinit var gutsManager: NotificationGutsManager
|
||||
@Mock private lateinit var notificationPanelViewController: NotificationPanelViewController
|
||||
@Mock private lateinit var display: Display
|
||||
|
||||
private lateinit var shadeController: ShadeControllerImpl
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
whenever(windowManager.defaultDisplay).thenReturn(display)
|
||||
whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(true)
|
||||
shadeController =
|
||||
ShadeControllerImpl(
|
||||
commandQueue,
|
||||
FakeExecutor(FakeSystemClock()),
|
||||
keyguardStateController,
|
||||
statusBarStateController,
|
||||
statusBarKeyguardViewManager,
|
||||
statusBarWindowController,
|
||||
deviceProvisionedController,
|
||||
notificationShadeWindowController,
|
||||
windowManager,
|
||||
Lazy { assistManager },
|
||||
Lazy { gutsManager },
|
||||
)
|
||||
shadeController.setNotificationPanelViewController(notificationPanelViewController)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDisableNotificationShade() {
|
||||
whenever(commandQueue.panelsEnabled()).thenReturn(false)
|
||||
|
||||
// Trying to open it does nothing.
|
||||
shadeController.animateExpandShade()
|
||||
verify(notificationPanelViewController, never()).expandToNotifications()
|
||||
shadeController.animateExpandQs()
|
||||
verify(notificationPanelViewController, never()).expand(ArgumentMatchers.anyBoolean())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testEnableNotificationShade() {
|
||||
whenever(commandQueue.panelsEnabled()).thenReturn(true)
|
||||
|
||||
// Can now be opened.
|
||||
shadeController.animateExpandShade()
|
||||
verify(notificationPanelViewController).expandToNotifications()
|
||||
shadeController.animateExpandQs()
|
||||
verify(notificationPanelViewController).expandToQs()
|
||||
}
|
||||
}
|
||||
@@ -108,7 +108,7 @@ public class ExpandableNotificationRowDragControllerTest extends SysuiTestCase {
|
||||
|
||||
mRow.doDragCallback(0, 0);
|
||||
verify(controller).startDragAndDrop(mRow);
|
||||
verify(mShadeController).animateCollapsePanels(eq(0), eq(true),
|
||||
verify(mShadeController).animateCollapseShade(eq(0), eq(true),
|
||||
eq(false), anyFloat());
|
||||
verify(mNotificationPanelLogger, times(1)).logNotificationDrag(any());
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -153,12 +152,6 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
|
||||
|
||||
verify(mCentralSurfaces).updateQsExpansionEnabled();
|
||||
verify(mShadeController).animateCollapseShade();
|
||||
|
||||
// Trying to open it does nothing.
|
||||
mSbcqCallbacks.animateExpandNotificationsPanel();
|
||||
verify(mShadeViewController, never()).expandToNotifications();
|
||||
mSbcqCallbacks.animateExpandSettingsPanel(null);
|
||||
verify(mShadeViewController, never()).expand(anyBoolean());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -171,12 +164,6 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
|
||||
StatusBarManager.DISABLE2_NONE, false);
|
||||
verify(mCentralSurfaces).updateQsExpansionEnabled();
|
||||
verify(mShadeController, never()).animateCollapseShade();
|
||||
|
||||
// Can now be opened.
|
||||
mSbcqCallbacks.animateExpandNotificationsPanel();
|
||||
verify(mShadeViewController).expandToNotifications();
|
||||
mSbcqCallbacks.animateExpandSettingsPanel(null);
|
||||
verify(mShadeViewController).expandToQs();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -431,10 +431,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
|
||||
|
||||
mShadeController = spy(new ShadeControllerImpl(
|
||||
mCommandQueue,
|
||||
mMainExecutor,
|
||||
mKeyguardStateController,
|
||||
mStatusBarStateController,
|
||||
mStatusBarKeyguardViewManager,
|
||||
mStatusBarWindowController,
|
||||
mDeviceProvisionedController,
|
||||
mNotificationShadeWindowController,
|
||||
mContext.getSystemService(WindowManager.class),
|
||||
() -> mAssistManager,
|
||||
|
||||
Reference in New Issue
Block a user