[DO NOT MERGE] Unfold refactor

1. Use Optional instead of Lazy to make it easier to test if an object
is available or not, which helps remove injection of
UnfoldConfiguration everywhere
2. Remove unnecessary items from StatusBar constructor. They do not
support StatusBar or otherwise part of the dependency graph. Rather
they only need to be initialized.
3. Begin work on unfold animation for keyguard

Bug: 201410717
Test: atest SystemUiTests
Change-Id: I40e280c904e38d877df424b31a9d1af90c39145e
This commit is contained in:
Matt Pietal
2021-11-03 17:20:07 -04:00
parent 0759523698
commit 61b224cc8d
20 changed files with 259 additions and 126 deletions

View File

@@ -0,0 +1,49 @@
/*
* Copyright (C) 2021 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.keyguard
import android.view.ViewGroup
import com.android.systemui.unfold.SysUIUnfoldScope
import com.android.systemui.unfold.UnfoldTransitionProgressProvider
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import javax.inject.Inject
/**
* Translates items away/towards the hinge when the device is opened/closed.
*/
@SysUIUnfoldScope
class KeyguardUnfoldTransition @Inject constructor(
val unfoldProgressProvider: UnfoldTransitionProgressProvider
) {
init {
unfoldProgressProvider.addCallback(
object : TransitionProgressListener {
override fun onTransitionStarted() {
}
override fun onTransitionProgress(progress: Float) {
}
override fun onTransitionFinished() {
}
}
)
}
fun setup(parent: ViewGroup) {
}
}

View File

