diff options
| author | 2023-11-10 17:33:48 +0000 | |
|---|---|---|
| committer | 2023-11-10 18:16:17 +0000 | |
| commit | 5501c88302a2544e7dd5a8605c0a045ac679f3f2 (patch) | |
| tree | fb29547640592d18b3a5cfc5b336332442ee77e2 | |
| parent | 75dd2c79d5c6d71a360b4ea650e25ac06f23e18f (diff) | |
Fix crash loop related to ambient indication with keyguardBottomAreaRefactor flag
Bug: 290652751
Fixes: 305176847
Test: atest DefaultKeyguardBlueprintTest
Test: manual - flip flag on, ensure crash loop does not happen
Change-Id: Id243b93494024791586d8752bb73c6b0de2a61d2
10 files changed, 87 insertions, 303 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 9fc86adce091..59a6244b2bbc 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -59,6 +59,7 @@ import com.android.systemui.flags.FlagsModule; import com.android.systemui.keyboard.KeyboardModule; import com.android.systemui.keyevent.data.repository.KeyEventRepositoryModule; import com.android.systemui.keyguard.ui.view.layout.blueprints.KeyguardBlueprintModule; +import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule; import com.android.systemui.log.dagger.LogModule; import com.android.systemui.log.dagger.MonitorLog; import com.android.systemui.log.table.TableLogBuffer; @@ -189,6 +190,7 @@ import javax.inject.Named; KeyEventRepositoryModule.class, KeyboardModule.class, KeyguardBlueprintModule.class, + KeyguardSectionsModule.class, LetterboxModule.class, LogModule.class, MediaProjectionModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt deleted file mode 100644 index 5900a2467994..000000000000 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardAmbientIndicationAreaViewBinder.kt +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.android.systemui.keyguard.ui.binder - -import android.view.View -import android.view.ViewGroup -import android.view.ViewPropertyAnimator -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.repeatOnLifecycle -import com.android.systemui.res.R -import com.android.systemui.keyguard.ui.viewmodel.KeyguardAmbientIndicationViewModel -import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel -import com.android.systemui.lifecycle.repeatWhenAttached -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.flatMapLatest -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch - -object KeyguardAmbientIndicationAreaViewBinder { - /** - * Defines interface for an object that acts as the binding between the view and its view-model. - * - * Users of the [KeyguardBottomAreaViewBinder] class should use this to control the binder after - * it is bound. - */ - interface Binding { - /** - * Returns a collection of [ViewPropertyAnimator] instances that can be used to animate the - * indication areas. - */ - fun getIndicationAreaAnimators(): List<ViewPropertyAnimator> - - /** Notifies that device configuration has changed. */ - fun onConfigurationChanged() - - /** Destroys this binding, releases resources, and cancels any coroutines. */ - fun destroy() - } - - @OptIn(ExperimentalCoroutinesApi::class) - fun bind( - view: ViewGroup, - viewModel: KeyguardAmbientIndicationViewModel, - keyguardRootViewModel: KeyguardRootViewModel, - ): Binding { - val ambientIndicationArea: View? = view.findViewById(R.id.ambient_indication_container) - val configurationBasedDimensions = MutableStateFlow(loadFromResources(view)) - - val disposableHandle = - view.repeatWhenAttached { - repeatOnLifecycle(Lifecycle.State.STARTED) { - launch { - keyguardRootViewModel.alpha.collect { alpha -> - ambientIndicationArea?.apply { - this.importantForAccessibility = - if (alpha == 0f) { - View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS - } else { - View.IMPORTANT_FOR_ACCESSIBILITY_AUTO - } - this.alpha = alpha - } - } - } - - launch { - viewModel.indicationAreaTranslationX.collect { translationX -> - ambientIndicationArea?.translationX = translationX - } - } - - launch { - configurationBasedDimensions - .map { it.defaultBurnInPreventionYOffsetPx } - .flatMapLatest { defaultBurnInOffsetY -> - viewModel.indicationAreaTranslationY(defaultBurnInOffsetY) - } - .collect { translationY -> - ambientIndicationArea?.translationY = translationY - } - } - - } - } - - - return object : Binding { - override fun getIndicationAreaAnimators(): List<ViewPropertyAnimator> { - return listOf(ambientIndicationArea).mapNotNull { it?.animate() } - } - - override fun onConfigurationChanged() { - configurationBasedDimensions.value = loadFromResources(view) - } - - override fun destroy() { - disposableHandle.dispose() - } - } - } - - private fun loadFromResources(view: View): ConfigurationBasedDimensions { - return ConfigurationBasedDimensions( - defaultBurnInPreventionYOffsetPx = - view.resources.getDimensionPixelOffset(R.dimen.default_burn_in_prevention_offset), - ) - } - - private data class ConfigurationBasedDimensions( - val defaultBurnInPreventionYOffsetPx: Int, - ) -}
\ No newline at end of file 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 2e64c41bace8..0cf891c3f665 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 @@ -20,10 +20,10 @@ package com.android.systemui.keyguard.ui.view.layout.blueprints import com.android.systemui.communal.ui.view.layout.sections.CommunalTutorialIndicatorSection import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.KeyguardBlueprint +import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.keyguard.ui.view.layout.items.ClockSection import com.android.systemui.keyguard.ui.view.layout.sections.AodBurnInSection import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection -import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultDeviceEntryIconSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultNotificationStackScrollLayoutSection @@ -31,8 +31,13 @@ import com.android.systemui.keyguard.ui.view.layout.sections.DefaultSettingsPopu import com.android.systemui.keyguard.ui.view.layout.sections.DefaultShortcutsSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusBarSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusViewSection +import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule.Companion.KEYGUARD_AMBIENT_INDICATION_AREA_SECTION import com.android.systemui.keyguard.ui.view.layout.sections.SmartspaceSection +import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeGuidelines +import java.util.Optional import javax.inject.Inject +import javax.inject.Named +import kotlin.jvm.optionals.getOrNull /** * Positions elements of the lockscreen to the default position. @@ -47,7 +52,8 @@ constructor( defaultIndicationAreaSection: DefaultIndicationAreaSection, defaultDeviceEntryIconSection: DefaultDeviceEntryIconSection, defaultShortcutsSection: DefaultShortcutsSection, - defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection, + @Named(KEYGUARD_AMBIENT_INDICATION_AREA_SECTION) + defaultAmbientIndicationAreaSection: Optional<KeyguardSection>, defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection, defaultStatusViewSection: DefaultStatusViewSection, defaultStatusBarSection: DefaultStatusBarSection, @@ -61,11 +67,11 @@ constructor( override val id: String = DEFAULT override val sections = - listOf( + listOfNotNull( defaultIndicationAreaSection, defaultDeviceEntryIconSection, defaultShortcutsSection, - defaultAmbientIndicationAreaSection, + defaultAmbientIndicationAreaSection.getOrNull(), defaultSettingsPopupMenuSection, defaultStatusViewSection, defaultStatusBarSection, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt index d8b368b4a0d3..14e8f892e101 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt @@ -19,18 +19,22 @@ package com.android.systemui.keyguard.ui.view.layout.blueprints import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.KeyguardBlueprint +import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.keyguard.ui.view.layout.sections.AlignShortcutsToUdfpsSection import com.android.systemui.keyguard.ui.view.layout.sections.AodBurnInSection import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection -import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultDeviceEntryIconSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultNotificationStackScrollLayoutSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultSettingsPopupMenuSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusBarSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusViewSection +import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeGuidelines +import com.android.systemui.util.kotlin.getOrNull +import java.util.Optional import javax.inject.Inject +import javax.inject.Named /** Vertically aligns the shortcuts with the udfps. */ @SysUISingleton @@ -39,7 +43,8 @@ class ShortcutsBesideUdfpsKeyguardBlueprint constructor( defaultIndicationAreaSection: DefaultIndicationAreaSection, defaultDeviceEntryIconSection: DefaultDeviceEntryIconSection, - defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection, + @Named(KeyguardSectionsModule.KEYGUARD_AMBIENT_INDICATION_AREA_SECTION) + defaultAmbientIndicationAreaSection: Optional<KeyguardSection>, defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection, alignShortcutsToUdfpsSection: AlignShortcutsToUdfpsSection, defaultStatusViewSection: DefaultStatusViewSection, @@ -52,10 +57,10 @@ constructor( override val id: String = SHORTCUTS_BESIDE_UDFPS override val sections = - listOf( + listOfNotNull( defaultIndicationAreaSection, defaultDeviceEntryIconSection, - defaultAmbientIndicationAreaSection, + defaultAmbientIndicationAreaSection.getOrNull(), defaultSettingsPopupMenuSection, alignShortcutsToUdfpsSection, defaultStatusViewSection, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt index 35679b84771b..0d397bff72ce 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt @@ -20,18 +20,22 @@ package com.android.systemui.keyguard.ui.view.layout.blueprints import com.android.systemui.communal.ui.view.layout.sections.CommunalTutorialIndicatorSection import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.KeyguardBlueprint +import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.keyguard.ui.view.layout.sections.AodBurnInSection import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection -import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultDeviceEntryIconSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultSettingsPopupMenuSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultShortcutsSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusBarSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusViewSection +import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeGuidelines import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeNotificationStackScrollLayoutSection +import com.android.systemui.util.kotlin.getOrNull +import java.util.Optional import javax.inject.Inject +import javax.inject.Named /** * Split-shade layout, mostly used for larger devices like foldables and tablets when in landscape @@ -45,7 +49,8 @@ constructor( defaultIndicationAreaSection: DefaultIndicationAreaSection, defaultDeviceEntryIconSection: DefaultDeviceEntryIconSection, defaultShortcutsSection: DefaultShortcutsSection, - defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection, + @Named(KeyguardSectionsModule.KEYGUARD_AMBIENT_INDICATION_AREA_SECTION) + defaultAmbientIndicationAreaSection: Optional<KeyguardSection>, defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection, defaultStatusViewSection: DefaultStatusViewSection, defaultStatusBarSection: DefaultStatusBarSection, @@ -58,11 +63,11 @@ constructor( override val id: String = ID override val sections = - listOf( + listOfNotNull( defaultIndicationAreaSection, defaultDeviceEntryIconSection, defaultShortcutsSection, - defaultAmbientIndicationAreaSection, + defaultAmbientIndicationAreaSection.getOrNull(), defaultSettingsPopupMenuSection, defaultStatusViewSection, defaultStatusBarSection, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt index eb01d4f6f61c..b7a165c212fd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AlignShortcutsToUdfpsSection.kt @@ -28,6 +28,8 @@ import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.systemui.Flags.keyguardBottomAreaRefactor import com.android.systemui.res.R import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.flags.FeatureFlagsClassic +import com.android.systemui.flags.Flags import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel @@ -46,6 +48,7 @@ constructor( private val falsingManager: FalsingManager, private val indicationController: KeyguardIndicationController, private val vibratorHelper: VibratorHelper, + private val featureFlags: FeatureFlagsClassic, ) : BaseShortcutSection() { override fun addViews(constraintLayout: ConstraintLayout) { if (keyguardBottomAreaRefactor()) { @@ -83,20 +86,26 @@ constructor( val width = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_width) val height = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_height) + val lockIconViewId = if (featureFlags.isEnabled(Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS)) { + R.id.device_entry_icon_view + } else { + R.id.lock_icon_view + } + constraintSet.apply { constrainWidth(R.id.start_button, width) constrainHeight(R.id.start_button, height) connect(R.id.start_button, LEFT, PARENT_ID, LEFT) - connect(R.id.start_button, RIGHT, R.id.lock_icon_view, LEFT) - connect(R.id.start_button, TOP, R.id.lock_icon_view, TOP) - connect(R.id.start_button, BOTTOM, R.id.lock_icon_view, BOTTOM) + connect(R.id.start_button, RIGHT, lockIconViewId, LEFT) + connect(R.id.start_button, TOP, lockIconViewId, TOP) + connect(R.id.start_button, BOTTOM, lockIconViewId, BOTTOM) constrainWidth(R.id.end_button, width) constrainHeight(R.id.end_button, height) connect(R.id.end_button, RIGHT, PARENT_ID, RIGHT) - connect(R.id.end_button, LEFT, R.id.lock_icon_view, RIGHT) - connect(R.id.end_button, TOP, R.id.lock_icon_view, TOP) - connect(R.id.end_button, BOTTOM, R.id.lock_icon_view, BOTTOM) + connect(R.id.end_button, LEFT, lockIconViewId, RIGHT) + connect(R.id.end_button, TOP, lockIconViewId, TOP) + connect(R.id.end_button, BOTTOM, lockIconViewId, BOTTOM) } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt deleted file mode 100644 index 20cb9b0576db..000000000000 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultAmbientIndicationAreaSection.kt +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.android.systemui.keyguard.ui.view.layout.sections - -import android.view.LayoutInflater -import android.view.ViewGroup.LayoutParams.MATCH_PARENT -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.constraintlayout.widget.ConstraintSet -import androidx.constraintlayout.widget.ConstraintSet.BOTTOM -import androidx.constraintlayout.widget.ConstraintSet.END -import androidx.constraintlayout.widget.ConstraintSet.MATCH_CONSTRAINT -import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID -import androidx.constraintlayout.widget.ConstraintSet.START -import androidx.constraintlayout.widget.ConstraintSet.TOP -import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT -import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.Flags.keyguardBottomAreaRefactor -import com.android.systemui.res.R -import com.android.systemui.keyguard.shared.model.KeyguardSection -import com.android.systemui.keyguard.ui.binder.KeyguardAmbientIndicationAreaViewBinder -import com.android.systemui.keyguard.ui.viewmodel.KeyguardAmbientIndicationViewModel -import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel -import javax.inject.Inject - -class DefaultAmbientIndicationAreaSection -@Inject -constructor( - private val keyguardUpdateMonitor: KeyguardUpdateMonitor, - private val keyguardAmbientIndicationViewModel: KeyguardAmbientIndicationViewModel, - private val keyguardRootViewModel: KeyguardRootViewModel, -) : KeyguardSection() { - private var ambientIndicationAreaHandle: KeyguardAmbientIndicationAreaViewBinder.Binding? = null - - override fun addViews(constraintLayout: ConstraintLayout) { - if (keyguardBottomAreaRefactor()) { - val view = - LayoutInflater.from(constraintLayout.context) - .inflate(R.layout.ambient_indication, constraintLayout, false) - - constraintLayout.addView(view) - } - } - - override fun bindData(constraintLayout: ConstraintLayout) { - if (keyguardBottomAreaRefactor()) { - ambientIndicationAreaHandle = - KeyguardAmbientIndicationAreaViewBinder.bind( - constraintLayout, - keyguardAmbientIndicationViewModel, - keyguardRootViewModel, - ) - } - } - - override fun applyConstraints(constraintSet: ConstraintSet) { - constraintSet.apply { - constrainWidth(R.id.ambient_indication_container, MATCH_PARENT) - - if (keyguardUpdateMonitor.isUdfpsSupported) { - // constrain below udfps and above indication area - constrainHeight(R.id.ambient_indication_container, MATCH_CONSTRAINT) - connect(R.id.ambient_indication_container, TOP, R.id.lock_icon_view, BOTTOM) - connect( - R.id.ambient_indication_container, - BOTTOM, - R.id.keyguard_indication_area, - TOP - ) - connect(R.id.ambient_indication_container, START, PARENT_ID, START) - connect(R.id.ambient_indication_container, END, PARENT_ID, END) - } else { - // constrain above lock icon - constrainHeight(R.id.ambient_indication_container, WRAP_CONTENT) - connect(R.id.ambient_indication_container, BOTTOM, R.id.lock_icon_view, TOP) - connect(R.id.ambient_indication_container, START, PARENT_ID, START) - connect(R.id.ambient_indication_container, END, PARENT_ID, END) - } - } - } - - override fun removeViews(constraintLayout: ConstraintLayout) { - ambientIndicationAreaHandle?.destroy() - - constraintLayout.removeView(R.id.ambient_indication_container) - } -} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSectionsModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSectionsModule.kt new file mode 100644 index 000000000000..37c00b61c4dd --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSectionsModule.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.android.systemui.keyguard.ui.view.layout.sections + +import com.android.systemui.keyguard.shared.model.KeyguardSection +import dagger.BindsOptionalOf +import dagger.Module +import javax.inject.Named + +@Module +abstract class KeyguardSectionsModule { + + companion object { + const val KEYGUARD_AMBIENT_INDICATION_AREA_SECTION = + "keyguard_ambient_indication_area_section" + } + + @BindsOptionalOf + @Named(KEYGUARD_AMBIENT_INDICATION_AREA_SECTION) + abstract fun defaultAmbientIndicationAreaSection(): KeyguardSection + +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardAmbientIndicationViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardAmbientIndicationViewModel.kt deleted file mode 100644 index dd3967aed99d..000000000000 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardAmbientIndicationViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.android.systemui.keyguard.ui.viewmodel - -import com.android.systemui.doze.util.BurnInHelperWrapper -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.map -import javax.inject.Inject - -class KeyguardAmbientIndicationViewModel -@Inject -constructor( - private val keyguardInteractor: KeyguardInteractor, - private val burnInHelperWrapper: BurnInHelperWrapper, -) { - - /** An observable for the x-offset by which the indication area should be translated. */ - val indicationAreaTranslationX: Flow<Float> = - keyguardInteractor.clockPosition.map { it.x.toFloat() }.distinctUntilChanged() - - /** Returns an observable for the y-offset by which the indication area should be translated. */ - fun indicationAreaTranslationY(defaultBurnInOffset: Int): Flow<Float> { - return keyguardInteractor.dozeAmount - .map { dozeAmount -> - dozeAmount * - (burnInHelperWrapper.burnInOffset( - /* amplitude = */ defaultBurnInOffset * 2, - /* xAxis= */ false, - ) - defaultBurnInOffset) - } - .distinctUntilChanged() - } -}
\ No newline at end of file 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 43d70adf26b0..76c258935727 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 @@ -30,7 +30,6 @@ import com.android.systemui.keyguard.ui.view.KeyguardRootView import com.android.systemui.keyguard.ui.view.layout.items.ClockSection import com.android.systemui.keyguard.ui.view.layout.sections.AodBurnInSection import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection -import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultDeviceEntryIconSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultNotificationStackScrollLayoutSection @@ -49,6 +48,7 @@ import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations +import java.util.Optional @RunWith(AndroidTestingRunner::class) @RunWithLooper(setAsMainLooper = true) @@ -60,7 +60,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { @Mock private lateinit var mDefaultDeviceEntryIconSection: DefaultDeviceEntryIconSection @Mock private lateinit var defaultShortcutsSection: DefaultShortcutsSection @Mock - private lateinit var defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection + private lateinit var defaultAmbientIndicationAreaSection: Optional<KeyguardSection> @Mock private lateinit var defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection @Mock private lateinit var defaultStatusViewSection: DefaultStatusViewSection @Mock private lateinit var defaultStatusBarViewSection: DefaultStatusBarSection @@ -98,7 +98,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { fun replaceViews() { val constraintLayout = ConstraintLayout(context, null) underTest.replaceViews(null, constraintLayout) - underTest.sections.forEach { verify(it).addViews(constraintLayout) } + underTest.sections.forEach { verify(it)?.addViews(constraintLayout) } } @Test @@ -110,7 +110,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { val constraintLayout = ConstraintLayout(context, null) underTest.replaceViews(prevBlueprint, constraintLayout) underTest.sections.minus(mDefaultDeviceEntryIconSection).forEach { - verify(it, never()).addViews(constraintLayout) + verify(it, never())?.addViews(constraintLayout) } verify(mDefaultDeviceEntryIconSection).addViews(constraintLayout) @@ -121,6 +121,6 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { fun applyConstraints() { val cs = ConstraintSet() underTest.applyConstraints(cs) - underTest.sections.forEach { verify(it).applyConstraints(cs) } + underTest.sections.forEach { verify(it)?.applyConstraints(cs) } } } |