Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +57 −5 Original line number Diff line number Diff line Loading @@ -38,10 +38,10 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.systemui.Dumpable; import com.android.systemui.res.R; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dagger.qualifiers.Main; 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.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; Loading @@ -50,14 +50,21 @@ import com.android.systemui.log.core.LogLevel; import com.android.systemui.log.dagger.KeyguardClockLog; import com.android.systemui.plugins.ClockController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shared.clocks.ClockRegistry; import com.android.systemui.shared.regionsampling.RegionSampler; import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.PropertyAnimator; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel; import com.android.systemui.statusbar.notification.stack.AnimationProperties; 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.ScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.settings.SecureSettings; Loading @@ -68,6 +75,8 @@ import java.util.function.Consumer; import javax.inject.Inject; import kotlinx.coroutines.DisposableHandle; /** * Injectable controller for {@link KeyguardClockSwitch}. */ Loading @@ -84,6 +93,12 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS private final DumpManager mDumpManager; private final ClockEventController mClockEventController; private final LogBuffer mLogBuffer; private final NotificationIconContainerAlwaysOnDisplayViewModel mAodIconsViewModel; private final ConfigurationState mConfigurationState; private final ConfigurationController mConfigurationController; private final DozeParameters mDozeParameters; private final ScreenOffAnimationController mScreenOffAnimationController; private final AlwaysOnDisplayNotificationIconViewStore mAodIconViewStore; private FrameLayout mSmallClockFrame; // top aligned clock private FrameLayout mLargeClockFrame; // centered clock Loading @@ -107,10 +122,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS private boolean mShownOnSecondaryDisplay = false; private boolean mOnlyClock = false; private boolean mIsActiveDreamLockscreenHosted = false; private FeatureFlags mFeatureFlags; private final FeatureFlagsClassic mFeatureFlags; private KeyguardInteractor mKeyguardInteractor; private final DelayableExecutor mUiExecutor; private boolean mCanShowDoubleLineClock = true; private DisposableHandle mAodIconsBindJob; @Nullable private NotificationIconContainer mAodIconContainer; @VisibleForTesting final Consumer<Boolean> mIsActiveDreamLockscreenHostedCallback = (Boolean isLockscreenHosted) -> { Loading Loading @@ -151,26 +169,38 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS KeyguardSliceViewController keyguardSliceViewController, NotificationIconAreaController notificationIconAreaController, LockscreenSmartspaceController smartspaceController, ConfigurationController configurationController, ScreenOffAnimationController screenOffAnimationController, KeyguardUnlockAnimationController keyguardUnlockAnimationController, SecureSettings secureSettings, @Main DelayableExecutor uiExecutor, DumpManager dumpManager, ClockEventController clockEventController, @KeyguardClockLog LogBuffer logBuffer, NotificationIconContainerAlwaysOnDisplayViewModel aodIconsViewModel, ConfigurationState configurationState, DozeParameters dozeParameters, AlwaysOnDisplayNotificationIconViewStore aodIconViewStore, KeyguardInteractor keyguardInteractor, FeatureFlags featureFlags) { FeatureFlagsClassic featureFlags) { super(keyguardClockSwitch); mStatusBarStateController = statusBarStateController; mClockRegistry = clockRegistry; mKeyguardSliceViewController = keyguardSliceViewController; mNotificationIconAreaController = notificationIconAreaController; mSmartspaceController = smartspaceController; mConfigurationController = configurationController; mScreenOffAnimationController = screenOffAnimationController; mSecureSettings = secureSettings; mUiExecutor = uiExecutor; mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; mDumpManager = dumpManager; mClockEventController = clockEventController; mLogBuffer = logBuffer; mAodIconsViewModel = aodIconsViewModel; mConfigurationState = configurationState; mDozeParameters = dozeParameters; mAodIconViewStore = aodIconViewStore; mView.setLogBuffer(mLogBuffer); mFeatureFlags = featureFlags; mKeyguardInteractor = keyguardInteractor; Loading Loading @@ -316,6 +346,8 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS int getNotificationIconAreaHeight() { if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { return 0; } else if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { return mAodIconContainer != null ? mAodIconContainer.getHeight() : 0; } else { return mNotificationIconAreaController.getHeight(); } Loading Loading @@ -533,9 +565,29 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS NotificationIconContainer nic = (NotificationIconContainer) mView.findViewById( com.android.systemui.res.R.id.left_aligned_notification_icon_container); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { if (mAodIconsBindJob != null) { mAodIconsBindJob.dispose(); } if (nic != null) { nic.setOnLockScreen(true); mAodIconsBindJob = NotificationIconContainerViewBinder.bind( nic, mAodIconsViewModel, mConfigurationState, mConfigurationController, mDozeParameters, mFeatureFlags, mScreenOffAnimationController, mAodIconViewStore ); mAodIconContainer = nic; } } else { mNotificationIconAreaController.setupAodIcons(nic); } } } private void setClock(ClockController clock) { if (clock != null && mLogBuffer != null) { Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt +37 −4 Original line number Diff line number Diff line Loading @@ -26,23 +26,39 @@ import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.res.R import com.android.systemui.shade.NotificationPanelView import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel 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.ScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import javax.inject.Inject import kotlinx.coroutines.DisposableHandle class AodNotificationIconsSection @Inject constructor( private val context: Context, private val featureFlags: FeatureFlags, private val configurationState: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, private val featureFlags: FeatureFlagsClassic, private val nicAodViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val nicAodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val notificationPanelView: NotificationPanelView, private val notificationIconAreaController: NotificationIconAreaController, private val screenOffAnimationController: ScreenOffAnimationController, ) : KeyguardSection() { private var nicBindingDisposable: DisposableHandle? = null private val nicId = R.id.aod_notification_icon_container private lateinit var nic: NotificationIconContainer Loading Loading @@ -70,8 +86,24 @@ constructor( return } if (featureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { nic.setOnLockScreen(true) nicBindingDisposable?.dispose() nicBindingDisposable = NotificationIconContainerViewBinder.bind( nic, nicAodViewModel, configurationState, configurationController, dozeParameters, featureFlags, screenOffAnimationController, nicAodIconViewStore, ) } else { notificationIconAreaController.setupAodIcons(nic) } } override fun applyConstraints(constraintSet: ConstraintSet) { if (!featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { Loading Loading @@ -102,5 +134,6 @@ constructor( override fun removeViews(constraintLayout: ConstraintLayout) { constraintLayout.removeView(nicId) nicBindingDisposable?.dispose() } } packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +4 −45 Original line number Diff line number Diff line Loading @@ -18,21 +18,14 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder import android.content.Context import android.graphics.Rect import android.view.View import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlagsClassic 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.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl 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.ScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import javax.inject.Inject import kotlinx.coroutines.DisposableHandle /** * Controller class for [NotificationIconContainer]. This implementation serves as a temporary Loading @@ -42,43 +35,11 @@ import kotlinx.coroutines.DisposableHandle * can be used directly. */ @SysUISingleton class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor( private val configuration: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, private val featureFlags: FeatureFlagsClassic, private val screenOffAnimationController: ScreenOffAnimationController, private val aodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodIconsViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, ) : NotificationIconAreaController { private var aodIcons: NotificationIconContainer? = null private var aodBindJob: DisposableHandle? = null class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor() : NotificationIconAreaController { /** Called by the Keyguard*ViewController whose view contains the aod icons. */ override fun setupAodIcons(aodIcons: NotificationIconContainer) { val changed = this.aodIcons != null && aodIcons !== this.aodIcons if (changed) { this.aodIcons!!.setAnimationsEnabled(false) this.aodIcons!!.removeAllViews() aodBindJob?.dispose() } this.aodIcons = aodIcons this.aodIcons!!.setOnLockScreen(true) aodBindJob = NotificationIconContainerViewBinder.bind( aodIcons, aodIconsViewModel, configuration, configurationController, dozeParameters, featureFlags, screenOffAnimationController, aodIconViewStore, ) } override fun setupAodIcons(aodIcons: NotificationIconContainer?) = unsupported override fun setupShelf(notificationShelfController: NotificationShelfController) = NotificationShelfViewBinderWrapperControllerImpl.unsupported Loading @@ -104,9 +65,7 @@ constructor( override fun onThemeChanged() = unsupported override fun getHeight(): Int { return if (aodIcons == null) 0 else aodIcons!!.height } override fun getHeight(): Int = unsupported companion object { val unsupported: Nothing Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.kt +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import com.android.systemui.statusbar.notification.collection.ListEntry */ interface NotificationIconAreaController { /** Called by the Keyguard*ViewController whose view contains the aod icons. */ fun setupAodIcons(aodIcons: NotificationIconContainer) fun setupAodIcons(aodIcons: NotificationIconContainer?) fun setupShelf(notificationShelfController: NotificationShelfController) fun setShelfIcons(icons: NotificationIconContainer) fun onDensityOrFontScaleChanged(context: Context) Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java +15 −1 Original line number Diff line number Diff line Loading @@ -35,10 +35,11 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory; import com.android.systemui.log.LogBuffer; Loading @@ -50,12 +51,18 @@ import com.android.systemui.plugins.ClockFaceController; import com.android.systemui.plugins.ClockFaceEvents; import com.android.systemui.plugins.ClockTickRate; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.shared.clocks.ClockRegistry; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel; 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.ScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -166,6 +173,7 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { when(mSmartspaceController.buildAndConnectView(any())).thenReturn(mFakeSmartspaceView); mExecutor = new FakeExecutor(new FakeSystemClock()); mFakeFeatureFlags = new FakeFeatureFlags(); mFakeFeatureFlags.setDefault(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR); mFakeFeatureFlags.set(FACE_AUTH_REFACTOR, false); mFakeFeatureFlags.set(LOCKSCREEN_WALLPAPER_DREAM_ENABLED, false); mFakeFeatureFlags.set(MIGRATE_KEYGUARD_STATUS_VIEW, false); Loading @@ -176,12 +184,18 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { mKeyguardSliceViewController, mNotificationIconAreaController, mSmartspaceController, mock(ConfigurationController.class), mock(ScreenOffAnimationController.class), mKeyguardUnlockAnimationController, mSecureSettings, mExecutor, mDumpManager, mClockEventController, mLogBuffer, mock(NotificationIconContainerAlwaysOnDisplayViewModel.class), mock(ConfigurationState.class), mock(DozeParameters.class), mock(AlwaysOnDisplayNotificationIconViewStore.class), KeyguardInteractorFactory.create(mFakeFeatureFlags).getKeyguardInteractor(), mFakeFeatureFlags ); Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +57 −5 Original line number Diff line number Diff line Loading @@ -38,10 +38,10 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.systemui.Dumpable; import com.android.systemui.res.R; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dagger.qualifiers.Main; 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.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; Loading @@ -50,14 +50,21 @@ import com.android.systemui.log.core.LogLevel; import com.android.systemui.log.dagger.KeyguardClockLog; import com.android.systemui.plugins.ClockController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shared.clocks.ClockRegistry; import com.android.systemui.shared.regionsampling.RegionSampler; import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.PropertyAnimator; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel; import com.android.systemui.statusbar.notification.stack.AnimationProperties; 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.ScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.settings.SecureSettings; Loading @@ -68,6 +75,8 @@ import java.util.function.Consumer; import javax.inject.Inject; import kotlinx.coroutines.DisposableHandle; /** * Injectable controller for {@link KeyguardClockSwitch}. */ Loading @@ -84,6 +93,12 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS private final DumpManager mDumpManager; private final ClockEventController mClockEventController; private final LogBuffer mLogBuffer; private final NotificationIconContainerAlwaysOnDisplayViewModel mAodIconsViewModel; private final ConfigurationState mConfigurationState; private final ConfigurationController mConfigurationController; private final DozeParameters mDozeParameters; private final ScreenOffAnimationController mScreenOffAnimationController; private final AlwaysOnDisplayNotificationIconViewStore mAodIconViewStore; private FrameLayout mSmallClockFrame; // top aligned clock private FrameLayout mLargeClockFrame; // centered clock Loading @@ -107,10 +122,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS private boolean mShownOnSecondaryDisplay = false; private boolean mOnlyClock = false; private boolean mIsActiveDreamLockscreenHosted = false; private FeatureFlags mFeatureFlags; private final FeatureFlagsClassic mFeatureFlags; private KeyguardInteractor mKeyguardInteractor; private final DelayableExecutor mUiExecutor; private boolean mCanShowDoubleLineClock = true; private DisposableHandle mAodIconsBindJob; @Nullable private NotificationIconContainer mAodIconContainer; @VisibleForTesting final Consumer<Boolean> mIsActiveDreamLockscreenHostedCallback = (Boolean isLockscreenHosted) -> { Loading Loading @@ -151,26 +169,38 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS KeyguardSliceViewController keyguardSliceViewController, NotificationIconAreaController notificationIconAreaController, LockscreenSmartspaceController smartspaceController, ConfigurationController configurationController, ScreenOffAnimationController screenOffAnimationController, KeyguardUnlockAnimationController keyguardUnlockAnimationController, SecureSettings secureSettings, @Main DelayableExecutor uiExecutor, DumpManager dumpManager, ClockEventController clockEventController, @KeyguardClockLog LogBuffer logBuffer, NotificationIconContainerAlwaysOnDisplayViewModel aodIconsViewModel, ConfigurationState configurationState, DozeParameters dozeParameters, AlwaysOnDisplayNotificationIconViewStore aodIconViewStore, KeyguardInteractor keyguardInteractor, FeatureFlags featureFlags) { FeatureFlagsClassic featureFlags) { super(keyguardClockSwitch); mStatusBarStateController = statusBarStateController; mClockRegistry = clockRegistry; mKeyguardSliceViewController = keyguardSliceViewController; mNotificationIconAreaController = notificationIconAreaController; mSmartspaceController = smartspaceController; mConfigurationController = configurationController; mScreenOffAnimationController = screenOffAnimationController; mSecureSettings = secureSettings; mUiExecutor = uiExecutor; mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; mDumpManager = dumpManager; mClockEventController = clockEventController; mLogBuffer = logBuffer; mAodIconsViewModel = aodIconsViewModel; mConfigurationState = configurationState; mDozeParameters = dozeParameters; mAodIconViewStore = aodIconViewStore; mView.setLogBuffer(mLogBuffer); mFeatureFlags = featureFlags; mKeyguardInteractor = keyguardInteractor; Loading Loading @@ -316,6 +346,8 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS int getNotificationIconAreaHeight() { if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { return 0; } else if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { return mAodIconContainer != null ? mAodIconContainer.getHeight() : 0; } else { return mNotificationIconAreaController.getHeight(); } Loading Loading @@ -533,9 +565,29 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS NotificationIconContainer nic = (NotificationIconContainer) mView.findViewById( com.android.systemui.res.R.id.left_aligned_notification_icon_container); if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { if (mAodIconsBindJob != null) { mAodIconsBindJob.dispose(); } if (nic != null) { nic.setOnLockScreen(true); mAodIconsBindJob = NotificationIconContainerViewBinder.bind( nic, mAodIconsViewModel, mConfigurationState, mConfigurationController, mDozeParameters, mFeatureFlags, mScreenOffAnimationController, mAodIconViewStore ); mAodIconContainer = nic; } } else { mNotificationIconAreaController.setupAodIcons(nic); } } } private void setClock(ClockController clock) { if (clock != null && mLogBuffer != null) { Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt +37 −4 Original line number Diff line number Diff line Loading @@ -26,23 +26,39 @@ import androidx.constraintlayout.widget.ConstraintSet.END import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.systemui.res.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.res.R import com.android.systemui.shade.NotificationPanelView import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel 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.ScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import javax.inject.Inject import kotlinx.coroutines.DisposableHandle class AodNotificationIconsSection @Inject constructor( private val context: Context, private val featureFlags: FeatureFlags, private val configurationState: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, private val featureFlags: FeatureFlagsClassic, private val nicAodViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val nicAodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val notificationPanelView: NotificationPanelView, private val notificationIconAreaController: NotificationIconAreaController, private val screenOffAnimationController: ScreenOffAnimationController, ) : KeyguardSection() { private var nicBindingDisposable: DisposableHandle? = null private val nicId = R.id.aod_notification_icon_container private lateinit var nic: NotificationIconContainer Loading Loading @@ -70,8 +86,24 @@ constructor( return } if (featureFlags.isEnabled(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR)) { nic.setOnLockScreen(true) nicBindingDisposable?.dispose() nicBindingDisposable = NotificationIconContainerViewBinder.bind( nic, nicAodViewModel, configurationState, configurationController, dozeParameters, featureFlags, screenOffAnimationController, nicAodIconViewStore, ) } else { notificationIconAreaController.setupAodIcons(nic) } } override fun applyConstraints(constraintSet: ConstraintSet) { if (!featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { Loading Loading @@ -102,5 +134,6 @@ constructor( override fun removeViews(constraintLayout: ConstraintLayout) { constraintLayout.removeView(nicId) nicBindingDisposable?.dispose() } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/NotificationIconAreaControllerViewBinderWrapperImpl.kt +4 −45 Original line number Diff line number Diff line Loading @@ -18,21 +18,14 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder import android.content.Context import android.graphics.Rect import android.view.View import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlagsClassic 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.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl 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.ScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import javax.inject.Inject import kotlinx.coroutines.DisposableHandle /** * Controller class for [NotificationIconContainer]. This implementation serves as a temporary Loading @@ -42,43 +35,11 @@ import kotlinx.coroutines.DisposableHandle * can be used directly. */ @SysUISingleton class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor( private val configuration: ConfigurationState, private val configurationController: ConfigurationController, private val dozeParameters: DozeParameters, private val featureFlags: FeatureFlagsClassic, private val screenOffAnimationController: ScreenOffAnimationController, private val aodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodIconsViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, ) : NotificationIconAreaController { private var aodIcons: NotificationIconContainer? = null private var aodBindJob: DisposableHandle? = null class NotificationIconAreaControllerViewBinderWrapperImpl @Inject constructor() : NotificationIconAreaController { /** Called by the Keyguard*ViewController whose view contains the aod icons. */ override fun setupAodIcons(aodIcons: NotificationIconContainer) { val changed = this.aodIcons != null && aodIcons !== this.aodIcons if (changed) { this.aodIcons!!.setAnimationsEnabled(false) this.aodIcons!!.removeAllViews() aodBindJob?.dispose() } this.aodIcons = aodIcons this.aodIcons!!.setOnLockScreen(true) aodBindJob = NotificationIconContainerViewBinder.bind( aodIcons, aodIconsViewModel, configuration, configurationController, dozeParameters, featureFlags, screenOffAnimationController, aodIconViewStore, ) } override fun setupAodIcons(aodIcons: NotificationIconContainer?) = unsupported override fun setupShelf(notificationShelfController: NotificationShelfController) = NotificationShelfViewBinderWrapperControllerImpl.unsupported Loading @@ -104,9 +65,7 @@ constructor( override fun onThemeChanged() = unsupported override fun getHeight(): Int { return if (aodIcons == null) 0 else aodIcons!!.height } override fun getHeight(): Int = unsupported companion object { val unsupported: Nothing Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.kt +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import com.android.systemui.statusbar.notification.collection.ListEntry */ interface NotificationIconAreaController { /** Called by the Keyguard*ViewController whose view contains the aod icons. */ fun setupAodIcons(aodIcons: NotificationIconContainer) fun setupAodIcons(aodIcons: NotificationIconContainer?) fun setupShelf(notificationShelfController: NotificationShelfController) fun setShelfIcons(icons: NotificationIconContainer) fun onDensityOrFontScaleChanged(context: Context) Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java +15 −1 Original line number Diff line number Diff line Loading @@ -35,10 +35,11 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.common.ui.ConfigurationState; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory; import com.android.systemui.log.LogBuffer; Loading @@ -50,12 +51,18 @@ import com.android.systemui.plugins.ClockFaceController; import com.android.systemui.plugins.ClockFaceEvents; import com.android.systemui.plugins.ClockTickRate; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.shared.clocks.ClockRegistry; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController; import com.android.systemui.statusbar.notification.icon.ui.viewbinder.AlwaysOnDisplayNotificationIconViewStore; import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel; 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.ScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -166,6 +173,7 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { when(mSmartspaceController.buildAndConnectView(any())).thenReturn(mFakeSmartspaceView); mExecutor = new FakeExecutor(new FakeSystemClock()); mFakeFeatureFlags = new FakeFeatureFlags(); mFakeFeatureFlags.setDefault(Flags.NOTIFICATION_ICON_CONTAINER_REFACTOR); mFakeFeatureFlags.set(FACE_AUTH_REFACTOR, false); mFakeFeatureFlags.set(LOCKSCREEN_WALLPAPER_DREAM_ENABLED, false); mFakeFeatureFlags.set(MIGRATE_KEYGUARD_STATUS_VIEW, false); Loading @@ -176,12 +184,18 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { mKeyguardSliceViewController, mNotificationIconAreaController, mSmartspaceController, mock(ConfigurationController.class), mock(ScreenOffAnimationController.class), mKeyguardUnlockAnimationController, mSecureSettings, mExecutor, mDumpManager, mClockEventController, mLogBuffer, mock(NotificationIconContainerAlwaysOnDisplayViewModel.class), mock(ConfigurationState.class), mock(DozeParameters.class), mock(AlwaysOnDisplayNotificationIconViewStore.class), KeyguardInteractorFactory.create(mFakeFeatureFlags).getKeyguardInteractor(), mFakeFeatureFlags ); Loading