@@ -25,6 +25,8 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.people.PeopleProvider; import com.android.systemui.people.PeopleProvider;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
import com.android.wm.shell.ShellCommandHandler; import com.android.wm.shell.ShellCommandHandler;
import com.android.wm.shell.TaskViewFactory; import com.android.wm.shell.TaskViewFactory;
import com.android.wm.shell.apppairs.AppPairs; import com.android.wm.shell.apppairs.AppPairs;
@@ -112,7 +114,14 @@ public interface SysUIComponent {
* Initializes all the SysUI components. * Initializes all the SysUI components.
*/ */
default void init() { default void init() {
// Do nothing // Initialize components that have no direct tie to the dagger dependency graph,
// but are critical to this component's operation
// TODO(b/205034537): I think this is a good idea?
getSysUIUnfoldComponent().ifPresent(c -> {
c.getUnfoldLightRevealOverlayAnimation().init();
c.getUnfoldTransitionWallpaperController().init();
});
getNaturalRotationUnfoldProgressProvider().ifPresent(o -> o.init());
} }
/** /**
@@ -149,6 +158,16 @@ public interface SysUIComponent {
@SysUISingleton @SysUISingleton
InitController getInitController(); InitController getInitController();
/**
* For devices with a hinge: access objects within this component
*/
Optional<SysUIUnfoldComponent> getSysUIUnfoldComponent();
/**
* For devices with a hinge: the rotation animation
*/
Optional<NaturalRotationUnfoldProgressProvider> getNaturalRotationUnfoldProgressProvider();
/** /**
* Member injection into the supplied argument. * Member injection into the supplied argument.
*/ */

View File

@@ -72,6 +72,7 @@ import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule;
import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule;
import com.android.systemui.tuner.dagger.TunerModule; import com.android.systemui.tuner.dagger.TunerModule;
import com.android.systemui.unfold.SysUIUnfoldModule;
import com.android.systemui.user.UserModule; import com.android.systemui.user.UserModule;
import com.android.systemui.util.concurrency.SysUIConcurrencyModule; import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
import com.android.systemui.util.dagger.UtilModule; import com.android.systemui.util.dagger.UtilModule;
@@ -113,6 +114,7 @@ import dagger.Provides;
SmartRepliesInflationModule.class, SmartRepliesInflationModule.class,
StatusBarPolicyModule.class, StatusBarPolicyModule.class,
SysUIConcurrencyModule.class, SysUIConcurrencyModule.class,
SysUIUnfoldModule.class,
TunerModule.class, TunerModule.class,
UserModule.class, UserModule.class,
UtilModule.class, UtilModule.class,

View File

@@ -122,13 +122,14 @@ import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -814,8 +815,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
private DeviceConfigProxy mDeviceConfig; private DeviceConfigProxy mDeviceConfig;
private DozeParameters mDozeParameters; private DozeParameters mDozeParameters;
private final UnfoldTransitionConfig mUnfoldTransitionConfig; private final Optional<UnfoldLightRevealOverlayAnimation> mUnfoldLightRevealAnimation;
private final Lazy<UnfoldLightRevealOverlayAnimation> mUnfoldLightRevealAnimation;
private final AtomicInteger mPendingDrawnTasks = new AtomicInteger(); private final AtomicInteger mPendingDrawnTasks = new AtomicInteger();
private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController;
@@ -840,8 +840,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
NavigationModeController navigationModeController, NavigationModeController navigationModeController,
KeyguardDisplayManager keyguardDisplayManager, KeyguardDisplayManager keyguardDisplayManager,
DozeParameters dozeParameters, DozeParameters dozeParameters,
UnfoldTransitionConfig unfoldTransitionConfig, Optional<SysUIUnfoldComponent> unfoldComponent,
Lazy<UnfoldLightRevealOverlayAnimation> unfoldLightRevealOverlayAnimation,
SysuiStatusBarStateController statusBarStateController, SysuiStatusBarStateController statusBarStateController,
KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController,
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationControllerLazy, Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationControllerLazy,
@@ -875,8 +874,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
mInGestureNavigationMode = QuickStepContract.isGesturalMode(mode); mInGestureNavigationMode = QuickStepContract.isGesturalMode(mode);
})); }));
mDozeParameters = dozeParameters; mDozeParameters = dozeParameters;
mUnfoldTransitionConfig = unfoldTransitionConfig; mUnfoldLightRevealAnimation = unfoldComponent.map(
mUnfoldLightRevealAnimation = unfoldLightRevealOverlayAnimation; c -> c.getUnfoldLightRevealOverlayAnimation());
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
statusBarStateController.addCallback(this); statusBarStateController.addCallback(this);
@@ -2560,7 +2559,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
synchronized (KeyguardViewMediator.this) { synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleNotifyScreenTurningOn"); if (DEBUG) Log.d(TAG, "handleNotifyScreenTurningOn");
if (mUnfoldTransitionConfig.isEnabled()) { if (mUnfoldLightRevealAnimation.isPresent()) {
mPendingDrawnTasks.set(2); // unfold overlay and keyguard drawn mPendingDrawnTasks.set(2); // unfold overlay and keyguard drawn
mUnfoldLightRevealAnimation.get() mUnfoldLightRevealAnimation.get()

View File

@@ -49,11 +49,11 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager;
import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import dagger.Lazy; import dagger.Lazy;
@@ -92,8 +92,7 @@ public class KeyguardModule {
NavigationModeController navigationModeController, NavigationModeController navigationModeController,
KeyguardDisplayManager keyguardDisplayManager, KeyguardDisplayManager keyguardDisplayManager,
DozeParameters dozeParameters, DozeParameters dozeParameters,
UnfoldTransitionConfig unfoldTransitionConfig, Optional<SysUIUnfoldComponent> unfoldComponent,
Lazy<UnfoldLightRevealOverlayAnimation> unfoldLightRevealOverlayAnimation,
SysuiStatusBarStateController statusBarStateController, SysuiStatusBarStateController statusBarStateController,
KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController,
Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController, Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
@@ -116,8 +115,7 @@ public class KeyguardModule {
navigationModeController, navigationModeController,
keyguardDisplayManager, keyguardDisplayManager,
dozeParameters, dozeParameters,
unfoldTransitionConfig, unfoldComponent,
unfoldLightRevealOverlayAnimation,
statusBarStateController, statusBarStateController,
keyguardStateController, keyguardStateController,
keyguardUnlockAnimationController, keyguardUnlockAnimationController,

View File

@@ -99,6 +99,7 @@ import com.android.internal.policy.SystemBarUtils;
import com.android.internal.util.LatencyTracker; import com.android.internal.util.LatencyTracker;
import com.android.keyguard.KeyguardStatusView; import com.android.keyguard.KeyguardStatusView;
import com.android.keyguard.KeyguardStatusViewController; import com.android.keyguard.KeyguardStatusViewController;
import com.android.keyguard.KeyguardUnfoldTransition;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.LockIconViewController; import com.android.keyguard.LockIconViewController;
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent; import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
@@ -178,6 +179,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.util.Utils; import com.android.systemui.util.Utils;
import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.wallet.controller.QuickAccessWalletController; import com.android.systemui.wallet.controller.QuickAccessWalletController;
@@ -188,6 +190,7 @@ import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -605,6 +608,8 @@ public class NotificationPanelViewController extends PanelViewController {
private boolean mStatusViewCentered = true; private boolean mStatusViewCentered = true;
private Optional<KeyguardUnfoldTransition> mKeyguardUnfoldTransition;
private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() { private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() {
@Override @Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
@@ -694,6 +699,7 @@ public class NotificationPanelViewController extends PanelViewController {
LockscreenGestureLogger lockscreenGestureLogger, LockscreenGestureLogger lockscreenGestureLogger,
PanelExpansionStateManager panelExpansionStateManager, PanelExpansionStateManager panelExpansionStateManager,
NotificationRemoteInputManager remoteInputManager, NotificationRemoteInputManager remoteInputManager,
Optional<SysUIUnfoldComponent> unfoldComponent,
ControlsComponent controlsComponent, ControlsComponent controlsComponent,
FeatureFlags featureFlags) { FeatureFlags featureFlags) {
super(view, super(view,
@@ -809,6 +815,7 @@ public class NotificationPanelViewController extends PanelViewController {
} }
mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count); mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count);
mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition());
updateUserSwitcherFlags(); updateUserSwitcherFlags();
onFinishInflate(); onFinishInflate();
@@ -839,11 +846,12 @@ public class NotificationPanelViewController extends PanelViewController {
.getKeyguardStatusBarViewController(); .getKeyguardStatusBarViewController();
mKeyguardStatusBarViewController.init(); mKeyguardStatusBarViewController.init();
mNotificationContainerParent = mView.findViewById(R.id.notification_container_parent);
updateViewControllers( updateViewControllers(
mView.findViewById(R.id.keyguard_status_view), mView.findViewById(R.id.keyguard_status_view),
userAvatarContainer, userAvatarContainer,
keyguardUserSwitcherView); keyguardUserSwitcherView);
mNotificationContainerParent = mView.findViewById(R.id.notification_container_parent);
NotificationStackScrollLayout stackScrollLayout = mView.findViewById( NotificationStackScrollLayout stackScrollLayout = mView.findViewById(
R.id.notification_stack_scroller); R.id.notification_stack_scroller);
mNotificationStackScrollLayoutController.attach(stackScrollLayout); mNotificationStackScrollLayoutController.attach(stackScrollLayout);
@@ -894,6 +902,7 @@ public class NotificationPanelViewController extends PanelViewController {
} }
mTapAgainViewController.init(); mTapAgainViewController.init();
mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mNotificationContainerParent));
} }
@Override @Override
@@ -1137,6 +1146,8 @@ public class NotificationPanelViewController extends PanelViewController {
mBarState); mBarState);
} }
setKeyguardBottomAreaVisibility(mBarState, false); setKeyguardBottomAreaVisibility(mBarState, false);
mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mNotificationContainerParent));
} }
private void attachSplitShadeMediaPlayerContainer(FrameLayout container) { private void attachSplitShadeMediaPlayerContainer(FrameLayout container) {

View File

@@ -21,21 +21,21 @@ import android.view.ViewGroup
import android.view.ViewTreeObserver import android.view.ViewTreeObserver
import com.android.systemui.R import com.android.systemui.R
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.CommandQueue import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UNFOLD_STATUS_BAR import com.android.systemui.unfold.UNFOLD_STATUS_BAR
import com.android.systemui.unfold.config.UnfoldTransitionConfig
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.util.ViewController import com.android.systemui.util.ViewController
import com.android.systemui.util.kotlin.getOrNull
import java.util.Optional
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
import dagger.Lazy
/** Controller for [PhoneStatusBarView]. */ /** Controller for [PhoneStatusBarView]. */
class PhoneStatusBarViewController private constructor( class PhoneStatusBarViewController private constructor(
view: PhoneStatusBarView, view: PhoneStatusBarView,
@Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider?, @Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider?,
private val moveFromCenterAnimationController: StatusBarMoveFromCenterAnimationController?, private val moveFromCenterAnimationController: StatusBarMoveFromCenterAnimationController?,
touchEventHandler: PhoneStatusBarView.TouchEventHandler, touchEventHandler: PhoneStatusBarView.TouchEventHandler
) : ViewController<PhoneStatusBarView>(view) { ) : ViewController<PhoneStatusBarView>(view) {
override fun onViewAttached() { override fun onViewAttached() {
@@ -115,21 +115,21 @@ class PhoneStatusBarViewController private constructor(
} }
class Factory @Inject constructor( class Factory @Inject constructor(
private val unfoldComponent: Optional<SysUIUnfoldComponent>,
@Named(UNFOLD_STATUS_BAR) @Named(UNFOLD_STATUS_BAR)
private val progressProvider: Lazy<ScopedUnfoldTransitionProgressProvider>, private val progressProvider: Optional<ScopedUnfoldTransitionProgressProvider>
private val moveFromCenterController: Lazy<StatusBarMoveFromCenterAnimationController>,
private val unfoldConfig: UnfoldTransitionConfig,
) { ) {
fun create( fun create(
view: PhoneStatusBarView, view: PhoneStatusBarView,
touchEventHandler: PhoneStatusBarView.TouchEventHandler touchEventHandler: PhoneStatusBarView.TouchEventHandler
): PhoneStatusBarViewController { ) =
return PhoneStatusBarViewController( PhoneStatusBarViewController(
view, view,
if (unfoldConfig.isEnabled) progressProvider.get() else null, progressProvider.getOrNull(),
if (unfoldConfig.isEnabled) moveFromCenterController.get() else null, unfoldComponent.map {
it.getStatusBarMoveFromCenterAnimationController()
}.getOrNull(),
touchEventHandler touchEventHandler
) )
} }
} }
}

View File

@@ -230,10 +230,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
import com.android.systemui.unfold.UnfoldTransitionWallpaperController;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
import com.android.systemui.util.DumpUtilsKt; import com.android.systemui.util.DumpUtilsKt;
import com.android.systemui.util.WallpaperController; import com.android.systemui.util.WallpaperController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -540,10 +536,7 @@ public class StatusBar extends SystemUI implements
protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider; protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
private final BrightnessSliderController.Factory mBrightnessSliderFactory; private final BrightnessSliderController.Factory mBrightnessSliderFactory;
private final FeatureFlags mFeatureFlags; private final FeatureFlags mFeatureFlags;
private final UnfoldTransitionConfig mUnfoldTransitionConfig;
private final Lazy<UnfoldLightRevealOverlayAnimation> mUnfoldLightRevealOverlayAnimation;
private final Lazy<NaturalRotationUnfoldProgressProvider> mNaturalUnfoldProgressProvider;
private final Lazy<UnfoldTransitionWallpaperController> mUnfoldWallpaperController;
private final WallpaperController mWallpaperController; private final WallpaperController mWallpaperController;
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController; private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
private final MessageRouter mMessageRouter; private final MessageRouter mMessageRouter;
@@ -777,10 +770,6 @@ public class StatusBar extends SystemUI implements
StatusBarTouchableRegionManager statusBarTouchableRegionManager, StatusBarTouchableRegionManager statusBarTouchableRegionManager,
NotificationIconAreaController notificationIconAreaController, NotificationIconAreaController notificationIconAreaController,
BrightnessSliderController.Factory brightnessSliderFactory, BrightnessSliderController.Factory brightnessSliderFactory,
UnfoldTransitionConfig unfoldTransitionConfig,
Lazy<UnfoldLightRevealOverlayAnimation> unfoldLightRevealOverlayAnimation,
Lazy<UnfoldTransitionWallpaperController> unfoldTransitionWallpaperController,
Lazy<NaturalRotationUnfoldProgressProvider> naturalRotationUnfoldProgressProvider,
WallpaperController wallpaperController, WallpaperController wallpaperController,
OngoingCallController ongoingCallController, OngoingCallController ongoingCallController,
SystemStatusAnimationScheduler animationScheduler, SystemStatusAnimationScheduler animationScheduler,
@@ -876,10 +865,6 @@ public class StatusBar extends SystemUI implements
mDemoModeController = demoModeController; mDemoModeController = demoModeController;
mNotificationIconAreaController = notificationIconAreaController; mNotificationIconAreaController = notificationIconAreaController;
mBrightnessSliderFactory = brightnessSliderFactory; mBrightnessSliderFactory = brightnessSliderFactory;
mUnfoldTransitionConfig = unfoldTransitionConfig;
mUnfoldLightRevealOverlayAnimation = unfoldLightRevealOverlayAnimation;
mNaturalUnfoldProgressProvider = naturalRotationUnfoldProgressProvider;
mUnfoldWallpaperController = unfoldTransitionWallpaperController;
mWallpaperController = wallpaperController; mWallpaperController = wallpaperController;
mOngoingCallController = ongoingCallController; mOngoingCallController = ongoingCallController;
mAnimationScheduler = animationScheduler; mAnimationScheduler = animationScheduler;
@@ -1067,12 +1052,6 @@ public class StatusBar extends SystemUI implements
mFalsingManager.addFalsingBeliefListener(mFalsingBeliefListener); mFalsingManager.addFalsingBeliefListener(mFalsingBeliefListener);
if (mUnfoldTransitionConfig.isEnabled()) {
mUnfoldLightRevealOverlayAnimation.get().init();
mUnfoldWallpaperController.get().init();
mNaturalUnfoldProgressProvider.get().init();
}
mPluginManager.addPluginListener( mPluginManager.addPluginListener(
new PluginListener<OverlayPlugin>() { new PluginListener<OverlayPlugin>() {
private final ArraySet<OverlayPlugin> mOverlays = new ArraySet<>(); private final ArraySet<OverlayPlugin> mOverlays = new ArraySet<>();
@@ -4514,5 +4493,4 @@ public class StatusBar extends SystemUI implements
return mStartingSurfaceOptional.get().getBackgroundColor(task); return mStartingSurfaceOptional.get().getBackgroundColor(task);
} }
}; };
} }

View File

@@ -17,19 +17,17 @@ package com.android.systemui.statusbar.phone
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.ViewCenterProvider import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.ViewCenterProvider
import com.android.systemui.unfold.UNFOLD_STATUS_BAR import com.android.systemui.unfold.SysUIUnfoldScope
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named
@SysUISingleton @SysUIUnfoldScope
class StatusBarMoveFromCenterAnimationController @Inject constructor( class StatusBarMoveFromCenterAnimationController @Inject constructor(
@Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider, private val progressProvider: ScopedUnfoldTransitionProgressProvider,
private val windowManager: WindowManager, private val windowManager: WindowManager
) { ) {
private val transitionListener = TransitionListener() private val transitionListener = TransitionListener()

View File

@@ -95,7 +95,6 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
@@ -109,10 +108,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
import com.android.systemui.unfold.UnfoldTransitionWallpaperController;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
import com.android.systemui.util.WallpaperController; import com.android.systemui.util.WallpaperController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.concurrency.MessageRouter; import com.android.systemui.util.concurrency.MessageRouter;
@@ -222,11 +217,6 @@ public interface StatusBarPhoneModule {
StatusBarTouchableRegionManager statusBarTouchableRegionManager, StatusBarTouchableRegionManager statusBarTouchableRegionManager,
NotificationIconAreaController notificationIconAreaController, NotificationIconAreaController notificationIconAreaController,
BrightnessSliderController.Factory brightnessSliderFactory, BrightnessSliderController.Factory brightnessSliderFactory,
UnfoldTransitionConfig unfoldTransitionConfig,
Lazy<UnfoldLightRevealOverlayAnimation> unfoldLightRevealOverlayAnimation,
Lazy<NaturalRotationUnfoldProgressProvider> naturalRotationUnfoldProgressProvider,
Lazy<UnfoldTransitionWallpaperController> unfoldTransitionWallpaperController,
Lazy<StatusBarMoveFromCenterAnimationController> statusBarMoveFromCenterAnimation,
WallpaperController wallpaperController, WallpaperController wallpaperController,
OngoingCallController ongoingCallController, OngoingCallController ongoingCallController,
SystemStatusAnimationScheduler animationScheduler, SystemStatusAnimationScheduler animationScheduler,
@@ -324,10 +314,6 @@ public interface StatusBarPhoneModule {
statusBarTouchableRegionManager, statusBarTouchableRegionManager,
notificationIconAreaController, notificationIconAreaController,
brightnessSliderFactory, brightnessSliderFactory,
unfoldTransitionConfig,
unfoldLightRevealOverlayAnimation,
unfoldTransitionWallpaperController,
naturalRotationUnfoldProgressProvider,
wallpaperController, wallpaperController,
ongoingCallController, ongoingCallController,
animationScheduler, animationScheduler,

View File

@@ -0,0 +1,76 @@
/*
* Copyright (C) 2021 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.unfold
import com.android.keyguard.KeyguardUnfoldTransition
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController
import dagger.BindsInstance
import dagger.Module
import dagger.Provides
import dagger.Subcomponent
import java.util.Optional
import javax.inject.Named
import javax.inject.Scope
@Scope
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class SysUIUnfoldScope
/**
* Creates an injectable [SysUIUnfoldComponent] that provides objects that have been scoped with
* [@SysUIUnfoldScope]. Since [SysUIUnfoldComponent] depends upon:
* * [Optional<UnfoldTransitionProgressProvider>]
* * [Optional<ScopedUnfoldTransitionProgressProvider>]
* no objects will get constructed if these parameters are empty.
*/
@Module(subcomponents = [SysUIUnfoldComponent::class])
object SysUIUnfoldModule {
@Provides
@SysUISingleton
fun provideSysUIUnfoldComponent(
provider: Optional<UnfoldTransitionProgressProvider>,
@Named(UNFOLD_STATUS_BAR) scopedProvider: Optional<ScopedUnfoldTransitionProgressProvider>,
factory: SysUIUnfoldComponent.Factory
) =
provider.flatMap {
p -> scopedProvider.map { sp -> factory.create(p, sp) }
}
}
@SysUIUnfoldScope
@Subcomponent
interface SysUIUnfoldComponent {
@Subcomponent.Factory
interface Factory {
fun create(
@BindsInstance provider: UnfoldTransitionProgressProvider,
@BindsInstance scopedProvider: ScopedUnfoldTransitionProgressProvider
): SysUIUnfoldComponent
}
fun getKeyguardUnfoldTransition(): KeyguardUnfoldTransition
fun getStatusBarMoveFromCenterAnimationController(): StatusBarMoveFromCenterAnimationController
fun getUnfoldTransitionWallpaperController(): UnfoldTransitionWallpaperController
fun getUnfoldLightRevealOverlayAnimation(): UnfoldLightRevealOverlayAnimation
}

View File

@@ -31,7 +31,6 @@ import android.view.SurfaceControlViewHost
import android.view.SurfaceSession import android.view.SurfaceSession
import android.view.WindowManager import android.view.WindowManager
import android.view.WindowlessWindowManager import android.view.WindowlessWindowManager
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dagger.qualifiers.UiBackground import com.android.systemui.dagger.qualifiers.UiBackground
import com.android.systemui.statusbar.LightRevealEffect import com.android.systemui.statusbar.LightRevealEffect
@@ -44,7 +43,7 @@ import java.util.concurrent.Executor
import java.util.function.Consumer import java.util.function.Consumer
import javax.inject.Inject import javax.inject.Inject
@SysUISingleton @SysUIUnfoldScope
class UnfoldLightRevealOverlayAnimation @Inject constructor( class UnfoldLightRevealOverlayAnimation @Inject constructor(
private val context: Context, private val context: Context,
private val deviceStateManager: DeviceStateManager, private val deviceStateManager: DeviceStateManager,

View File

@@ -21,7 +21,7 @@ import com.android.wm.shell.unfold.ShellUnfoldProgressProvider
import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener
import java.util.concurrent.Executor import java.util.concurrent.Executor
class ShellUnfoldProgressProvider( class UnfoldProgressProvider(
private val unfoldProgressProvider: UnfoldTransitionProgressProvider private val unfoldProgressProvider: UnfoldTransitionProgressProvider
) : ShellUnfoldProgressProvider { ) : ShellUnfoldProgressProvider {

View File

@@ -43,21 +43,27 @@ class UnfoldTransitionModule {
fun provideUnfoldTransitionProgressProvider( fun provideUnfoldTransitionProgressProvider(
context: Context, context: Context,
config: UnfoldTransitionConfig, config: UnfoldTransitionConfig,
screenStatusProvider: LifecycleScreenStatusProvider, screenStatusProvider: Lazy<LifecycleScreenStatusProvider>,
deviceStateManager: DeviceStateManager, deviceStateManager: DeviceStateManager,
sensorManager: SensorManager, sensorManager: SensorManager,
@Main executor: Executor, @Main executor: Executor,
@Main handler: Handler @Main handler: Handler
): UnfoldTransitionProgressProvider = ) =
if (config.isEnabled) {
Optional.of(
createUnfoldTransitionProgressProvider( createUnfoldTransitionProgressProvider(
context, context,
config, config,
screenStatusProvider, screenStatusProvider.get(),
deviceStateManager, deviceStateManager,
sensorManager, sensorManager,
handler, handler,
executor executor
) )
)
} else {
Optional.empty()
}
@Provides @Provides
@Singleton @Singleton
@@ -69,30 +75,34 @@ class UnfoldTransitionModule {
fun provideNaturalRotationProgressProvider( fun provideNaturalRotationProgressProvider(
context: Context, context: Context,
windowManager: IWindowManager, windowManager: IWindowManager,
unfoldTransitionProgressProvider: UnfoldTransitionProgressProvider unfoldTransitionProgressProvider: Optional<UnfoldTransitionProgressProvider>
): NaturalRotationUnfoldProgressProvider = ) =
NaturalRotationUnfoldProgressProvider( unfoldTransitionProgressProvider.map {
provider -> NaturalRotationUnfoldProgressProvider(
context, context,
windowManager, windowManager,
unfoldTransitionProgressProvider provider
) )
}
@Provides @Provides
@Named(UNFOLD_STATUS_BAR) @Named(UNFOLD_STATUS_BAR)
@Singleton @Singleton
fun provideStatusBarScopedTransitionProvider( fun provideStatusBarScopedTransitionProvider(
source: NaturalRotationUnfoldProgressProvider source: Optional<NaturalRotationUnfoldProgressProvider>
): ScopedUnfoldTransitionProgressProvider = ) =
ScopedUnfoldTransitionProgressProvider(source) source.map {
provider -> ScopedUnfoldTransitionProgressProvider(provider)
}
@Provides @Provides
@Singleton @Singleton
fun provideShellProgressProvider( fun provideShellProgressProvider(
config: UnfoldTransitionConfig, config: UnfoldTransitionConfig,
provider: Lazy<UnfoldTransitionProgressProvider> provider: Optional<UnfoldTransitionProgressProvider>
): Optional<ShellUnfoldProgressProvider> = ): Optional<ShellUnfoldProgressProvider> =
if (config.isEnabled) { if (config.isEnabled && provider.isPresent()) {
Optional.ofNullable(ShellUnfoldProgressProvider(provider.get())) Optional.of(UnfoldProgressProvider(provider.get()))
} else { } else {
Optional.empty() Optional.empty()
} }

View File

@@ -16,12 +16,11 @@
package com.android.systemui.unfold package com.android.systemui.unfold
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
import com.android.systemui.util.WallpaperController import com.android.systemui.util.WallpaperController
import javax.inject.Inject import javax.inject.Inject
@SysUISingleton @SysUIUnfoldScope
class UnfoldTransitionWallpaperController @Inject constructor( class UnfoldTransitionWallpaperController @Inject constructor(
private val unfoldTransitionProgressProvider: UnfoldTransitionProgressProvider, private val unfoldTransitionProgressProvider: UnfoldTransitionProgressProvider,
private val wallpaperController: WallpaperController private val wallpaperController: WallpaperController

View File

@@ -16,7 +16,14 @@
package com.android.systemui.util.kotlin package com.android.systemui.util.kotlin
import java.util.Optional
/** /**
* If [value] is not null, then returns block(value). Otherwise returns null. * If [value] is not null, then returns block(value). Otherwise returns null.
*/ */
inline fun <T : Any, R> transform(value: T?, block: (T) -> R): R? = value?.let(block) inline fun <T : Any, R> transform(value: T?, block: (T) -> R): R? = value?.let(block)
/**
* Assists type-checking to unpack a Java Optional into T?
*/
inline fun <T> Optional<T>.getOrNull(): T? = orElse(null)

View File

@@ -57,17 +57,21 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
import java.util.Optional;
import java.util.function.Function;
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;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
@@ -90,7 +94,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock NavigationModeController mNavigationModeController; private @Mock NavigationModeController mNavigationModeController;
private @Mock KeyguardDisplayManager mKeyguardDisplayManager; private @Mock KeyguardDisplayManager mKeyguardDisplayManager;
private @Mock DozeParameters mDozeParameters; private @Mock DozeParameters mDozeParameters;
private @Mock UnfoldTransitionConfig mUnfoldTransitionConfig; private @Mock Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent;
private @Mock Optional<UnfoldLightRevealOverlayAnimation> mUnfoldAnimationOptional;
private @Mock UnfoldLightRevealOverlayAnimation mUnfoldAnimation; private @Mock UnfoldLightRevealOverlayAnimation mUnfoldAnimation;
private @Mock SysuiStatusBarStateController mStatusBarStateController; private @Mock SysuiStatusBarStateController mStatusBarStateController;
private @Mock KeyguardStateController mKeyguardStateController; private @Mock KeyguardStateController mKeyguardStateController;
@@ -110,6 +115,12 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
when(mLockPatternUtils.getDevicePolicyManager()).thenReturn(mDevicePolicyManager); when(mLockPatternUtils.getDevicePolicyManager()).thenReturn(mDevicePolicyManager);
when(mPowerManager.newWakeLock(anyInt(), any())).thenReturn(mock(WakeLock.class)); when(mPowerManager.newWakeLock(anyInt(), any())).thenReturn(mock(WakeLock.class));
when(mSysUIUnfoldComponent.map(
ArgumentMatchers.<Function<SysUIUnfoldComponent, UnfoldLightRevealOverlayAnimation>>
any()))
.thenReturn(mUnfoldAnimationOptional);
when(mUnfoldAnimationOptional.isPresent()).thenReturn(true);
when(mUnfoldAnimationOptional.get()).thenReturn(mUnfoldAnimation);
mViewMediator = new KeyguardViewMediator( mViewMediator = new KeyguardViewMediator(
mContext, mContext,
@@ -128,8 +139,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mNavigationModeController, mNavigationModeController,
mKeyguardDisplayManager, mKeyguardDisplayManager,
mDozeParameters, mDozeParameters,
mUnfoldTransitionConfig, mSysUIUnfoldComponent,
() -> mUnfoldAnimation,
mStatusBarStateController, mStatusBarStateController,
mKeyguardStateController, mKeyguardStateController,
() -> mKeyguardUnlockAnimationController, () -> mKeyguardUnlockAnimationController,
@@ -161,8 +171,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
@TestableLooper.RunWithLooper(setAsMainLooper = true) @TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testUnfoldTransitionEnabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() public void testUnfoldTransitionEnabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback()
throws RemoteException { throws RemoteException {
when(mUnfoldTransitionConfig.isEnabled()).thenReturn(true);
mViewMediator.onScreenTurningOn(mKeyguardDrawnCallback); mViewMediator.onScreenTurningOn(mKeyguardDrawnCallback);
TestableLooper.get(this).processAllMessages(); TestableLooper.get(this).processAllMessages();
onUnfoldOverlayReady(); onUnfoldOverlayReady();
@@ -175,7 +183,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
@TestableLooper.RunWithLooper(setAsMainLooper = true) @TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback() public void testUnfoldTransitionDisabledDrawnTasksReady_onScreenTurningOn_callsDrawnCallback()
throws RemoteException { throws RemoteException {
when(mUnfoldTransitionConfig.isEnabled()).thenReturn(false); when(mUnfoldAnimationOptional.isPresent()).thenReturn(false);
mViewMediator.onScreenTurningOn(mKeyguardDrawnCallback); mViewMediator.onScreenTurningOn(mKeyguardDrawnCallback);
TestableLooper.get(this).processAllMessages(); TestableLooper.get(this).processAllMessages();

View File

@@ -125,6 +125,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
import com.android.systemui.statusbar.policy.ConfigurationController; 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.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
@@ -140,6 +141,7 @@ import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import java.util.List; import java.util.List;
import java.util.Optional;
@SmallTest @SmallTest
@RunWith(AndroidTestingRunner.class) @RunWith(AndroidTestingRunner.class)
@@ -306,7 +308,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
private NotificationsQSContainerController mNotificationsQSContainerController; private NotificationsQSContainerController mNotificationsQSContainerController;
@Mock @Mock
private FeatureFlags mFeatureFlags; private FeatureFlags mFeatureFlags;
private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent;
private SysuiStatusBarStateController mStatusBarStateController; private SysuiStatusBarStateController mStatusBarStateController;
private NotificationPanelViewController mNotificationPanelViewController; private NotificationPanelViewController mNotificationPanelViewController;
private View.AccessibilityDelegate mAccessibiltyDelegate; private View.AccessibilityDelegate mAccessibiltyDelegate;
@@ -450,6 +452,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
mLockscreenGestureLogger, mLockscreenGestureLogger,
new PanelExpansionStateManager(), new PanelExpansionStateManager(),
mNotificationRemoteInputManager, mNotificationRemoteInputManager,
mSysUIUnfoldComponent,
mControlsComponent, mControlsComponent,
mFeatureFlags); mFeatureFlags);
mNotificationPanelViewController.initDependencies( mNotificationPanelViewController.initDependencies(

View File

@@ -26,6 +26,7 @@ import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.android.systemui.R import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.config.UnfoldTransitionConfig import com.android.systemui.unfold.config.UnfoldTransitionConfig
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any
@@ -39,6 +40,7 @@ import org.mockito.Mockito.mock
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import java.util.Optional
@SmallTest @SmallTest
class PhoneStatusBarViewControllerTest : SysuiTestCase() { class PhoneStatusBarViewControllerTest : SysuiTestCase() {
@@ -51,10 +53,11 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
private lateinit var panelView: ViewGroup private lateinit var panelView: ViewGroup
@Mock @Mock
private lateinit var scrimController: ScrimController private lateinit var scrimController: ScrimController
@Mock @Mock
private lateinit var moveFromCenterAnimation: StatusBarMoveFromCenterAnimationController private lateinit var moveFromCenterAnimation: StatusBarMoveFromCenterAnimationController
@Mock @Mock
private lateinit var sysuiUnfoldComponent: SysUIUnfoldComponent
@Mock
private lateinit var progressProvider: ScopedUnfoldTransitionProgressProvider private lateinit var progressProvider: ScopedUnfoldTransitionProgressProvider
private lateinit var view: PhoneStatusBarView private lateinit var view: PhoneStatusBarView
@@ -66,7 +69,8 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
`when`(panelViewController.view).thenReturn(panelView) `when`(panelViewController.view).thenReturn(panelView)
`when`(sysuiUnfoldComponent.getStatusBarMoveFromCenterAnimationController())
.thenReturn(moveFromCenterAnimation)
// create the view on main thread as it requires main looper // create the view on main thread as it requires main looper
InstrumentationRegistry.getInstrumentation().runOnMainSync { InstrumentationRegistry.getInstrumentation().runOnMainSync {
val parent = FrameLayout(mContext) // add parent to keep layout params val parent = FrameLayout(mContext) // add parent to keep layout params
@@ -112,9 +116,8 @@ class PhoneStatusBarViewControllerTest : SysuiTestCase() {
private fun createController(view: PhoneStatusBarView): PhoneStatusBarViewController { private fun createController(view: PhoneStatusBarView): PhoneStatusBarViewController {
return PhoneStatusBarViewController.Factory( return PhoneStatusBarViewController.Factory(
{ progressProvider }, Optional.of(sysuiUnfoldComponent),
{ moveFromCenterAnimation }, Optional.of(progressProvider)
unfoldConfig
).create(view, touchEventHandler) ).create(view, touchEventHandler)
} }

View File

@@ -142,10 +142,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
import com.android.systemui.unfold.UnfoldTransitionWallpaperController;
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
import com.android.systemui.util.WallpaperController; import com.android.systemui.util.WallpaperController;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.MessageRouterImpl; import com.android.systemui.util.concurrency.MessageRouterImpl;
@@ -259,10 +255,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private DemoModeController mDemoModeController; @Mock private DemoModeController mDemoModeController;
@Mock private Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy; @Mock private Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy;
@Mock private BrightnessSliderController.Factory mBrightnessSliderFactory; @Mock private BrightnessSliderController.Factory mBrightnessSliderFactory;
@Mock private UnfoldTransitionConfig mUnfoldTransitionConfig;
@Mock private Lazy<UnfoldLightRevealOverlayAnimation> mUnfoldLightRevealOverlayAnimationLazy;
@Mock private Lazy<NaturalRotationUnfoldProgressProvider> mNaturalRotationProgressProvider;
@Mock private Lazy<UnfoldTransitionWallpaperController> mUnfoldWallpaperController;
@Mock private WallpaperController mWallpaperController; @Mock private WallpaperController mWallpaperController;
@Mock private OngoingCallController mOngoingCallController; @Mock private OngoingCallController mOngoingCallController;
@Mock private SystemStatusAnimationScheduler mAnimationScheduler; @Mock private SystemStatusAnimationScheduler mAnimationScheduler;
@@ -440,10 +432,6 @@ public class StatusBarTest extends SysuiTestCase {
mStatusBarTouchableRegionManager, mStatusBarTouchableRegionManager,
mNotificationIconAreaController, mNotificationIconAreaController,
mBrightnessSliderFactory, mBrightnessSliderFactory,
mUnfoldTransitionConfig,
mUnfoldLightRevealOverlayAnimationLazy,
mUnfoldWallpaperController,
mNaturalRotationProgressProvider,
mWallpaperController, mWallpaperController,
mOngoingCallController, mOngoingCallController,
mAnimationScheduler, mAnimationScheduler,