diff options
| author | 2023-10-24 17:40:32 +0000 | |
|---|---|---|
| committer | 2023-10-24 17:40:32 +0000 | |
| commit | 2a91e7e6c189ce3a9d10848121e8cfe6f3d80f8d (patch) | |
| tree | ce4f9274940fcca5915cab39adef6d4990c8dc8d | |
| parent | 933c1b3d1dd7837ff77d579852f9446edc86e170 (diff) | |
| parent | 7f04c74039589e8b1e464391ff5a2f45160e7ebf (diff) | |
Merge "Move NIC binding to CollapsedStatusBarFragment" into main
4 files changed, 115 insertions, 80 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt index 593ed4766ed0..246933ad69e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt @@ -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 @@ -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 @@ -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 @@ -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() = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt index aa559e0601ed..75926194af58 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconContainerViewBinder.kt @@ -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, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 63c022c5bb6b..e2a4714e6116 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -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; @@ -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; @@ -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; @@ -83,6 +95,7 @@ import java.util.Set; import java.util.concurrent.Executor; import javax.inject.Inject; + import kotlin.Unit; /** @@ -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; @@ -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<>(); @@ -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, @@ -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; @@ -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 @@ -405,14 +468,31 @@ 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); - mNotificationIconAreaInner = - mNotificationIconAreaController.getNotificationInnerAreaView(); - if (mNotificationIconAreaInner.getParent() != null) { - ((ViewGroup) mNotificationIconAreaInner.getParent()) - .removeView(mNotificationIconAreaInner); - } - notificationIconArea.addView(mNotificationIconAreaInner); + 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) { + ((ViewGroup) mNotificationIconAreaInner.getParent()) + .removeView(mNotificationIconAreaInner); + } + notificationIconArea.addView(mNotificationIconAreaInner); + } updateNotificationIconAreaAndCallChip(/* animate= */ false); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index bcb34d6d9342..9a77f0c0300d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -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; @@ -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; @@ -682,7 +689,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { mLocationPublisher, mMockNotificationAreaController, mShadeExpansionStateManager, - mock(FeatureFlags.class), + mock(FeatureFlagsClassic.class), mStatusBarIconController, mIconManagerFactory, mCollapsedStatusBarViewModel, @@ -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() { |