Merge changes I08342269,I398baa6d into tm-dev
* changes: QSFragmentTest: add test for shade expansion and alpha interpolation Bouncer: Refine qs and notification alpha anim.
This commit is contained in:
committed by
Android (Google) Code Review
commit
f2ddeaaf6a
@@ -600,7 +600,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
} else if (progress > 0 && view.getVisibility() != View.VISIBLE) {
|
} else if (progress > 0 && view.getVisibility() != View.VISIBLE) {
|
||||||
view.setVisibility((View.VISIBLE));
|
view.setVisibility((View.VISIBLE));
|
||||||
}
|
}
|
||||||
float alpha = (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED)
|
float alpha = mQSPanelController.bouncerInTransit()
|
||||||
? BouncerPanelExpansionCalculator.getBackScrimScaledExpansion(progress)
|
? BouncerPanelExpansionCalculator.getBackScrimScaledExpansion(progress)
|
||||||
: ShadeInterpolation.getContentAlpha(progress);
|
: ShadeInterpolation.getContentAlpha(progress);
|
||||||
view.setAlpha(alpha);
|
view.setAlpha(alpha);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import com.android.systemui.qs.logging.QSLogger;
|
|||||||
import com.android.systemui.settings.brightness.BrightnessController;
|
import com.android.systemui.settings.brightness.BrightnessController;
|
||||||
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
|
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
|
||||||
import com.android.systemui.settings.brightness.BrightnessSliderController;
|
import com.android.systemui.settings.brightness.BrightnessSliderController;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
|
|
||||||
@@ -65,6 +66,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
private final BrightnessSliderController mBrightnessSliderController;
|
private final BrightnessSliderController mBrightnessSliderController;
|
||||||
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
|
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
|
||||||
private final FeatureFlags mFeatureFlags;
|
private final FeatureFlags mFeatureFlags;
|
||||||
|
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
|
|
||||||
private boolean mGridContentVisible = true;
|
private boolean mGridContentVisible = true;
|
||||||
|
|
||||||
@@ -101,7 +103,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
||||||
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
|
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
|
||||||
BrightnessSliderController.Factory brightnessSliderFactory,
|
BrightnessSliderController.Factory brightnessSliderFactory,
|
||||||
FalsingManager falsingManager, FeatureFlags featureFlags) {
|
FalsingManager falsingManager, FeatureFlags featureFlags,
|
||||||
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||||
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
|
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
|
||||||
metricsLogger, uiEventLogger, qsLogger, dumpManager);
|
metricsLogger, uiEventLogger, qsLogger, dumpManager);
|
||||||
mQSFgsManagerFooter = qsFgsManagerFooter;
|
mQSFgsManagerFooter = qsFgsManagerFooter;
|
||||||
@@ -117,6 +120,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
|
mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
|
||||||
mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
|
mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
|
||||||
mFeatureFlags = featureFlags;
|
mFeatureFlags = featureFlags;
|
||||||
|
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||||
view.setUseNewFooter(featureFlags.isEnabled(Flags.NEW_FOOTER));
|
view.setUseNewFooter(featureFlags.isEnabled(Flags.NEW_FOOTER));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,5 +285,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
void setPageMargin(int pageMargin) {
|
void setPageMargin(int pageMargin) {
|
||||||
mView.setPageMargin(pageMargin);
|
mView.setPageMargin(pageMargin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if bouncer expansion is between 0 and 1 non-inclusive.
|
||||||
|
*
|
||||||
|
* @return if bouncer is in transit
|
||||||
|
*/
|
||||||
|
public boolean bouncerInTransit() {
|
||||||
|
return mStatusBarKeyguardViewManager.bouncerIsInTransit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -797,10 +797,9 @@ public abstract class PanelViewController {
|
|||||||
}
|
}
|
||||||
mExpandedFraction = Math.min(1f,
|
mExpandedFraction = Math.min(1f,
|
||||||
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
|
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
|
||||||
mAmbientState.setExpansionFraction(mKeyguardStateController.isUnlocked()
|
mAmbientState.setExpansionFraction(mStatusBarKeyguardViewManager.bouncerIsInTransit()
|
||||||
? mExpandedFraction
|
? BouncerPanelExpansionCalculator.getBackScrimScaledExpansion(mExpandedFraction)
|
||||||
: BouncerPanelExpansionCalculator
|
: mExpandedFraction);
|
||||||
.getBackScrimScaledExpansion(mExpandedFraction));
|
|
||||||
onHeightUpdated(mExpandedHeight);
|
onHeightUpdated(mExpandedHeight);
|
||||||
updatePanelExpansionAndVisibility();
|
updatePanelExpansionAndVisibility();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -204,6 +204,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
private final Executor mMainExecutor;
|
private final Executor mMainExecutor;
|
||||||
private final ScreenOffAnimationController mScreenOffAnimationController;
|
private final ScreenOffAnimationController mScreenOffAnimationController;
|
||||||
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
||||||
|
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
|
|
||||||
private GradientColors mColors;
|
private GradientColors mColors;
|
||||||
private boolean mNeedsDrawableColorUpdate;
|
private boolean mNeedsDrawableColorUpdate;
|
||||||
@@ -266,7 +267,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
ConfigurationController configurationController, @Main Executor mainExecutor,
|
ConfigurationController configurationController, @Main Executor mainExecutor,
|
||||||
ScreenOffAnimationController screenOffAnimationController,
|
ScreenOffAnimationController screenOffAnimationController,
|
||||||
PanelExpansionStateManager panelExpansionStateManager,
|
PanelExpansionStateManager panelExpansionStateManager,
|
||||||
KeyguardUnlockAnimationController keyguardUnlockAnimationController) {
|
KeyguardUnlockAnimationController keyguardUnlockAnimationController,
|
||||||
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||||
mScrimStateListener = lightBarController::setScrimState;
|
mScrimStateListener = lightBarController::setScrimState;
|
||||||
mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
|
mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
|
||||||
|
|
||||||
@@ -292,6 +294,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
keyguardStateController.getKeyguardFadingAwayDuration());
|
keyguardStateController.getKeyguardFadingAwayDuration());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||||
configurationController.addCallback(new ConfigurationController.ConfigurationListener() {
|
configurationController.addCallback(new ConfigurationController.ConfigurationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onThemeChanged() {
|
public void onThemeChanged() {
|
||||||
@@ -1057,7 +1060,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
}
|
}
|
||||||
|
|
||||||
private float getInterpolatedFraction() {
|
private float getInterpolatedFraction() {
|
||||||
if (mState == ScrimState.KEYGUARD || mState == ScrimState.SHADE_LOCKED) {
|
if (mStatusBarKeyguardViewManager.bouncerIsInTransit()) {
|
||||||
return BouncerPanelExpansionCalculator
|
return BouncerPanelExpansionCalculator
|
||||||
.getBackScrimScaledExpansion(mPanelExpansionFraction);
|
.getBackScrimScaledExpansion(mPanelExpansionFraction);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1367,6 +1367,15 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if bouncer expansion is between 0 and 1 non-inclusive.
|
||||||
|
*/
|
||||||
|
public boolean bouncerIsInTransit() {
|
||||||
|
if (mBouncer == null) return false;
|
||||||
|
|
||||||
|
return mBouncer.inTransit();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delegate used to send show/reset events to an alternate authentication method instead of the
|
* Delegate used to send show/reset events to an alternate authentication method instead of the
|
||||||
* regular pin/pattern/password bouncer.
|
* regular pin/pattern/password bouncer.
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
package com.android.systemui.qs;
|
package com.android.systemui.qs;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
@@ -37,8 +39,10 @@ import android.view.ViewGroup;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.internal.logging.UiEventLogger;
|
import com.android.internal.logging.UiEventLogger;
|
||||||
|
import com.android.keyguard.BouncerPanelExpansionCalculator;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiBaseFragmentTest;
|
import com.android.systemui.SysuiBaseFragmentTest;
|
||||||
|
import com.android.systemui.animation.ShadeInterpolation;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.media.MediaHost;
|
import com.android.systemui.media.MediaHost;
|
||||||
@@ -54,6 +58,7 @@ import com.android.systemui.qs.tileimpl.QSFactoryImpl;
|
|||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.shared.plugins.PluginManager;
|
import com.android.systemui.shared.plugins.PluginManager;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
|
import com.android.systemui.statusbar.StatusBarState;
|
||||||
import com.android.systemui.statusbar.phone.AutoTileManager;
|
import com.android.systemui.statusbar.phone.AutoTileManager;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||||
@@ -77,47 +82,29 @@ import java.util.Optional;
|
|||||||
@SmallTest
|
@SmallTest
|
||||||
public class QSFragmentTest extends SysuiBaseFragmentTest {
|
public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private QSFragmentComponent.Factory mQsComponentFactory;
|
||||||
private QSFragmentComponent.Factory mQsComponentFactory;
|
@Mock private QSFragmentComponent mQsFragmentComponent;
|
||||||
@Mock
|
@Mock private QSPanelController mQSPanelController;
|
||||||
private QSFragmentComponent mQsFragmentComponent;
|
@Mock private MediaHost mQSMediaHost;
|
||||||
@Mock
|
@Mock private MediaHost mQQSMediaHost;
|
||||||
private QSPanelController mQSPanelController;
|
@Mock private KeyguardBypassController mBypassController;
|
||||||
@Mock
|
@Mock private FalsingManager mFalsingManager;
|
||||||
private MediaHost mQSMediaHost;
|
@Mock private TileServiceRequestController.Builder mTileServiceRequestControllerBuilder;
|
||||||
@Mock
|
@Mock private TileServiceRequestController mTileServiceRequestController;
|
||||||
private MediaHost mQQSMediaHost;
|
@Mock private QSCustomizerController mQsCustomizerController;
|
||||||
@Mock
|
@Mock private QuickQSPanelController mQuickQSPanelController;
|
||||||
private KeyguardBypassController mBypassController;
|
@Mock private FooterActionsController mQSFooterActionController;
|
||||||
@Mock
|
@Mock private QSContainerImplController mQSContainerImplController;
|
||||||
private FalsingManager mFalsingManager;
|
@Mock private QSContainerImpl mContainer;
|
||||||
@Mock
|
@Mock private QSFooter mFooter;
|
||||||
private TileServiceRequestController.Builder mTileServiceRequestControllerBuilder;
|
@Mock private LayoutInflater mLayoutInflater;
|
||||||
@Mock
|
@Mock private NonInterceptingScrollView mQSPanelScrollView;
|
||||||
private TileServiceRequestController mTileServiceRequestController;
|
@Mock private QuickStatusBarHeader mHeader;
|
||||||
@Mock
|
@Mock private QSPanel.QSTileLayout mQsTileLayout;
|
||||||
private QSCustomizerController mQsCustomizerController;
|
@Mock private QSPanel.QSTileLayout mQQsTileLayout;
|
||||||
@Mock
|
@Mock private QSAnimator mQSAnimator;
|
||||||
private QuickQSPanelController mQuickQSPanelController;
|
|
||||||
@Mock
|
|
||||||
private FooterActionsController mQSFooterActionController;
|
|
||||||
@Mock
|
|
||||||
private QSContainerImplController mQSContainerImplController;
|
|
||||||
@Mock
|
|
||||||
private QSContainerImpl mContainer;
|
|
||||||
@Mock
|
|
||||||
private QSFooter mFooter;
|
|
||||||
@Mock
|
|
||||||
private LayoutInflater mLayoutInflater;
|
|
||||||
@Mock
|
|
||||||
private NonInterceptingScrollView mQSPanelScrollView;
|
|
||||||
@Mock
|
|
||||||
private QuickStatusBarHeader mHeader;
|
|
||||||
@Mock
|
|
||||||
private QSPanel.QSTileLayout mQsTileLayout;
|
|
||||||
@Mock
|
|
||||||
private QSPanel.QSTileLayout mQQsTileLayout;
|
|
||||||
private View mQsFragmentView;
|
private View mQsFragmentView;
|
||||||
|
@Mock private StatusBarStateController mStatusBarStateController;
|
||||||
|
|
||||||
public QSFragmentTest() {
|
public QSFragmentTest() {
|
||||||
super(QSFragment.class);
|
super(QSFragment.class);
|
||||||
@@ -134,14 +121,26 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
mFragments.dispatchResume();
|
mFragments.dispatchResume();
|
||||||
processAllMessages();
|
processAllMessages();
|
||||||
|
|
||||||
QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class),
|
QSTileHost host =
|
||||||
mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
|
new QSTileHost(
|
||||||
mock(PluginManager.class), mock(TunerService.class),
|
mContext,
|
||||||
() -> mock(AutoTileManager.class), mock(DumpManager.class),
|
mock(StatusBarIconController.class),
|
||||||
mock(BroadcastDispatcher.class), Optional.of(mock(CentralSurfaces.class)),
|
mock(QSFactoryImpl.class),
|
||||||
mock(QSLogger.class), mock(UiEventLogger.class), mock(UserTracker.class),
|
new Handler(),
|
||||||
mock(SecureSettings.class), mock(CustomTileStatePersister.class),
|
Looper.myLooper(),
|
||||||
mTileServiceRequestControllerBuilder, mock(TileLifecycleManager.Factory.class));
|
mock(PluginManager.class),
|
||||||
|
mock(TunerService.class),
|
||||||
|
() -> mock(AutoTileManager.class),
|
||||||
|
mock(DumpManager.class),
|
||||||
|
mock(BroadcastDispatcher.class),
|
||||||
|
Optional.of(mock(CentralSurfaces.class)),
|
||||||
|
mock(QSLogger.class),
|
||||||
|
mock(UiEventLogger.class),
|
||||||
|
mock(UserTracker.class),
|
||||||
|
mock(SecureSettings.class),
|
||||||
|
mock(CustomTileStatePersister.class),
|
||||||
|
mTileServiceRequestControllerBuilder,
|
||||||
|
mock(TileLifecycleManager.Factory.class));
|
||||||
|
|
||||||
qs.setListening(true);
|
qs.setListening(true);
|
||||||
processAllMessages();
|
processAllMessages();
|
||||||
@@ -170,6 +169,75 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
assertTrue(qs.isExpanded());
|
assertTrue(qs.isExpanded());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void transitionToFullShade_inSplitShade_setsAlphaBasedOnProgress() {
|
||||||
|
QSFragment fragment = resumeAndGetFragment();
|
||||||
|
enableSplitShade();
|
||||||
|
int transitionPxAmount = 123;
|
||||||
|
float transitionProgress = 0.5f;
|
||||||
|
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
|
||||||
|
assertThat(mQsFragmentView.getAlpha())
|
||||||
|
.isEqualTo(ShadeInterpolation.getContentAlpha(transitionProgress));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void
|
||||||
|
transitionToFullShade_inSplitShade_onKeyguard_bouncerNotActive_usesShadeInterpolator() {
|
||||||
|
QSFragment fragment = resumeAndGetFragment();
|
||||||
|
enableSplitShade();
|
||||||
|
setStatusBarState(StatusBarState.KEYGUARD);
|
||||||
|
when(mQSPanelController.bouncerInTransit()).thenReturn(false);
|
||||||
|
int transitionPxAmount = 123;
|
||||||
|
float transitionProgress = 0.5f;
|
||||||
|
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
|
||||||
|
assertThat(mQsFragmentView.getAlpha())
|
||||||
|
.isEqualTo(ShadeInterpolation.getContentAlpha(transitionProgress));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void
|
||||||
|
transitionToFullShade_inSplitShade_onKeyguard_bouncerActive_usesBouncerInterpolator() {
|
||||||
|
QSFragment fragment = resumeAndGetFragment();
|
||||||
|
enableSplitShade();
|
||||||
|
setStatusBarState(StatusBarState.KEYGUARD);
|
||||||
|
when(mQSPanelController.bouncerInTransit()).thenReturn(true);
|
||||||
|
int transitionPxAmount = 123;
|
||||||
|
float transitionProgress = 0.5f;
|
||||||
|
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
|
||||||
|
assertThat(mQsFragmentView.getAlpha())
|
||||||
|
.isEqualTo(
|
||||||
|
BouncerPanelExpansionCalculator.getBackScrimScaledExpansion(
|
||||||
|
transitionProgress));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void transitionToFullShade_notInSplitShade_alwaysSetsAlphaTo1() {
|
||||||
|
QSFragment fragment = resumeAndGetFragment();
|
||||||
|
disableSplitShade();
|
||||||
|
|
||||||
|
int transitionPxAmount = 12;
|
||||||
|
float transitionProgress = 0.1f;
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
assertThat(mQsFragmentView.getAlpha()).isEqualTo(1);
|
||||||
|
|
||||||
|
transitionPxAmount = 123;
|
||||||
|
transitionProgress = 0.5f;
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
assertThat(mQsFragmentView.getAlpha()).isEqualTo(1);
|
||||||
|
assertThat(mQsFragmentView.getAlpha()).isEqualTo(1);
|
||||||
|
|
||||||
|
transitionPxAmount = 234;
|
||||||
|
transitionProgress = 0.7f;
|
||||||
|
fragment.setTransitionToFullShadeAmount(transitionPxAmount, transitionProgress);
|
||||||
|
assertThat(mQsFragmentView.getAlpha()).isEqualTo(1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Fragment instantiate(Context context, String className, Bundle arguments) {
|
protected Fragment instantiate(Context context, String className, Bundle arguments) {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -182,10 +250,10 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
setUpOther();
|
setUpOther();
|
||||||
|
|
||||||
return new QSFragment(
|
return new QSFragment(
|
||||||
new RemoteInputQuickSettingsDisabler(context, commandQueue,
|
new RemoteInputQuickSettingsDisabler(
|
||||||
mock(ConfigurationController.class)),
|
context, commandQueue, mock(ConfigurationController.class)),
|
||||||
mock(QSTileHost.class),
|
mock(QSTileHost.class),
|
||||||
mock(StatusBarStateController.class),
|
mStatusBarStateController,
|
||||||
commandQueue,
|
commandQueue,
|
||||||
mQSMediaHost,
|
mQSMediaHost,
|
||||||
mQQSMediaHost,
|
mQQSMediaHost,
|
||||||
@@ -212,8 +280,8 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
|
|
||||||
private void setUpViews() {
|
private void setUpViews() {
|
||||||
mQsFragmentView = spy(new View(mContext));
|
mQsFragmentView = spy(new View(mContext));
|
||||||
when(mQsFragmentView.findViewById(R.id.expanded_qs_scroll_view)).thenReturn(
|
when(mQsFragmentView.findViewById(R.id.expanded_qs_scroll_view))
|
||||||
mQSPanelScrollView);
|
.thenReturn(mQSPanelScrollView);
|
||||||
when(mQsFragmentView.findViewById(R.id.header)).thenReturn(mHeader);
|
when(mQsFragmentView.findViewById(R.id.header)).thenReturn(mHeader);
|
||||||
when(mQsFragmentView.findViewById(android.R.id.edit)).thenReturn(new View(mContext));
|
when(mQsFragmentView.findViewById(android.R.id.edit)).thenReturn(new View(mContext));
|
||||||
}
|
}
|
||||||
@@ -222,8 +290,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
when(mLayoutInflater.cloneInContext(any(Context.class))).thenReturn(mLayoutInflater);
|
when(mLayoutInflater.cloneInContext(any(Context.class))).thenReturn(mLayoutInflater);
|
||||||
when(mLayoutInflater.inflate(anyInt(), any(ViewGroup.class), anyBoolean()))
|
when(mLayoutInflater.inflate(anyInt(), any(ViewGroup.class), anyBoolean()))
|
||||||
.thenReturn(mQsFragmentView);
|
.thenReturn(mQsFragmentView);
|
||||||
mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
|
mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE, mLayoutInflater);
|
||||||
mLayoutInflater);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupQsComponent() {
|
private void setupQsComponent() {
|
||||||
@@ -231,10 +298,38 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
when(mQsFragmentComponent.getQSPanelController()).thenReturn(mQSPanelController);
|
when(mQsFragmentComponent.getQSPanelController()).thenReturn(mQSPanelController);
|
||||||
when(mQsFragmentComponent.getQuickQSPanelController()).thenReturn(mQuickQSPanelController);
|
when(mQsFragmentComponent.getQuickQSPanelController()).thenReturn(mQuickQSPanelController);
|
||||||
when(mQsFragmentComponent.getQSCustomizerController()).thenReturn(mQsCustomizerController);
|
when(mQsFragmentComponent.getQSCustomizerController()).thenReturn(mQsCustomizerController);
|
||||||
when(mQsFragmentComponent.getQSContainerImplController()).thenReturn(
|
when(mQsFragmentComponent.getQSContainerImplController())
|
||||||
mQSContainerImplController);
|
.thenReturn(mQSContainerImplController);
|
||||||
when(mQsFragmentComponent.getQSFooter()).thenReturn(mFooter);
|
when(mQsFragmentComponent.getQSFooter()).thenReturn(mFooter);
|
||||||
when(mQsFragmentComponent.getQSFooterActionController()).thenReturn(
|
when(mQsFragmentComponent.getQSFooterActionController())
|
||||||
mQSFooterActionController);
|
.thenReturn(mQSFooterActionController);
|
||||||
|
when(mQsFragmentComponent.getQSAnimator()).thenReturn(mQSAnimator);
|
||||||
|
}
|
||||||
|
|
||||||
|
private QSFragment getFragment() {
|
||||||
|
return ((QSFragment) mFragment);
|
||||||
|
}
|
||||||
|
|
||||||
|
private QSFragment resumeAndGetFragment() {
|
||||||
|
mFragments.dispatchResume();
|
||||||
|
processAllMessages();
|
||||||
|
return getFragment();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setStatusBarState(int statusBarState) {
|
||||||
|
when(mStatusBarStateController.getState()).thenReturn(statusBarState);
|
||||||
|
getFragment().onStateChanged(statusBarState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableSplitShade() {
|
||||||
|
setSplitShadeEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableSplitShade() {
|
||||||
|
setSplitShadeEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSplitShadeEnabled(boolean enabled) {
|
||||||
|
getFragment().setInSplitShade(enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ import com.android.systemui.qs.customize.QSCustomizerController
|
|||||||
import com.android.systemui.qs.logging.QSLogger
|
import com.android.systemui.qs.logging.QSLogger
|
||||||
import com.android.systemui.settings.brightness.BrightnessController
|
import com.android.systemui.settings.brightness.BrightnessController
|
||||||
import com.android.systemui.settings.brightness.BrightnessSliderController
|
import com.android.systemui.settings.brightness.BrightnessSliderController
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
|
||||||
import com.android.systemui.tuner.TunerService
|
import com.android.systemui.tuner.TunerService
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -52,6 +54,7 @@ class QSPanelControllerTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var mediaHost: MediaHost
|
@Mock private lateinit var mediaHost: MediaHost
|
||||||
@Mock private lateinit var tile: QSTile
|
@Mock private lateinit var tile: QSTile
|
||||||
@Mock private lateinit var otherTile: QSTile
|
@Mock private lateinit var otherTile: QSTile
|
||||||
|
@Mock private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager
|
||||||
|
|
||||||
private lateinit var controller: QSPanelController
|
private lateinit var controller: QSPanelController
|
||||||
|
|
||||||
@@ -62,6 +65,7 @@ class QSPanelControllerTest : SysuiTestCase() {
|
|||||||
whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
|
whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
|
||||||
whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
|
whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
|
||||||
whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources)
|
whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources)
|
||||||
|
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false)
|
||||||
|
|
||||||
controller = QSPanelController(
|
controller = QSPanelController(
|
||||||
qsPanel,
|
qsPanel,
|
||||||
@@ -80,7 +84,8 @@ class QSPanelControllerTest : SysuiTestCase() {
|
|||||||
brightnessControllerFactory,
|
brightnessControllerFactory,
|
||||||
brightnessSliderFactory,
|
brightnessSliderFactory,
|
||||||
falsingManager,
|
falsingManager,
|
||||||
featureFlags
|
featureFlags,
|
||||||
|
statusBarKeyguardViewManager
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,4 +114,12 @@ class QSPanelControllerTest : SysuiTestCase() {
|
|||||||
verify(tile).refreshState()
|
verify(tile).refreshState()
|
||||||
verify(otherTile, Mockito.never()).refreshState()
|
verify(otherTile, Mockito.never()).refreshState()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testBouncerIsInTransit() {
|
||||||
|
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true)
|
||||||
|
assertThat(controller.bouncerInTransit()).isEqualTo(true)
|
||||||
|
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false)
|
||||||
|
assertThat(controller.bouncerInTransit()).isEqualTo(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,6 +119,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
// event-dispatch-on-registration pattern caused some of these unit tests to fail.)
|
// event-dispatch-on-registration pattern caused some of these unit tests to fail.)
|
||||||
@Mock
|
@Mock
|
||||||
private PanelExpansionStateManager mPanelExpansionStateManager;
|
private PanelExpansionStateManager mPanelExpansionStateManager;
|
||||||
|
@Mock
|
||||||
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
|
|
||||||
|
|
||||||
private static class AnimatorListener implements Animator.AnimatorListener {
|
private static class AnimatorListener implements Animator.AnimatorListener {
|
||||||
@@ -233,7 +235,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
|
mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
|
||||||
mScreenOffAnimationController,
|
mScreenOffAnimationController,
|
||||||
mPanelExpansionStateManager,
|
mPanelExpansionStateManager,
|
||||||
mKeyguardUnlockAnimationController);
|
mKeyguardUnlockAnimationController,
|
||||||
|
mStatusBarKeyguardViewManager);
|
||||||
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
||||||
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
|
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
|
||||||
mScrimController.setAnimatorListener(mAnimatorListener);
|
mScrimController.setAnimatorListener(mAnimatorListener);
|
||||||
@@ -1234,6 +1237,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotificationTransparency_followsPanelExpansionInShadeLockedState() {
|
public void testNotificationTransparency_followsPanelExpansionInShadeLockedState() {
|
||||||
|
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||||
|
|
||||||
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0f, /* expansion */ 0.8f);
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0f, /* expansion */ 0.8f);
|
||||||
@@ -1242,6 +1247,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotificationTransparency_unnocclusion() {
|
public void testNotificationTransparency_unnocclusion() {
|
||||||
|
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||||
mScrimController.setUnocclusionAnimationRunning(true);
|
mScrimController.setUnocclusionAnimationRunning(true);
|
||||||
|
|
||||||
@@ -1255,6 +1262,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotificationTransparency_inKeyguardState() {
|
public void testNotificationTransparency_inKeyguardState() {
|
||||||
|
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||||
|
|
||||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||||
|
|
||||||
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 1f, /* expansion */ 0.8f);
|
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 1f, /* expansion */ 0.8f);
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
|
|||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.unfold.SysUIUnfoldComponent;
|
import com.android.systemui.unfold.SysUIUnfoldComponent;
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -434,4 +436,14 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
verify(mBouncer).updateKeyguardPosition(1.0f);
|
verify(mBouncer).updateKeyguardPosition(1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBouncerIsInTransit() {
|
||||||
|
when(mBouncer.inTransit()).thenReturn(true);
|
||||||
|
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isTrue();
|
||||||
|
when(mBouncer.inTransit()).thenReturn(false);
|
||||||
|
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse();
|
||||||
|
mBouncer = null;
|
||||||
|
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user