Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +2 −62 Original line number Diff line number Diff line Loading @@ -17,23 +17,17 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder import android.content.Context import android.graphics.Rect import android.os.Bundle import android.view.LayoutInflater import android.view.View import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.flags.RefactorFlag import com.android.systemui.res.R import com.android.systemui.statusbar.NotificationShelfController import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerShelfViewModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel import com.android.systemui.statusbar.notification.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.NotificationIconAreaController Loading @@ -54,34 +48,23 @@ import kotlinx.coroutines.DisposableHandle class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor( context: Context, private val configuration: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, demoModeController: DemoModeController, private val featureFlags: FeatureFlagsClassic, private val screenOffAnimationController: ScreenOffAnimationController, private val shelfIconViewStore: ShelfNotificationIconViewStore, private val shelfIconsViewModel: NotificationIconContainerShelfViewModel, private val aodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodIconsViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val statusBarIconViewStore: StatusBarNotificationIconViewStore, private val statusBarIconsViewModel: NotificationIconContainerStatusBarViewModel, ) : NotificationIconAreaController, DemoMode { ) : NotificationIconAreaController { private val shelfRefactor = RefactorFlag(featureFlags, Flags.NOTIFICATION_SHELF_REFACTOR) private var notificationIconArea: View? = null private var notificationIcons: NotificationIconContainer? = null private var shelfIcons: NotificationIconContainer? = null private var aodIcons: NotificationIconContainer? = null private var aodBindJob: DisposableHandle? = null init { demoModeController.addCallback(this) initializeNotificationAreaViews(context) } /** Called by the Keyguard*ViewController whose view contains the aod icons. */ override fun setupAodIcons(aodIcons: NotificationIconContainer) { val changed = this.aodIcons != null && aodIcons !== this.aodIcons Loading Loading @@ -127,9 +110,7 @@ constructor( override fun onDensityOrFontScaleChanged(context: Context) = unsupported /** Returns the view that represents the notification area. */ override fun getNotificationInnerAreaView(): View? { return notificationIconArea } override fun getNotificationInnerAreaView(): View? = unsupported /** Updates the notifications with the given list of notifications to display. */ override fun updateNotificationIcons(entries: List<ListEntry>) = unsupported Loading @@ -149,47 +130,6 @@ constructor( return if (aodIcons == null) 0 else aodIcons!!.height } override fun demoCommands(): List<String> { val commands = ArrayList<String>() commands.add(DemoMode.COMMAND_NOTIFICATIONS) return commands } override fun dispatchDemoCommand(command: String, args: Bundle) { if (notificationIconArea != null) { val visible = args.getString("visible") val vis = if ("false" == visible) View.INVISIBLE else View.VISIBLE notificationIconArea?.visibility = vis } } override fun onDemoModeFinished() { if (notificationIconArea != null) { notificationIconArea?.visibility = View.VISIBLE } } private fun inflateIconArea(inflater: LayoutInflater): View { return inflater.inflate(R.layout.notification_icon_area, null) } /** Initializes the views that will represent the notification area. */ private fun initializeNotificationAreaViews(context: Context) { val layoutInflater = LayoutInflater.from(context) notificationIconArea = inflateIconArea(layoutInflater) notificationIcons = notificationIconArea?.findViewById(R.id.notificationIcons) NotificationIconContainerViewBinder.bind( notificationIcons!!, statusBarIconsViewModel, configuration, configurationController, dozeParameters, featureFlags, screenOffAnimationController, statusBarIconViewStore, ) } companion object { val unsupported: Nothing get() = Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt +1 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import kotlinx.coroutines.launch /** Binds a [NotificationIconContainer] to its [view model][NotificationIconContainerViewModel]. */ object NotificationIconContainerViewBinder { @JvmStatic fun bind( view: NotificationIconContainer, viewModel: NotificationIconContainerViewModel, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +94 −14 Original line number Diff line number Diff line Loading @@ -38,9 +38,13 @@ import com.android.app.animation.Interpolators; import com.android.app.animation.InterpolatorsAndroidX; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlagsClassic; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shade.ShadeExpansionStateManager; Loading @@ -52,8 +56,15 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.disableflags.DisableFlagsLogger.DisableState; import com.android.systemui.statusbar.events.SystemStatusAnimationCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerViewModel; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.NotificationIconContainer; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; Loading @@ -66,6 +77,7 @@ 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.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; Loading @@ -83,6 +95,7 @@ import java.util.Set; import java.util.concurrent.Executor; import javax.inject.Inject; import kotlin.Unit; /** Loading Loading @@ -128,7 +141,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final OngoingCallController mOngoingCallController; private final SystemStatusAnimationScheduler mAnimationScheduler; private final StatusBarLocationPublisher mLocationPublisher; private final FeatureFlags mFeatureFlags; private final FeatureFlagsClassic mFeatureFlags; private final NotificationIconAreaController mNotificationIconAreaController; private final ShadeExpansionStateManager mShadeExpansionStateManager; private final StatusBarIconController mStatusBarIconController; Loading @@ -142,6 +155,13 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final DumpManager mDumpManager; private final StatusBarWindowStateController mStatusBarWindowStateController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final NotificationIconContainerViewModel mStatusBarIconsViewModel; private final ConfigurationState mConfigurationState; private final ConfigurationController mConfigurationController; private final DozeParameters mDozeParameters; private final ScreenOffAnimationController mScreenOffAnimationController; private final NotificationIconContainerViewBinder.IconViewStore mStatusBarIconViewStore; private final DemoModeController mDemoModeController; private List<String> mBlockedIcons = new ArrayList<>(); private Map<Startable, Startable.State> mStartableStates = new ArrayMap<>(); Loading Loading @@ -211,9 +231,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue StatusBarLocationPublisher locationPublisher, NotificationIconAreaController notificationIconAreaController, ShadeExpansionStateManager shadeExpansionStateManager, FeatureFlags featureFlags, FeatureFlagsClassic featureFlags, StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, Loading @@ -228,8 +248,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue @Main Executor mainExecutor, DumpManager dumpManager, StatusBarWindowStateController statusBarWindowStateController, KeyguardUpdateMonitor keyguardUpdateMonitor ) { KeyguardUpdateMonitor keyguardUpdateMonitor, NotificationIconContainerStatusBarViewModel statusBarIconsViewModel, ConfigurationState configurationState, ConfigurationController configurationController, DozeParameters dozeParameters, ScreenOffAnimationController screenOffAnimationController, StatusBarNotificationIconViewStore statusBarIconViewStore, DemoModeController demoModeController) { mStatusBarFragmentComponentFactory = statusBarFragmentComponentFactory; mOngoingCallController = ongoingCallController; mAnimationScheduler = animationScheduler; Loading @@ -254,18 +280,55 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mDumpManager = dumpManager; mStatusBarWindowStateController = statusBarWindowStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mStatusBarIconsViewModel = statusBarIconsViewModel; mConfigurationState = configurationState; mConfigurationController = configurationController; mDozeParameters = dozeParameters; mScreenOffAnimationController = screenOffAnimationController; mStatusBarIconViewStore = statusBarIconViewStore; mDemoModeController = demoModeController; } private final DemoMode mDemoModeCallback = new DemoMode() { @Override public List<String> demoCommands() { return List.of(DemoMode.COMMAND_NOTIFICATIONS); } @Override public void dispatchDemoCommand(String command, Bundle args) { if (mNotificationIconAreaInner == null) return; String visible = args.getString("visible"); if ("false".equals(visible)) { mNotificationIconAreaInner.setVisibility(View.INVISIBLE); } else { mNotificationIconAreaInner.setVisibility(View.VISIBLE); } } @Override public void onDemoModeFinished() { if (mNotificationIconAreaInner == null) return; mNotificationIconAreaInner.setVisibility(View.VISIBLE); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStatusBarWindowStateController.addListener(mStatusBarWindowStateListener); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mDemoModeController.addCallback(mDemoModeCallback); } } @Override public void onDestroy() { super.onDestroy(); mStatusBarWindowStateController.removeListener(mStatusBarWindowStateListener); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mDemoModeController.removeCallback(mDemoModeCallback); } } @Override Loading Loading @@ -405,7 +468,23 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue /** Initializes views related to the notification icon area. */ public void initNotificationIconArea() { ViewGroup notificationIconArea = mStatusBar.findViewById(R.id.notification_icon_area); ViewGroup notificationIconArea = mStatusBar.requireViewById(R.id.notification_icon_area); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mNotificationIconAreaInner = LayoutInflater.from(getContext()) .inflate(R.layout.notification_icon_area, notificationIconArea, true); NotificationIconContainer notificationIcons = notificationIconArea.requireViewById(R.id.notificationIcons); NotificationIconContainerViewBinder.bind( notificationIcons, mStatusBarIconsViewModel, mConfigurationState, mConfigurationController, mDozeParameters, mFeatureFlags, mScreenOffAnimationController, mStatusBarIconViewStore); } else { mNotificationIconAreaInner = mNotificationIconAreaController.getNotificationInnerAreaView(); if (mNotificationIconAreaInner.getParent() != null) { Loading @@ -413,6 +492,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue .removeView(mNotificationIconAreaInner); } notificationIconArea.addView(mNotificationIconAreaInner); } updateNotificationIconAreaAndCallChip(/* animate= */ false); } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +18 −4 Original line number Diff line number Diff line Loading @@ -48,23 +48,29 @@ import android.widget.FrameLayout; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.res.R; import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.animation.AnimatorTestRule; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlagsClassic; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.LogcatEchoTracker; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.shade.ShadeViewController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.disableflags.DisableFlagsLogger; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.HeadsUpAppearanceController; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; Loading @@ -72,6 +78,7 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; Loading Loading @@ -682,7 +689,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mLocationPublisher, mMockNotificationAreaController, mShadeExpansionStateManager, mock(FeatureFlags.class), mock(FeatureFlagsClassic.class), mStatusBarIconController, mIconManagerFactory, mCollapsedStatusBarViewModel, Loading @@ -702,7 +709,14 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mExecutor, mDumpManager, mStatusBarWindowStateController, mKeyguardUpdateMonitor); mKeyguardUpdateMonitor, mock(NotificationIconContainerStatusBarViewModel.class), mock(ConfigurationState.class), mock(ConfigurationController.class), mock(DozeParameters.class), mock(ScreenOffAnimationController.class), mock(StatusBarNotificationIconViewStore.class), mock(DemoModeController.class)); } private void setUpDaggerComponent() { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +2 −62 Original line number Diff line number Diff line Loading @@ -17,23 +17,17 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder import android.content.Context import android.graphics.Rect import android.os.Bundle import android.view.LayoutInflater import android.view.View import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.flags.RefactorFlag import com.android.systemui.res.R import com.android.systemui.statusbar.NotificationShelfController import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerShelfViewModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel import com.android.systemui.statusbar.notification.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.NotificationIconAreaController Loading @@ -54,34 +48,23 @@ import kotlinx.coroutines.DisposableHandle class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor( context: Context, private val configuration: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, demoModeController: DemoModeController, private val featureFlags: FeatureFlagsClassic, private val screenOffAnimationController: ScreenOffAnimationController, private val shelfIconViewStore: ShelfNotificationIconViewStore, private val shelfIconsViewModel: NotificationIconContainerShelfViewModel, private val aodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodIconsViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val statusBarIconViewStore: StatusBarNotificationIconViewStore, private val statusBarIconsViewModel: NotificationIconContainerStatusBarViewModel, ) : NotificationIconAreaController, DemoMode { ) : NotificationIconAreaController { private val shelfRefactor = RefactorFlag(featureFlags, Flags.NOTIFICATION_SHELF_REFACTOR) private var notificationIconArea: View? = null private var notificationIcons: NotificationIconContainer? = null private var shelfIcons: NotificationIconContainer? = null private var aodIcons: NotificationIconContainer? = null private var aodBindJob: DisposableHandle? = null init { demoModeController.addCallback(this) initializeNotificationAreaViews(context) } /** Called by the Keyguard*ViewController whose view contains the aod icons. */ override fun setupAodIcons(aodIcons: NotificationIconContainer) { val changed = this.aodIcons != null && aodIcons !== this.aodIcons Loading Loading @@ -127,9 +110,7 @@ constructor( override fun onDensityOrFontScaleChanged(context: Context) = unsupported /** Returns the view that represents the notification area. */ override fun getNotificationInnerAreaView(): View? { return notificationIconArea } override fun getNotificationInnerAreaView(): View? = unsupported /** Updates the notifications with the given list of notifications to display. */ override fun updateNotificationIcons(entries: List<ListEntry>) = unsupported Loading @@ -149,47 +130,6 @@ constructor( return if (aodIcons == null) 0 else aodIcons!!.height } override fun demoCommands(): List<String> { val commands = ArrayList<String>() commands.add(DemoMode.COMMAND_NOTIFICATIONS) return commands } override fun dispatchDemoCommand(command: String, args: Bundle) { if (notificationIconArea != null) { val visible = args.getString("visible") val vis = if ("false" == visible) View.INVISIBLE else View.VISIBLE notificationIconArea?.visibility = vis } } override fun onDemoModeFinished() { if (notificationIconArea != null) { notificationIconArea?.visibility = View.VISIBLE } } private fun inflateIconArea(inflater: LayoutInflater): View { return inflater.inflate(R.layout.notification_icon_area, null) } /** Initializes the views that will represent the notification area. */ private fun initializeNotificationAreaViews(context: Context) { val layoutInflater = LayoutInflater.from(context) notificationIconArea = inflateIconArea(layoutInflater) notificationIcons = notificationIconArea?.findViewById(R.id.notificationIcons) NotificationIconContainerViewBinder.bind( notificationIcons!!, statusBarIconsViewModel, configuration, configurationController, dozeParameters, featureFlags, screenOffAnimationController, statusBarIconViewStore, ) } companion object { val unsupported: Nothing get() = Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt +1 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import kotlinx.coroutines.launch /** Binds a [NotificationIconContainer] to its [view model][NotificationIconContainerViewModel]. */ object NotificationIconContainerViewBinder { @JvmStatic fun bind( view: NotificationIconContainer, viewModel: NotificationIconContainerViewModel, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +94 −14 Original line number Diff line number Diff line Loading @@ -38,9 +38,13 @@ import com.android.app.animation.Interpolators; import com.android.app.animation.InterpolatorsAndroidX; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlagsClassic; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shade.ShadeExpansionStateManager; Loading @@ -52,8 +56,15 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.disableflags.DisableFlagsLogger.DisableState; import com.android.systemui.statusbar.events.SystemStatusAnimationCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerViewModel; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.NotificationIconContainer; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; Loading @@ -66,6 +77,7 @@ 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.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; Loading @@ -83,6 +95,7 @@ import java.util.Set; import java.util.concurrent.Executor; import javax.inject.Inject; import kotlin.Unit; /** Loading Loading @@ -128,7 +141,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final OngoingCallController mOngoingCallController; private final SystemStatusAnimationScheduler mAnimationScheduler; private final StatusBarLocationPublisher mLocationPublisher; private final FeatureFlags mFeatureFlags; private final FeatureFlagsClassic mFeatureFlags; private final NotificationIconAreaController mNotificationIconAreaController; private final ShadeExpansionStateManager mShadeExpansionStateManager; private final StatusBarIconController mStatusBarIconController; Loading @@ -142,6 +155,13 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final DumpManager mDumpManager; private final StatusBarWindowStateController mStatusBarWindowStateController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final NotificationIconContainerViewModel mStatusBarIconsViewModel; private final ConfigurationState mConfigurationState; private final ConfigurationController mConfigurationController; private final DozeParameters mDozeParameters; private final ScreenOffAnimationController mScreenOffAnimationController; private final NotificationIconContainerViewBinder.IconViewStore mStatusBarIconViewStore; private final DemoModeController mDemoModeController; private List<String> mBlockedIcons = new ArrayList<>(); private Map<Startable, Startable.State> mStartableStates = new ArrayMap<>(); Loading Loading @@ -211,9 +231,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue StatusBarLocationPublisher locationPublisher, NotificationIconAreaController notificationIconAreaController, ShadeExpansionStateManager shadeExpansionStateManager, FeatureFlags featureFlags, FeatureFlagsClassic featureFlags, StatusBarIconController statusBarIconController, StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory, DarkIconManager.Factory darkIconManagerFactory, CollapsedStatusBarViewModel collapsedStatusBarViewModel, CollapsedStatusBarViewBinder collapsedStatusBarViewBinder, StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager, Loading @@ -228,8 +248,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue @Main Executor mainExecutor, DumpManager dumpManager, StatusBarWindowStateController statusBarWindowStateController, KeyguardUpdateMonitor keyguardUpdateMonitor ) { KeyguardUpdateMonitor keyguardUpdateMonitor, NotificationIconContainerStatusBarViewModel statusBarIconsViewModel, ConfigurationState configurationState, ConfigurationController configurationController, DozeParameters dozeParameters, ScreenOffAnimationController screenOffAnimationController, StatusBarNotificationIconViewStore statusBarIconViewStore, DemoModeController demoModeController) { mStatusBarFragmentComponentFactory = statusBarFragmentComponentFactory; mOngoingCallController = ongoingCallController; mAnimationScheduler = animationScheduler; Loading @@ -254,18 +280,55 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mDumpManager = dumpManager; mStatusBarWindowStateController = statusBarWindowStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mStatusBarIconsViewModel = statusBarIconsViewModel; mConfigurationState = configurationState; mConfigurationController = configurationController; mDozeParameters = dozeParameters; mScreenOffAnimationController = screenOffAnimationController; mStatusBarIconViewStore = statusBarIconViewStore; mDemoModeController = demoModeController; } private final DemoMode mDemoModeCallback = new DemoMode() { @Override public List<String> demoCommands() { return List.of(DemoMode.COMMAND_NOTIFICATIONS); } @Override public void dispatchDemoCommand(String command, Bundle args) { if (mNotificationIconAreaInner == null) return; String visible = args.getString("visible"); if ("false".equals(visible)) { mNotificationIconAreaInner.setVisibility(View.INVISIBLE); } else { mNotificationIconAreaInner.setVisibility(View.VISIBLE); } } @Override public void onDemoModeFinished() { if (mNotificationIconAreaInner == null) return; mNotificationIconAreaInner.setVisibility(View.VISIBLE); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStatusBarWindowStateController.addListener(mStatusBarWindowStateListener); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mDemoModeController.addCallback(mDemoModeCallback); } } @Override public void onDestroy() { super.onDestroy(); mStatusBarWindowStateController.removeListener(mStatusBarWindowStateListener); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mDemoModeController.removeCallback(mDemoModeCallback); } } @Override Loading Loading @@ -405,7 +468,23 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue /** Initializes views related to the notification icon area. */ public void initNotificationIconArea() { ViewGroup notificationIconArea = mStatusBar.findViewById(R.id.notification_icon_area); ViewGroup notificationIconArea = mStatusBar.requireViewById(R.id.notification_icon_area); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { mNotificationIconAreaInner = LayoutInflater.from(getContext()) .inflate(R.layout.notification_icon_area, notificationIconArea, true); NotificationIconContainer notificationIcons = notificationIconArea.requireViewById(R.id.notificationIcons); NotificationIconContainerViewBinder.bind( notificationIcons, mStatusBarIconsViewModel, mConfigurationState, mConfigurationController, mDozeParameters, mFeatureFlags, mScreenOffAnimationController, mStatusBarIconViewStore); } else { mNotificationIconAreaInner = mNotificationIconAreaController.getNotificationInnerAreaView(); if (mNotificationIconAreaInner.getParent() != null) { Loading @@ -413,6 +492,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue .removeView(mNotificationIconAreaInner); } notificationIconArea.addView(mNotificationIconAreaInner); } updateNotificationIconAreaAndCallChip(/* animate= */ false); } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +18 −4 Original line number Diff line number Diff line Loading @@ -48,23 +48,29 @@ import android.widget.FrameLayout; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.res.R; import com.android.systemui.SysuiBaseFragmentTest; import com.android.systemui.animation.AnimatorTestRule; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlagsClassic; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.LogcatEchoTracker; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.shade.ShadeViewController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.disableflags.DisableFlagsLogger; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.HeadsUpAppearanceController; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; Loading @@ -72,6 +78,7 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; Loading Loading @@ -682,7 +689,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mLocationPublisher, mMockNotificationAreaController, mShadeExpansionStateManager, mock(FeatureFlags.class), mock(FeatureFlagsClassic.class), mStatusBarIconController, mIconManagerFactory, mCollapsedStatusBarViewModel, Loading @@ -702,7 +709,14 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mExecutor, mDumpManager, mStatusBarWindowStateController, mKeyguardUpdateMonitor); mKeyguardUpdateMonitor, mock(NotificationIconContainerStatusBarViewModel.class), mock(ConfigurationState.class), mock(ConfigurationController.class), mock(DozeParameters.class), mock(ScreenOffAnimationController.class), mock(StatusBarNotificationIconViewStore.class), mock(DemoModeController.class)); } private void setUpDaggerComponent() { Loading