Merge "Clean up LAZY_INFLATE_KEYGUARD flag" into main
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
index 257006e..22bcf0a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
@@ -18,10 +18,8 @@
package com.android.systemui.keyguard
import android.content.Context
-import android.content.res.Configuration
import android.view.LayoutInflater
import android.view.View
-import android.view.ViewGroup
import com.android.keyguard.KeyguardStatusView
import com.android.keyguard.KeyguardStatusViewController
import com.android.keyguard.LockIconView
@@ -29,38 +27,21 @@
import com.android.keyguard.dagger.KeyguardStatusViewComponent
import com.android.systemui.CoreStartable
import com.android.systemui.R
-import com.android.systemui.communal.ui.adapter.CommunalWidgetViewAdapter
-import com.android.systemui.communal.ui.binder.CommunalWidgetViewBinder
-import com.android.systemui.communal.ui.viewmodel.CommunalWidgetViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
-import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
-import com.android.systemui.keyguard.ui.binder.KeyguardAmbientIndicationAreaViewBinder
import com.android.systemui.keyguard.ui.binder.KeyguardBlueprintViewBinder
import com.android.systemui.keyguard.ui.binder.KeyguardIndicationAreaBinder
-import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
import com.android.systemui.keyguard.ui.binder.KeyguardRootViewBinder
-import com.android.systemui.keyguard.ui.binder.KeyguardSettingsViewBinder
import com.android.systemui.keyguard.ui.view.KeyguardIndicationArea
import com.android.systemui.keyguard.ui.view.KeyguardRootView
import com.android.systemui.keyguard.ui.view.layout.KeyguardBlueprintCommandListener
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardAmbientIndicationViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewModel
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardSettingsMenuViewModel
import com.android.systemui.keyguard.ui.viewmodel.OccludingAppDeviceEntryMessageViewModel
-import com.android.systemui.plugins.ActivityStarter
-import com.android.systemui.plugins.FalsingManager
import com.android.systemui.shade.NotificationShadeWindowView
import com.android.systemui.statusbar.KeyguardIndicationController
-import com.android.systemui.statusbar.VibratorHelper
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
-import com.android.systemui.statusbar.notification.stack.ui.viewbinder.SharedNotificationContainerBinder
-import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SharedNotificationContainerViewModel
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
import javax.inject.Inject
@@ -74,30 +55,17 @@
@Inject
constructor(
private val keyguardRootView: KeyguardRootView,
- private val sharedNotificationContainer: SharedNotificationContainer,
private val keyguardRootViewModel: KeyguardRootViewModel,
private val keyguardIndicationAreaViewModel: KeyguardIndicationAreaViewModel,
- private val sharedNotificationContainerViewModel: SharedNotificationContainerViewModel,
- private val keyguardAmbientIndicationViewModel: KeyguardAmbientIndicationViewModel,
private val notificationShadeWindowView: NotificationShadeWindowView,
private val featureFlags: FeatureFlags,
private val indicationController: KeyguardIndicationController,
- private val keyguardQuickAffordancesCombinedViewModel:
- KeyguardQuickAffordancesCombinedViewModel,
- private val falsingManager: FalsingManager,
- private val vibratorHelper: VibratorHelper,
private val keyguardStateController: KeyguardStateController,
- private val keyguardSettingsMenuViewModel: KeyguardSettingsMenuViewModel,
- private val activityStarter: ActivityStarter,
private val occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel,
private val chipbarCoordinator: ChipbarCoordinator,
private val keyguardBlueprintCommandListener: KeyguardBlueprintCommandListener,
private val keyguardBlueprintViewModel: KeyguardBlueprintViewModel,
private val keyguardStatusViewComponentFactory: KeyguardStatusViewComponent.Factory,
- private val keyguardBlueprintInteractor: KeyguardBlueprintInteractor,
- private val communalWidgetViewModel: CommunalWidgetViewModel,
- private val communalWidgetViewAdapter: CommunalWidgetViewAdapter,
- private val notificationStackScrollerLayoutController: NotificationStackScrollLayoutController,
private val context: Context,
private val keyguardIndicationController: KeyguardIndicationController,
private val lockIconViewController: LockIconViewController,
@@ -105,10 +73,7 @@
private var rootViewHandle: DisposableHandle? = null
private var indicationAreaHandle: DisposableHandle? = null
- private var leftShortcutHandle: KeyguardQuickAffordanceViewBinder.Binding? = null
- private var rightShortcutHandle: KeyguardQuickAffordanceViewBinder.Binding? = null
- private var ambientIndicationAreaHandle: KeyguardAmbientIndicationAreaViewBinder.Binding? = null
- private var settingsPopupMenuHandle: DisposableHandle? = null
+
var keyguardStatusViewController: KeyguardStatusViewController? = null
get() {
if (field == null) {
@@ -127,52 +92,12 @@
override fun start() {
bindKeyguardRootView()
- if (featureFlags.isEnabled(Flags.LAZY_INFLATE_KEYGUARD)) {
- keyguardRootView.removeAllViews()
- initializeViews()
- } else {
- val notificationPanel =
- notificationShadeWindowView.requireViewById(R.id.notification_panel) as ViewGroup
- unbindKeyguardBottomArea(notificationPanel)
- bindIndicationArea()
- bindLockIconView(notificationPanel)
- bindKeyguardStatusView(notificationPanel)
- setupNotificationStackScrollLayout(notificationPanel)
- bindLeftShortcut()
- bindRightShortcut()
- bindAmbientIndicationArea()
- bindSettingsPopupMenu()
- bindCommunalWidgetArea()
- }
+ initializeViews()
KeyguardBlueprintViewBinder.bind(keyguardRootView, keyguardBlueprintViewModel)
keyguardBlueprintCommandListener.start()
}
- fun setupNotificationStackScrollLayout(legacyParent: ViewGroup) {
- if (featureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
- // This moves the existing NSSL view to a different parent, as the controller is a
- // singleton and recreating it has other bad side effects
- val nssl =
- legacyParent.requireViewById<View>(R.id.notification_stack_scroller).also {
- (it.getParent() as ViewGroup).removeView(it)
- }
- sharedNotificationContainer.addNotificationStackScrollLayout(nssl)
- SharedNotificationContainerBinder.bind(
- sharedNotificationContainer,
- sharedNotificationContainerViewModel,
- notificationStackScrollerLayoutController,
- )
- }
- }
-
- override fun onConfigurationChanged(newConfig: Configuration?) {
- super.onConfigurationChanged(newConfig)
- leftShortcutHandle?.onConfigurationChanged()
- rightShortcutHandle?.onConfigurationChanged()
- ambientIndicationAreaHandle?.onConfigurationChanged()
- }
-
fun bindIndicationArea() {
indicationAreaHandle?.dispose()
@@ -213,135 +138,6 @@
)
}
- private fun bindLockIconView(legacyParent: ViewGroup) {
- if (featureFlags.isEnabled(Flags.MIGRATE_LOCK_ICON)) {
- legacyParent.requireViewById<View>(R.id.lock_icon_view).let {
- legacyParent.removeView(it)
- }
- } else {
- keyguardRootView.findViewById<View?>(R.id.lock_icon_view)?.let {
- keyguardRootView.removeView(it)
- }
- legacyParent.requireViewById<LockIconView>(R.id.lock_icon_view).let {
- lockIconViewController.setLockIconView(it)
- }
- }
- }
-
- private fun bindAmbientIndicationArea() {
- if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
- ambientIndicationAreaHandle?.destroy()
- ambientIndicationAreaHandle =
- KeyguardAmbientIndicationAreaViewBinder.bind(
- notificationShadeWindowView,
- keyguardAmbientIndicationViewModel,
- keyguardRootViewModel,
- )
- } else {
- keyguardRootView.findViewById<View?>(R.id.ambient_indication_container)?.let {
- keyguardRootView.removeView(it)
- }
- }
- }
-
- private fun bindSettingsPopupMenu() {
- if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
- settingsPopupMenuHandle?.dispose()
- settingsPopupMenuHandle =
- KeyguardSettingsViewBinder.bind(
- keyguardRootView,
- keyguardSettingsMenuViewModel,
- vibratorHelper,
- activityStarter,
- )
- } else {
- keyguardRootView.findViewById<View?>(R.id.keyguard_settings_button)?.let {
- keyguardRootView.removeView(it)
- }
- }
- }
-
- private fun unbindKeyguardBottomArea(legacyParent: ViewGroup) {
- if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
- legacyParent.requireViewById<View>(R.id.keyguard_bottom_area).let {
- legacyParent.removeView(it)
- }
- }
- }
-
- private fun bindLeftShortcut() {
- leftShortcutHandle?.destroy()
- if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
- leftShortcutHandle =
- KeyguardQuickAffordanceViewBinder.bind(
- keyguardRootView.requireViewById(R.id.start_button),
- keyguardQuickAffordancesCombinedViewModel.startButton,
- keyguardRootViewModel.alpha,
- falsingManager,
- vibratorHelper,
- ) {
- indicationController.showTransientIndication(it)
- }
- } else {
- keyguardRootView.findViewById<View?>(R.id.start_button)?.let {
- keyguardRootView.removeView(it)
- }
- }
- }
-
- private fun bindRightShortcut() {
- rightShortcutHandle?.destroy()
- if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
- rightShortcutHandle =
- KeyguardQuickAffordanceViewBinder.bind(
- keyguardRootView.requireViewById(R.id.end_button),
- keyguardQuickAffordancesCombinedViewModel.endButton,
- keyguardRootViewModel.alpha,
- falsingManager,
- vibratorHelper,
- ) {
- indicationController.showTransientIndication(it)
- }
- } else {
- keyguardRootView.findViewById<View?>(R.id.end_button)?.let {
- keyguardRootView.removeView(it)
- }
- }
- }
-
- fun bindKeyguardStatusView(legacyParent: ViewGroup) {
- // At startup, 2 views with the ID `R.id.keyguard_status_view` will be available.
- // Disable one of them
- if (featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) {
- legacyParent.findViewById<View>(R.id.keyguard_status_view)?.let {
- legacyParent.removeView(it)
- }
-
- val keyguardStatusView = keyguardRootView.addStatusView()
- val statusViewComponent = keyguardStatusViewComponentFactory.build(keyguardStatusView)
- val controller = statusViewComponent.getKeyguardStatusViewController()
- controller.init()
- keyguardStatusViewController = controller
- } else {
- keyguardRootView.findViewById<View?>(R.id.keyguard_status_view)?.let {
- keyguardRootView.removeView(it)
- }
- }
- }
-
- private fun bindCommunalWidgetArea() {
- if (!featureFlags.isEnabled(Flags.WIDGET_ON_KEYGUARD)) {
- return
- }
-
- CommunalWidgetViewBinder.bind(
- keyguardRootView,
- communalWidgetViewModel,
- communalWidgetViewAdapter,
- keyguardBlueprintInteractor,
- )
- }
-
/**
* Temporary, to allow NotificationPanelViewController to use the same instance while code is
* migrated: b/288242803
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
index a948741..f2b28d9 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
@@ -19,123 +19,14 @@
import android.content.Context
import android.util.AttributeSet
-import android.view.LayoutInflater
-import android.view.View
-import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.core.content.res.ResourcesCompat
-import com.android.keyguard.KeyguardStatusView
-import com.android.keyguard.LockIconView
-import com.android.systemui.R
-import com.android.systemui.animation.view.LaunchableImageView
/** Provides a container for all keyguard ui content. */
class KeyguardRootView(
context: Context,
- private val attrs: AttributeSet?,
+ attrs: AttributeSet?,
) :
ConstraintLayout(
context,
attrs,
- ) {
-
- private var statusView: KeyguardStatusView? = null
-
- init {
- addIndicationTextArea()
- addLockIconView()
- addAmbientIndicationArea()
- addLeftShortcut()
- addRightShortcut()
- addSettingsPopupMenu()
- addStatusView()
- }
-
- private fun addIndicationTextArea() {
- val view = KeyguardIndicationArea(context, attrs)
- addView(view)
- }
-
- private fun addLockIconView() {
- val view = LockIconView(context, attrs).apply { id = R.id.lock_icon_view }
- addView(view)
- }
-
- private fun addAmbientIndicationArea() {
- LayoutInflater.from(context).inflate(R.layout.ambient_indication, this)
- }
-
- private fun addLeftShortcut() {
- val padding = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_padding)
- val view =
- LaunchableImageView(context, attrs).apply {
- id = R.id.start_button
- scaleType = ImageView.ScaleType.FIT_CENTER
- background =
- ResourcesCompat.getDrawable(
- context.resources,
- R.drawable.keyguard_bottom_affordance_bg,
- context.theme
- )
- foreground =
- ResourcesCompat.getDrawable(
- context.resources,
- R.drawable.keyguard_bottom_affordance_selected_border,
- context.theme
- )
- visibility = View.INVISIBLE
- setPadding(padding, padding, padding, padding)
- }
- addView(view)
- }
-
- private fun addRightShortcut() {
- val padding = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_padding)
- val view =
- LaunchableImageView(context, attrs).apply {
- id = R.id.end_button
- scaleType = ImageView.ScaleType.FIT_CENTER
- background =
- ResourcesCompat.getDrawable(
- context.resources,
- R.drawable.keyguard_bottom_affordance_bg,
- context.theme
- )
- foreground =
- ResourcesCompat.getDrawable(
- context.resources,
- R.drawable.keyguard_bottom_affordance_selected_border,
- context.theme
- )
- visibility = View.INVISIBLE
- setPadding(padding, padding, padding, padding)
- }
- addView(view)
- }
-
- private fun addSettingsPopupMenu() {
- val view =
- LayoutInflater.from(context)
- .inflate(R.layout.keyguard_settings_popup_menu, this, false)
- .apply {
- id = R.id.keyguard_settings_button
- visibility = GONE
- }
- addView(view)
- }
-
- fun addStatusView(): KeyguardStatusView {
- // StatusView may need to be rebuilt on config changes. Remove and reinflate
- statusView?.let { removeView(it) }
- val view =
- (LayoutInflater.from(context).inflate(R.layout.keyguard_status_view, this, false)
- as KeyguardStatusView)
- .apply {
- setClipChildren(false)
- statusView = this
- }
-
- addView(view)
- return view
- }
-}
+ )
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
index 43bbf69..1eeb017 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
@@ -17,10 +17,7 @@
package com.android.systemui.keyguard.ui.view.layout.blueprints
-import androidx.constraintlayout.widget.ConstraintLayout
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection
@@ -54,7 +51,6 @@
defaultNotificationStackScrollLayoutSection: DefaultNotificationStackScrollLayoutSection,
splitShadeGuidelines: SplitShadeGuidelines,
aodNotificationIconsSection: AodNotificationIconsSection,
- private val featureFlags: FeatureFlags,
) : KeyguardBlueprint {
override val id: String = DEFAULT
@@ -72,16 +68,6 @@
aodNotificationIconsSection,
)
- override fun replaceViews(
- previousBlueprint: KeyguardBlueprint?,
- constraintLayout: ConstraintLayout,
- bindData: Boolean
- ) {
- if (featureFlags.isEnabled(Flags.LAZY_INFLATE_KEYGUARD)) {
- super.replaceViews(previousBlueprint, constraintLayout, bindData)
- }
- }
-
companion object {
const val DEFAULT = "default"
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index d2e80fc..adff590 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -1404,13 +1404,6 @@
updateViewControllers(userAvatarView, keyguardUserSwitcherView);
- if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW) && !mFeatureFlags.isEnabled(
- Flags.LAZY_INFLATE_KEYGUARD)) {
- attachSplitShadeMediaPlayerContainer(
- mKeyguardViewConfigurator.getKeyguardRootView()
- .findViewById(R.id.status_view_media_container));
- }
-
if (!mFeatureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
// Update keyguard bottom area
int index = mView.indexOfChild(mKeyguardBottomArea);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
index d6b621e..7f4755d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
@@ -23,8 +23,6 @@
import androidx.constraintlayout.widget.ConstraintSet
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FakeFeatureFlags
-import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.view.KeyguardRootView
@@ -66,8 +64,6 @@
@Mock private lateinit var splitShadeGuidelines: SplitShadeGuidelines
@Mock private lateinit var aodNotificationIconsSection: AodNotificationIconsSection
- private val featureFlags = FakeFeatureFlags()
-
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
@@ -84,23 +80,13 @@
defaultNSSLSection,
splitShadeGuidelines,
aodNotificationIconsSection,
- featureFlags,
)
- featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, false)
}
@Test
fun replaceViews() {
val constraintLayout = ConstraintLayout(context, null)
underTest.replaceViews(null, constraintLayout)
- underTest.sections.forEach { verify(it, never()).addViews(constraintLayout) }
- }
-
- @Test
- fun replaceViews_lazyInflateFlagOn() {
- featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, true)
- val constraintLayout = ConstraintLayout(context, null)
- underTest.replaceViews(null, constraintLayout)
underTest.sections.forEach { verify(it).addViews(constraintLayout) }
}
@@ -110,7 +96,6 @@
val someSection = mock(KeyguardSection::class.java)
whenever(prevBlueprint.sections)
.thenReturn(underTest.sections.minus(defaultLockIconSection).plus(someSection))
- featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, true)
val constraintLayout = ConstraintLayout(context, null)
underTest.replaceViews(prevBlueprint, constraintLayout)
underTest.sections.minus(defaultLockIconSection).forEach {