[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:
@@ -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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user