Merge "[DO NOT MERGE] Unfold refactor" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6bd4a6638a
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ 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.statusbar.window.StatusBarWindowModule;
|
import com.android.systemui.statusbar.window.StatusBarWindowModule;
|
||||||
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;
|
||||||
@@ -115,6 +116,7 @@ import dagger.Provides;
|
|||||||
StatusBarPolicyModule.class,
|
StatusBarPolicyModule.class,
|
||||||
StatusBarWindowModule.class,
|
StatusBarWindowModule.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
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,10 +232,6 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
|
|||||||
import com.android.systemui.statusbar.window.StatusBarWindowController;
|
import com.android.systemui.statusbar.window.StatusBarWindowController;
|
||||||
import com.android.systemui.statusbar.window.StatusBarWindowView;
|
import com.android.systemui.statusbar.window.StatusBarWindowView;
|
||||||
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;
|
||||||
@@ -542,10 +538,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;
|
||||||
@@ -780,10 +773,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,
|
||||||
@@ -880,10 +869,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;
|
||||||
@@ -1071,12 +1056,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<>();
|
||||||
@@ -4517,5 +4496,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;
|
||||||
@@ -110,10 +109,6 @@ 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.statusbar.window.StatusBarWindowController;
|
import com.android.systemui.statusbar.window.StatusBarWindowController;
|
||||||
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;
|
||||||
@@ -224,11 +219,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,
|
||||||
@@ -327,10 +317,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 =
|
) =
|
||||||
createUnfoldTransitionProgressProvider(
|
if (config.isEnabled) {
|
||||||
context,
|
Optional.of(
|
||||||
config,
|
createUnfoldTransitionProgressProvider(
|
||||||
screenStatusProvider,
|
context,
|
||||||
deviceStateManager,
|
config,
|
||||||
sensorManager,
|
screenStatusProvider.get(),
|
||||||
handler,
|
deviceStateManager,
|
||||||
executor
|
sensorManager,
|
||||||
)
|
handler,
|
||||||
|
executor
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Optional.empty()
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -69,33 +75,37 @@ class UnfoldTransitionModule {
|
|||||||
fun provideNaturalRotationProgressProvider(
|
fun provideNaturalRotationProgressProvider(
|
||||||
context: Context,
|
context: Context,
|
||||||
windowManager: IWindowManager,
|
windowManager: IWindowManager,
|
||||||
unfoldTransitionProgressProvider: UnfoldTransitionProgressProvider
|
unfoldTransitionProgressProvider: Optional<UnfoldTransitionProgressProvider>
|
||||||
): NaturalRotationUnfoldProgressProvider =
|
) =
|
||||||
NaturalRotationUnfoldProgressProvider(
|
unfoldTransitionProgressProvider.map {
|
||||||
context,
|
provider -> NaturalRotationUnfoldProgressProvider(
|
||||||
windowManager,
|
context,
|
||||||
unfoldTransitionProgressProvider
|
windowManager,
|
||||||
)
|
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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const val UNFOLD_STATUS_BAR = "unfold_status_bar"
|
const val UNFOLD_STATUS_BAR = "unfold_status_bar"
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,10 +143,6 @@ 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.statusbar.window.StatusBarWindowController;
|
import com.android.systemui.statusbar.window.StatusBarWindowController;
|
||||||
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;
|
||||||
@@ -261,10 +257,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;
|
||||||
@@ -443,10 +435,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