Merge "Group window relayout requests" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0716400df2
@@ -112,6 +112,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.BiometricUnlockController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
@@ -324,6 +325,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
// the properties of the keyguard
|
||||
|
||||
private final KeyguardUpdateMonitor mUpdateMonitor;
|
||||
private final Lazy<NotificationShadeWindowController> mNotificationShadeWindowControllerLazy;
|
||||
|
||||
/**
|
||||
* Last SIM state reported by the telephony system.
|
||||
@@ -846,7 +848,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
KeyguardStateController keyguardStateController,
|
||||
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationControllerLazy,
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
Lazy<NotificationShadeDepthController> notificationShadeDepthController) {
|
||||
Lazy<NotificationShadeDepthController> notificationShadeDepthController,
|
||||
Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy) {
|
||||
super(context);
|
||||
mFalsingCollector = falsingCollector;
|
||||
mLockPatternUtils = lockPatternUtils;
|
||||
@@ -862,6 +865,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
mKeyguardDisplayManager = keyguardDisplayManager;
|
||||
dumpManager.registerDumpable(getClass().getName(), this);
|
||||
mDeviceConfig = deviceConfig;
|
||||
mNotificationShadeWindowControllerLazy = notificationShadeWindowControllerLazy;
|
||||
mShowHomeOverLockscreen = mDeviceConfig.getBoolean(
|
||||
DeviceConfig.NAMESPACE_SYSTEMUI,
|
||||
NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN,
|
||||
@@ -1889,10 +1893,13 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
Trace.beginSection(
|
||||
"KeyguardViewMediator#handleMessage START_KEYGUARD_EXIT_ANIM");
|
||||
StartKeyguardExitAnimParams params = (StartKeyguardExitAnimParams) msg.obj;
|
||||
handleStartKeyguardExitAnimation(params.startTime, params.fadeoutDuration,
|
||||
params.mApps, params.mWallpapers, params.mNonApps,
|
||||
params.mFinishedCallback);
|
||||
mFalsingCollector.onSuccessfulUnlock();
|
||||
mNotificationShadeWindowControllerLazy.get().batchApplyWindowLayoutParams(
|
||||
() -> {
|
||||
handleStartKeyguardExitAnimation(params.startTime,
|
||||
params.fadeoutDuration, params.mApps, params.mWallpapers,
|
||||
params.mNonApps, params.mFinishedCallback);
|
||||
mFalsingCollector.onSuccessfulUnlock();
|
||||
});
|
||||
Trace.endSection();
|
||||
break;
|
||||
case CANCEL_KEYGUARD_EXIT_ANIM:
|
||||
@@ -2190,10 +2197,12 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
mKeyguardGoingAwayRunnable.run();
|
||||
} else {
|
||||
// TODO(bc-unlock): Fill parameters
|
||||
handleStartKeyguardExitAnimation(
|
||||
SystemClock.uptimeMillis() + mHideAnimation.getStartOffset(),
|
||||
mHideAnimation.getDuration(), null /* apps */, null /* wallpapers */,
|
||||
null /* nonApps */, null /* finishedCallback */);
|
||||
mNotificationShadeWindowControllerLazy.get().batchApplyWindowLayoutParams(() -> {
|
||||
handleStartKeyguardExitAnimation(
|
||||
SystemClock.uptimeMillis() + mHideAnimation.getStartOffset(),
|
||||
mHideAnimation.getDuration(), null /* apps */, null /* wallpapers */,
|
||||
null /* nonApps */, null /* finishedCallback */);
|
||||
});
|
||||
}
|
||||
}
|
||||
Trace.endSection();
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.KeyguardLiftController;
|
||||
@@ -97,7 +98,8 @@ public class KeyguardModule {
|
||||
KeyguardStateController keyguardStateController,
|
||||
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
Lazy<NotificationShadeDepthController> notificationShadeDepthController) {
|
||||
Lazy<NotificationShadeDepthController> notificationShadeDepthController,
|
||||
Lazy<NotificationShadeWindowController> notificationShadeWindowController) {
|
||||
return new KeyguardViewMediator(
|
||||
context,
|
||||
falsingCollector,
|
||||
@@ -120,7 +122,8 @@ public class KeyguardModule {
|
||||
keyguardStateController,
|
||||
keyguardUnlockAnimationController,
|
||||
unlockedScreenOffAnimationController,
|
||||
notificationShadeDepthController
|
||||
notificationShadeDepthController,
|
||||
notificationShadeWindowController
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar;
|
||||
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
|
||||
@@ -187,6 +188,14 @@ public interface NotificationShadeWindowController extends RemoteInputController
|
||||
*/
|
||||
default void setLightRevealScrimOpaque(boolean opaque) {}
|
||||
|
||||
/**
|
||||
* Defer any application of window {@link WindowManager.LayoutParams} until {@code scope} is
|
||||
* fully applied.
|
||||
*/
|
||||
default void batchApplyWindowLayoutParams(@NonNull Runnable scope) {
|
||||
scope.run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom listener to pipe data back to plugins about whether or not the status bar would be
|
||||
* collapsed if not for the plugin.
|
||||
|
||||
@@ -145,6 +145,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.NotificationShelfController;
|
||||
import com.android.systemui.statusbar.PulseExpansionHandler;
|
||||
import com.android.systemui.statusbar.RemoteInputController;
|
||||
@@ -664,7 +665,9 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
NotificationLockscreenUserManager notificationLockscreenUserManager,
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
KeyguardStateController keyguardStateController,
|
||||
StatusBarStateController statusBarStateController, DozeLog dozeLog,
|
||||
StatusBarStateController statusBarStateController,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
DozeLog dozeLog,
|
||||
DozeParameters dozeParameters, CommandQueue commandQueue, VibratorHelper vibratorHelper,
|
||||
LatencyTracker latencyTracker, PowerManager powerManager,
|
||||
AccessibilityManager accessibilityManager, @DisplayId int displayId,
|
||||
@@ -716,6 +719,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
dozeLog,
|
||||
keyguardStateController,
|
||||
(SysuiStatusBarStateController) statusBarStateController,
|
||||
notificationShadeWindowController,
|
||||
vibratorHelper,
|
||||
statusBarKeyguardViewManager,
|
||||
latencyTracker,
|
||||
|
||||
@@ -107,6 +107,12 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
private final SysuiColorExtractor mColorExtractor;
|
||||
private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||
private float mFaceAuthDisplayBrightness = LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
|
||||
/**
|
||||
* Layout params would be aggregated and dispatched all at once if this is > 0.
|
||||
*
|
||||
* @see #batchApplyWindowLayoutParams(Runnable)
|
||||
*/
|
||||
private int mDeferWindowLayoutParams;
|
||||
|
||||
@Inject
|
||||
public NotificationShadeWindowControllerImpl(Context context, WindowManager windowManager,
|
||||
@@ -433,6 +439,20 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
}
|
||||
}
|
||||
|
||||
private void applyWindowLayoutParams() {
|
||||
if (mDeferWindowLayoutParams == 0 && mLp != null && mLp.copyFrom(mLpChanged) != 0) {
|
||||
mWindowManager.updateViewLayout(mNotificationShadeView, mLp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchApplyWindowLayoutParams(Runnable scope) {
|
||||
mDeferWindowLayoutParams++;
|
||||
scope.run();
|
||||
mDeferWindowLayoutParams--;
|
||||
applyWindowLayoutParams();
|
||||
}
|
||||
|
||||
private void apply(State state) {
|
||||
applyKeyguardFlags(state);
|
||||
applyFocusableFlag(state);
|
||||
@@ -447,9 +467,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
applyHasTopUi(state);
|
||||
applyNotTouchable(state);
|
||||
applyStatusBarColorSpaceAgnosticFlag(state);
|
||||
if (mLp != null && mLp.copyFrom(mLpChanged) != 0) {
|
||||
mWindowManager.updateViewLayout(mNotificationShadeView, mLp);
|
||||
}
|
||||
applyWindowLayoutParams();
|
||||
|
||||
if (mHasTopUi != mHasTopUiChanged) {
|
||||
whitelistIpcs(() -> {
|
||||
try {
|
||||
@@ -722,6 +741,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
pw.println(TAG + ":");
|
||||
pw.println(" mKeyguardMaxRefreshRate=" + mKeyguardMaxRefreshRate);
|
||||
pw.println(" mKeyguardPreferredRefreshRate=" + mKeyguardPreferredRefreshRate);
|
||||
pw.println(" mDeferWindowLayoutParams=" + mDeferWindowLayoutParams);
|
||||
pw.println(mCurrentState);
|
||||
if (mNotificationShadeView != null && mNotificationShadeView.getViewRootImpl() != null) {
|
||||
mNotificationShadeView.getViewRootImpl().dump(" ", pw);
|
||||
|
||||
@@ -54,6 +54,7 @@ import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.classifier.Classifier;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
@@ -177,6 +178,7 @@ public abstract class PanelViewController {
|
||||
private boolean mExpandLatencyTracking;
|
||||
private final PanelView mView;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
protected final Resources mResources;
|
||||
protected final KeyguardStateController mKeyguardStateController;
|
||||
protected final SysuiStatusBarStateController mStatusBarStateController;
|
||||
@@ -215,6 +217,7 @@ public abstract class PanelViewController {
|
||||
DozeLog dozeLog,
|
||||
KeyguardStateController keyguardStateController,
|
||||
SysuiStatusBarStateController statusBarStateController,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
VibratorHelper vibratorHelper,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
LatencyTracker latencyTracker,
|
||||
@@ -247,6 +250,7 @@ public abstract class PanelViewController {
|
||||
mResources = mView.getResources();
|
||||
mKeyguardStateController = keyguardStateController;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mNotificationShadeWindowController = notificationShadeWindowController;
|
||||
mFlingAnimationUtils = flingAnimationUtilsBuilder
|
||||
.reset()
|
||||
.setMaxLengthSeconds(0.6f)
|
||||
@@ -743,34 +747,36 @@ public abstract class PanelViewController {
|
||||
if (isNaN(h)) {
|
||||
Log.wtf(TAG, "ExpandedHeight set to NaN");
|
||||
}
|
||||
if (mExpandLatencyTracking && h != 0f) {
|
||||
DejankUtils.postAfterTraversal(
|
||||
() -> mLatencyTracker.onActionEnd(LatencyTracker.ACTION_EXPAND_PANEL));
|
||||
mExpandLatencyTracking = false;
|
||||
}
|
||||
float maxPanelHeight = getMaxPanelHeight();
|
||||
if (mHeightAnimator == null) {
|
||||
if (mTracking) {
|
||||
float overExpansionPixels = Math.max(0, h - maxPanelHeight);
|
||||
setOverExpansionInternal(overExpansionPixels, true /* isFromGesture */);
|
||||
mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
|
||||
if (mExpandLatencyTracking && h != 0f) {
|
||||
DejankUtils.postAfterTraversal(
|
||||
() -> mLatencyTracker.onActionEnd(LatencyTracker.ACTION_EXPAND_PANEL));
|
||||
mExpandLatencyTracking = false;
|
||||
}
|
||||
float maxPanelHeight = getMaxPanelHeight();
|
||||
if (mHeightAnimator == null) {
|
||||
if (mTracking) {
|
||||
float overExpansionPixels = Math.max(0, h - maxPanelHeight);
|
||||
setOverExpansionInternal(overExpansionPixels, true /* isFromGesture */);
|
||||
}
|
||||
mExpandedHeight = Math.min(h, maxPanelHeight);
|
||||
} else {
|
||||
mExpandedHeight = h;
|
||||
}
|
||||
mExpandedHeight = Math.min(h, maxPanelHeight);
|
||||
} else {
|
||||
mExpandedHeight = h;
|
||||
}
|
||||
|
||||
// If we are closing the panel and we are almost there due to a slow decelerating
|
||||
// interpolator, abort the animation.
|
||||
if (mExpandedHeight < 1f && mExpandedHeight != 0f && mClosing) {
|
||||
mExpandedHeight = 0f;
|
||||
if (mHeightAnimator != null) {
|
||||
mHeightAnimator.end();
|
||||
// If we are closing the panel and we are almost there due to a slow decelerating
|
||||
// interpolator, abort the animation.
|
||||
if (mExpandedHeight < 1f && mExpandedHeight != 0f && mClosing) {
|
||||
mExpandedHeight = 0f;
|
||||
if (mHeightAnimator != null) {
|
||||
mHeightAnimator.end();
|
||||
}
|
||||
}
|
||||
}
|
||||
mExpandedFraction = Math.min(1f,
|
||||
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
|
||||
onHeightUpdated(mExpandedHeight);
|
||||
updatePanelExpansionAndVisibility();
|
||||
mExpandedFraction = Math.min(1f,
|
||||
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
|
||||
onHeightUpdated(mExpandedHeight);
|
||||
updatePanelExpansionAndVisibility();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3559,26 +3559,29 @@ public class StatusBar extends SystemUI implements
|
||||
public void onStartedWakingUp() {
|
||||
String tag = "StatusBar#onStartedWakingUp";
|
||||
DejankUtils.startDetectingBlockingIpcs(tag);
|
||||
mDeviceInteractive = true;
|
||||
mWakeUpCoordinator.setWakingUp(true);
|
||||
if (!mKeyguardBypassController.getBypassEnabled()) {
|
||||
mHeadsUpManager.releaseAllImmediately();
|
||||
}
|
||||
updateVisibleToUser();
|
||||
updateIsKeyguard();
|
||||
mDozeServiceHost.stopDozing();
|
||||
// This is intentionally below the stopDozing call above, since it avoids that we're
|
||||
// unnecessarily animating the wakeUp transition. Animations should only be enabled
|
||||
// once we fully woke up.
|
||||
updateRevealEffect(true /* wakingUp */);
|
||||
updateNotificationPanelTouchState();
|
||||
mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
|
||||
mDeviceInteractive = true;
|
||||
mWakeUpCoordinator.setWakingUp(true);
|
||||
if (!mKeyguardBypassController.getBypassEnabled()) {
|
||||
mHeadsUpManager.releaseAllImmediately();
|
||||
}
|
||||
updateVisibleToUser();
|
||||
updateIsKeyguard();
|
||||
mDozeServiceHost.stopDozing();
|
||||
// This is intentionally below the stopDozing call above, since it avoids that we're
|
||||
// unnecessarily animating the wakeUp transition. Animations should only be enabled
|
||||
// once we fully woke up.
|
||||
updateRevealEffect(true /* wakingUp */);
|
||||
updateNotificationPanelTouchState();
|
||||
|
||||
// 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 (mUnlockedScreenOffAnimationController.isScreenOffLightRevealAnimationPlaying()) {
|
||||
makeExpandedInvisible();
|
||||
}
|
||||
// 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 (mUnlockedScreenOffAnimationController
|
||||
.isScreenOffLightRevealAnimationPlaying()) {
|
||||
makeExpandedInvisible();
|
||||
}
|
||||
|
||||
});
|
||||
DejankUtils.stopDetectingBlockingIpcs(tag);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.android.systemui.classifier.FalsingCollectorFake;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
@@ -64,9 +65,6 @@ import com.android.systemui.util.DeviceConfigProxyFake;
|
||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||
import com.android.systemui.util.time.FakeSystemClock;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -75,6 +73,11 @@ import org.mockito.ArgumentMatchers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@TestableLooper.RunWithLooper
|
||||
@SmallTest
|
||||
@@ -103,6 +106,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
|
||||
private @Mock KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
||||
private @Mock UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||
private @Mock IKeyguardDrawnCallback mKeyguardDrawnCallback;
|
||||
private @Mock Lazy<NotificationShadeWindowController> mNotificationShadeWindowControllerLazy;
|
||||
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
|
||||
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
|
||||
|
||||
@@ -144,7 +148,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
|
||||
mKeyguardStateController,
|
||||
() -> mKeyguardUnlockAnimationController,
|
||||
mUnlockedScreenOffAnimationController,
|
||||
() -> mNotificationShadeDepthController);
|
||||
() -> mNotificationShadeDepthController,
|
||||
mNotificationShadeWindowControllerLazy);
|
||||
mViewMediator.start();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ import static com.android.keyguard.KeyguardClockSwitch.SMALL;
|
||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
|
||||
import static com.android.systemui.statusbar.notification.ViewGroupFadeHelper.reset;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -107,6 +106,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.NotificationShelfController;
|
||||
import com.android.systemui.statusbar.PulseExpansionHandler;
|
||||
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
|
||||
@@ -305,6 +305,8 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private NotificationsQSContainerController mNotificationsQSContainerController;
|
||||
@Mock
|
||||
private NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
@Mock
|
||||
private FeatureFlags mFeatureFlags;
|
||||
private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
|
||||
private SysuiStatusBarStateController mStatusBarStateController;
|
||||
@@ -402,8 +404,10 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
when(mLayoutInflater.inflate(eq(R.layout.keyguard_bottom_area), any(), anyBoolean()))
|
||||
.thenReturn(mKeyguardBottomArea);
|
||||
when(mNotificationRemoteInputManager.isRemoteInputActive()).thenReturn(false);
|
||||
|
||||
reset(mView);
|
||||
doAnswer(invocation -> {
|
||||
((Runnable) invocation.getArgument(0)).run();
|
||||
return null;
|
||||
}).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
|
||||
|
||||
mNotificationPanelViewController = new NotificationPanelViewController(mView,
|
||||
mResources,
|
||||
@@ -412,8 +416,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
coordinator, expansionHandler, mDynamicPrivacyController, mKeyguardBypassController,
|
||||
mFalsingManager, new FalsingCollectorFake(),
|
||||
mNotificationLockscreenUserManager, mNotificationEntryManager,
|
||||
mKeyguardStateController, mStatusBarStateController, mDozeLog,
|
||||
mDozeParameters, mCommandQueue, mVibratorHelper,
|
||||
mKeyguardStateController, mStatusBarStateController,
|
||||
mNotificationShadeWindowController,
|
||||
mDozeLog, mDozeParameters, mCommandQueue, mVibratorHelper,
|
||||
mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
|
||||
mMetricsLogger, mActivityManager, mConfigurationController,
|
||||
() -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||
|
||||
@@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.clearInvocations;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -225,4 +226,17 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
||||
assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) != 0).isTrue();
|
||||
assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void batchApplyWindowLayoutParams_doesNotDispatchEvents() {
|
||||
mNotificationShadeWindowController.setForceDozeBrightness(true);
|
||||
verify(mWindowManager).updateViewLayout(any(), any());
|
||||
|
||||
clearInvocations(mWindowManager);
|
||||
mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
|
||||
mNotificationShadeWindowController.setForceDozeBrightness(false);
|
||||
verify(mWindowManager, never()).updateViewLayout(any(), any());
|
||||
});
|
||||
verify(mWindowManager).updateViewLayout(any(), any());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user