Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java +3 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger; import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; Loading Loading @@ -158,6 +159,7 @@ public abstract class StatusBarViewModule { StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, KeyguardStateController keyguardStateController, ShadeViewController shadeViewController, Loading @@ -182,6 +184,7 @@ public abstract class StatusBarViewModule { statusBarIconController, darkIconManagerFactory, collapsedStatusBarViewModel, collapsedStatusBarViewBinder, statusBarHideIconsForBouncerManager, keyguardStateController, shadeViewController, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +43 −10 Original line number Diff line number Diff line Loading @@ -14,8 +14,6 @@ package com.android.systemui.statusbar.phone.fragment; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.IDLE; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT; Loading Loading @@ -69,6 +67,7 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener; import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; Loading Loading @@ -131,6 +130,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final StatusBarIconController mStatusBarIconController; private final CarrierConfigTracker mCarrierConfigTracker; private final CollapsedStatusBarViewModel mCollapsedStatusBarViewModel; private final CollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder; private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; private final StatusBarIconController.DarkIconManager.Factory mDarkIconManagerFactory; private final SecureSettings mSecureSettings; Loading Loading @@ -182,12 +182,22 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue */ private boolean mWaitingForWindowStateChangeAfterCameraLaunch = false; /** * True when a transition from lockscreen to dream has started, but haven't yet received a * status bar window state change afterward. * * Similar to [mWaitingForWindowStateChangeAfterCameraLaunch]. */ private boolean mTransitionFromLockscreenToDreamStarted = false; /** * Listener that updates {@link #mWaitingForWindowStateChangeAfterCameraLaunch} when it receives * a new status bar window state. */ private final StatusBarWindowStateListener mStatusBarWindowStateListener = state -> private final StatusBarWindowStateListener mStatusBarWindowStateListener = state -> { mWaitingForWindowStateChangeAfterCameraLaunch = false; mTransitionFromLockscreenToDreamStarted = false; }; @SuppressLint("ValidFragment") public CollapsedStatusBarFragment( Loading @@ -201,6 +211,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, KeyguardStateController keyguardStateController, ShadeViewController shadeViewController, Loading @@ -224,6 +235,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mFeatureFlags = featureFlags; mStatusBarIconController = statusBarIconController; mCollapsedStatusBarViewModel = collapsedStatusBarViewModel; mCollapsedStatusBarViewBinder = collapsedStatusBarViewBinder; mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager; mDarkIconManagerFactory = darkIconManagerFactory; mKeyguardStateController = keyguardStateController; Loading Loading @@ -296,8 +308,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mCarrierConfigTracker.addCallback(mCarrierConfigCallback); mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener); CollapsedStatusBarViewBinder.bind( mStatusBar, mCollapsedStatusBarViewModel, this::updateStatusBarVisibilities); mCollapsedStatusBarViewBinder.bind( mStatusBar, mCollapsedStatusBarViewModel, mStatusBarVisibilityChangeListener); } @Override Loading Loading @@ -411,6 +423,19 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue return mStatusBarFragmentComponent; } private StatusBarVisibilityChangeListener mStatusBarVisibilityChangeListener = new StatusBarVisibilityChangeListener() { @Override public void onStatusBarVisibilityMaybeChanged() { updateStatusBarVisibilities(/* animate= */ true); } @Override public void onTransitionFromLockscreenToDreamStarted() { mTransitionFromLockscreenToDreamStarted = true; } }; @Override public void disable(int displayId, int state1, int state2, boolean animate) { if (displayId != getContext().getDisplayId()) { Loading @@ -423,10 +448,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue updateStatusBarVisibilities(animate); } private void updateStatusBarVisibilities() { updateStatusBarVisibilities(/* animate= */ true); } private void updateStatusBarVisibilities(boolean animate) { StatusBarVisibilityModel previousModel = mLastModifiedVisibility; StatusBarVisibilityModel newModel = calculateInternalModel(mLastSystemVisibility); Loading Loading @@ -546,6 +567,18 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue return true; } // Similar to [hideIconsForSecureCamera]: When dream is launched over lockscreen, the icons // are momentarily visible because the dream animation has finished, but SysUI has not been // informed that the dream is full-screen. For extra safety, we double-check that we're // still dreaming. final boolean hideIconsForDream = mTransitionFromLockscreenToDreamStarted && mKeyguardUpdateMonitor.isDreaming() && mKeyguardStateController.isOccluded(); if (hideIconsForDream) { return true; } // While the status bar is transitioning from lockscreen to an occluded, we don't yet know // if the occluding activity is fullscreen or not. If it *is* fullscreen, we don't want to // briefly show the status bar just to immediately hide it again. So, we wait for the Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +7 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerPr import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerProxyImpl import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinderImpl import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher Loading Loading @@ -107,6 +109,11 @@ abstract class StatusBarPipelineModule { impl: CollapsedStatusBarViewModelImpl ): CollapsedStatusBarViewModel @Binds abstract fun collapsedStatusBarViewBinder( impl: CollapsedStatusBarViewBinderImpl ): CollapsedStatusBarViewBinder companion object { @Provides @SysUISingleton Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt +36 −9 Original line number Diff line number Diff line Loading @@ -19,34 +19,61 @@ package com.android.systemui.statusbar.pipeline.shared.ui.binder import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel import javax.inject.Inject import kotlinx.coroutines.launch object CollapsedStatusBarViewBinder { /** * Interface to assist with binding the [CollapsedStatusBarFragment] to * [CollapsedStatusBarViewModel]. Used only to enable easy testing of [CollapsedStatusBarFragment]. */ interface CollapsedStatusBarViewBinder { /** * Binds the view to the view-model. [listener] will be notified whenever an event that may * change the status bar visibility occurs. */ @JvmStatic fun bind( view: View, viewModel: CollapsedStatusBarViewModel, listener: StatusBarVisibilityChangeListener, ) } @SysUISingleton class CollapsedStatusBarViewBinderImpl @Inject constructor() : CollapsedStatusBarViewBinder { override fun bind( view: View, viewModel: CollapsedStatusBarViewModel, listener: StatusBarVisibilityChangeListener, ) { view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.CREATED) { launch { viewModel.isTransitioningFromLockscreenToOccluded.collect { listener.onStatusBarVisibilityMaybeChanged() } } launch { viewModel.transitionFromLockscreenToDreamStartedEvent.collect { listener.onTransitionFromLockscreenToDreamStarted() } } } } } } /** Listener for various events that may affect the status bar's visibility. */ interface StatusBarVisibilityChangeListener { /** * Listener to be notified when the status bar visibility might have changed due to the device * moving to a different state. * Called when the status bar visibility might have changed due to the device moving to a * different state. */ fun interface StatusBarVisibilityChangeListener { fun onStatusBarVisibilityMaybeChanged() /** Called when a transition from lockscreen to dream has started. */ fun onTransitionFromLockscreenToDreamStarted() } packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -22,8 +22,10 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInterac import com.android.systemui.keyguard.shared.model.TransitionState import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn Loading @@ -43,6 +45,9 @@ interface CollapsedStatusBarViewModel { * otherwise. */ val isTransitioningFromLockscreenToOccluded: StateFlow<Boolean> /** Emits whenever a transition from lockscreen to dream has started. */ val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> } @SysUISingleton Loading @@ -59,4 +64,9 @@ constructor( it.transitionState == TransitionState.RUNNING } .stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false) override val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> = keyguardTransitionInteractor.lockscreenToDreamingTransition .filter { it.transitionState == TransitionState.STARTED } .map {} } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java +3 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger; import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; Loading Loading @@ -158,6 +159,7 @@ public abstract class StatusBarViewModule { StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, KeyguardStateController keyguardStateController, ShadeViewController shadeViewController, Loading @@ -182,6 +184,7 @@ public abstract class StatusBarViewModule { statusBarIconController, darkIconManagerFactory, collapsedStatusBarViewModel, collapsedStatusBarViewBinder, statusBarHideIconsForBouncerManager, keyguardStateController, shadeViewController, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +43 −10 Original line number Diff line number Diff line Loading @@ -14,8 +14,6 @@ package com.android.systemui.statusbar.phone.fragment; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.IDLE; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT; Loading Loading @@ -69,6 +67,7 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener; import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; Loading Loading @@ -131,6 +130,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final StatusBarIconController mStatusBarIconController; private final CarrierConfigTracker mCarrierConfigTracker; private final CollapsedStatusBarViewModel mCollapsedStatusBarViewModel; private final CollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder; private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; private final StatusBarIconController.DarkIconManager.Factory mDarkIconManagerFactory; private final SecureSettings mSecureSettings; Loading Loading @@ -182,12 +182,22 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue */ private boolean mWaitingForWindowStateChangeAfterCameraLaunch = false; /** * True when a transition from lockscreen to dream has started, but haven't yet received a * status bar window state change afterward. * * Similar to [mWaitingForWindowStateChangeAfterCameraLaunch]. */ private boolean mTransitionFromLockscreenToDreamStarted = false; /** * Listener that updates {@link #mWaitingForWindowStateChangeAfterCameraLaunch} when it receives * a new status bar window state. */ private final StatusBarWindowStateListener mStatusBarWindowStateListener = state -> private final StatusBarWindowStateListener mStatusBarWindowStateListener = state -> { mWaitingForWindowStateChangeAfterCameraLaunch = false; mTransitionFromLockscreenToDreamStarted = false; }; @SuppressLint("ValidFragment") public CollapsedStatusBarFragment( Loading @@ -201,6 +211,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, KeyguardStateController keyguardStateController, ShadeViewController shadeViewController, Loading @@ -224,6 +235,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mFeatureFlags = featureFlags; mStatusBarIconController = statusBarIconController; mCollapsedStatusBarViewModel = collapsedStatusBarViewModel; mCollapsedStatusBarViewBinder = collapsedStatusBarViewBinder; mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager; mDarkIconManagerFactory = darkIconManagerFactory; mKeyguardStateController = keyguardStateController; Loading Loading @@ -296,8 +308,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mCarrierConfigTracker.addCallback(mCarrierConfigCallback); mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener); CollapsedStatusBarViewBinder.bind( mStatusBar, mCollapsedStatusBarViewModel, this::updateStatusBarVisibilities); mCollapsedStatusBarViewBinder.bind( mStatusBar, mCollapsedStatusBarViewModel, mStatusBarVisibilityChangeListener); } @Override Loading Loading @@ -411,6 +423,19 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue return mStatusBarFragmentComponent; } private StatusBarVisibilityChangeListener mStatusBarVisibilityChangeListener = new StatusBarVisibilityChangeListener() { @Override public void onStatusBarVisibilityMaybeChanged() { updateStatusBarVisibilities(/* animate= */ true); } @Override public void onTransitionFromLockscreenToDreamStarted() { mTransitionFromLockscreenToDreamStarted = true; } }; @Override public void disable(int displayId, int state1, int state2, boolean animate) { if (displayId != getContext().getDisplayId()) { Loading @@ -423,10 +448,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue updateStatusBarVisibilities(animate); } private void updateStatusBarVisibilities() { updateStatusBarVisibilities(/* animate= */ true); } private void updateStatusBarVisibilities(boolean animate) { StatusBarVisibilityModel previousModel = mLastModifiedVisibility; StatusBarVisibilityModel newModel = calculateInternalModel(mLastSystemVisibility); Loading Loading @@ -546,6 +567,18 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue return true; } // Similar to [hideIconsForSecureCamera]: When dream is launched over lockscreen, the icons // are momentarily visible because the dream animation has finished, but SysUI has not been // informed that the dream is full-screen. For extra safety, we double-check that we're // still dreaming. final boolean hideIconsForDream = mTransitionFromLockscreenToDreamStarted && mKeyguardUpdateMonitor.isDreaming() && mKeyguardStateController.isOccluded(); if (hideIconsForDream) { return true; } // While the status bar is transitioning from lockscreen to an occluded, we don't yet know // if the occluding activity is fullscreen or not. If it *is* fullscreen, we don't want to // briefly show the status bar just to immediately hide it again. So, we wait for the Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +7 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerPr import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerProxyImpl import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinderImpl import com.android.systemui.statusbar.pipeline.wifi.data.repository.RealWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher Loading Loading @@ -107,6 +109,11 @@ abstract class StatusBarPipelineModule { impl: CollapsedStatusBarViewModelImpl ): CollapsedStatusBarViewModel @Binds abstract fun collapsedStatusBarViewBinder( impl: CollapsedStatusBarViewBinderImpl ): CollapsedStatusBarViewBinder companion object { @Provides @SysUISingleton Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/CollapsedStatusBarViewBinder.kt +36 −9 Original line number Diff line number Diff line Loading @@ -19,34 +19,61 @@ package com.android.systemui.statusbar.pipeline.shared.ui.binder import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel import javax.inject.Inject import kotlinx.coroutines.launch object CollapsedStatusBarViewBinder { /** * Interface to assist with binding the [CollapsedStatusBarFragment] to * [CollapsedStatusBarViewModel]. Used only to enable easy testing of [CollapsedStatusBarFragment]. */ interface CollapsedStatusBarViewBinder { /** * Binds the view to the view-model. [listener] will be notified whenever an event that may * change the status bar visibility occurs. */ @JvmStatic fun bind( view: View, viewModel: CollapsedStatusBarViewModel, listener: StatusBarVisibilityChangeListener, ) } @SysUISingleton class CollapsedStatusBarViewBinderImpl @Inject constructor() : CollapsedStatusBarViewBinder { override fun bind( view: View, viewModel: CollapsedStatusBarViewModel, listener: StatusBarVisibilityChangeListener, ) { view.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.CREATED) { launch { viewModel.isTransitioningFromLockscreenToOccluded.collect { listener.onStatusBarVisibilityMaybeChanged() } } launch { viewModel.transitionFromLockscreenToDreamStartedEvent.collect { listener.onTransitionFromLockscreenToDreamStarted() } } } } } } /** Listener for various events that may affect the status bar's visibility. */ interface StatusBarVisibilityChangeListener { /** * Listener to be notified when the status bar visibility might have changed due to the device * moving to a different state. * Called when the status bar visibility might have changed due to the device moving to a * different state. */ fun interface StatusBarVisibilityChangeListener { fun onStatusBarVisibilityMaybeChanged() /** Called when a transition from lockscreen to dream has started. */ fun onTransitionFromLockscreenToDreamStarted() }
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/CollapsedStatusBarViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -22,8 +22,10 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInterac import com.android.systemui.keyguard.shared.model.TransitionState import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn Loading @@ -43,6 +45,9 @@ interface CollapsedStatusBarViewModel { * otherwise. */ val isTransitioningFromLockscreenToOccluded: StateFlow<Boolean> /** Emits whenever a transition from lockscreen to dream has started. */ val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> } @SysUISingleton Loading @@ -59,4 +64,9 @@ constructor( it.transitionState == TransitionState.RUNNING } .stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false) override val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> = keyguardTransitionInteractor.lockscreenToDreamingTransition .filter { it.transitionState == TransitionState.STARTED } .map {} }