Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea207f2d authored by Hawkwood's avatar Hawkwood
Browse files

Convert remaining elements to implement LockscreenElement

Bug: 432451019
Test: Checked modified elements
Flag: com.android.systemui.scene_container
Change-Id: I5075fec8cb1cf051266b20c36bd2b9be949b3ead
parent 44a60618
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -51,8 +51,8 @@ import com.android.systemui.communal.ui.compose.section.CommunalPopupSection
import com.android.systemui.communal.ui.compose.section.HubOnboardingSection
import com.android.systemui.communal.ui.view.layout.sections.CommunalAppWidgetSection
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.keyguard.ui.composable.element.IndicationAreaElement
import com.android.systemui.keyguard.ui.composable.element.LockElement
import com.android.systemui.keyguard.ui.composable.elements.IndicationAreaElementProvider
import com.android.systemui.keyguard.ui.composable.elements.LockIconElementProvider
import com.android.systemui.keyguard.ui.composable.layout.LockIconAlignmentLines
import com.android.systemui.res.R
import com.android.systemui.statusbar.phone.SystemUIDialogFactory
@@ -66,8 +66,8 @@ constructor(
    private val interactionHandler: SmartspaceInteractionHandler,
    private val communalSettingsInteractor: CommunalSettingsInteractor,
    private val dialogFactory: SystemUIDialogFactory,
    private val lockElement: LockElement,
    private val indicationAreaElement: IndicationAreaElement,
    private val lockElement: LockIconElementProvider,
    private val indicationAreaElement: IndicationAreaElementProvider,
    private val communalPopupSection: CommunalPopupSection,
    private val widgetSection: CommunalAppWidgetSection,
    private val hubOnboardingSection: HubOnboardingSection,
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package com.android.systemui.keyguard.ui.composable

import com.android.systemui.keyguard.ui.composable.blueprint.CommunalBlueprintModule
import com.android.systemui.keyguard.ui.composable.element.OptionalElementModule
import com.android.systemui.keyguard.ui.composable.elements.OptionalElementModule
import dagger.Module

@Module(includes = [CommunalBlueprintModule::class, OptionalElementModule::class])
+4 −4
Original line number Diff line number Diff line
@@ -31,20 +31,20 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.input.pointer.pointerInput
import com.android.systemui.keyguard.ui.viewmodel.KeyguardTouchHandlingViewModel
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.plugins.keyguard.VRectF

/** Container for lockscreen content that handles inputs including long-press and double tap. */
@Composable
fun LockscreenTouchHandling(
    viewModelFactory: KeyguardTouchHandlingViewModel.Factory,
    modifier: Modifier = Modifier,
    content: @Composable BoxScope.(onSettingsMenuPlaces: (coordinates: Rect?) -> Unit) -> Unit,
    content: @Composable BoxScope.(onSettingsMenuPlaces: (coordinates: VRectF) -> Unit) -> Unit,
) {
    val viewModel = rememberViewModel("LockscreenLongPress") { viewModelFactory.create() }
    val (settingsMenuBounds, setSettingsMenuBounds) = remember { mutableStateOf<Rect?>(null) }
    val (settingsMenuBounds, setSettingsMenuBounds) = remember { mutableStateOf(VRectF.ZERO) }
    val interactionSource = remember { MutableInteractionSource() }

    Box(
@@ -64,7 +64,7 @@ fun LockscreenTouchHandling(
                .pointerInput(settingsMenuBounds) {
                    awaitEachGesture {
                        val pointerInputChange = awaitFirstDown()
                        if (settingsMenuBounds?.contains(pointerInputChange.position) == false) {
                        if (!settingsMenuBounds.contains(pointerInputChange.position)) {
                            viewModel.onTouchedOutside()
                        }
                    }
+66 −88
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.keyguard.ui.composable.blueprint

import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
@@ -24,21 +23,22 @@ import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentScope
import com.android.systemui.keyguard.ui.composable.LockscreenTouchHandling
import com.android.systemui.keyguard.ui.composable.element.AmbientIndicationElement
import com.android.systemui.keyguard.ui.composable.element.AodNotificationIconsElementProvider
import com.android.systemui.keyguard.ui.composable.element.AodPromotedNotificationAreaElementProvider
import com.android.systemui.keyguard.ui.composable.element.ClockRegionElementProvider
import com.android.systemui.keyguard.ui.composable.element.IndicationAreaElement
import com.android.systemui.keyguard.ui.composable.element.LockElement
import com.android.systemui.keyguard.ui.composable.element.LockscreenElementFactoryImpl
import com.android.systemui.keyguard.ui.composable.element.LockscreenElementFactoryImpl.Companion.createRemembered
import com.android.systemui.keyguard.ui.composable.element.LockscreenUpperRegionElementProvider
import com.android.systemui.keyguard.ui.composable.element.MediaElementProvider
import com.android.systemui.keyguard.ui.composable.element.NotificationStackElementProvider
import com.android.systemui.keyguard.ui.composable.element.SettingsMenuElement
import com.android.systemui.keyguard.ui.composable.element.ShortcutElement
import com.android.systemui.keyguard.ui.composable.element.SmartspaceElementProvider
import com.android.systemui.keyguard.ui.composable.element.StatusBarElement
import com.android.systemui.keyguard.ui.composable.elements.AmbientIndicationElementProvider
import com.android.systemui.keyguard.ui.composable.elements.AodNotificationIconsElementProvider
import com.android.systemui.keyguard.ui.composable.elements.AodPromotedNotificationAreaElementProvider
import com.android.systemui.keyguard.ui.composable.elements.ClockRegionElementProvider
import com.android.systemui.keyguard.ui.composable.elements.IndicationAreaElementProvider
import com.android.systemui.keyguard.ui.composable.elements.LockIconElementProvider
import com.android.systemui.keyguard.ui.composable.elements.LockscreenElementFactoryImpl
import com.android.systemui.keyguard.ui.composable.elements.LockscreenElementFactoryImpl.Companion.createRemembered
import com.android.systemui.keyguard.ui.composable.elements.LockscreenLowerRegionElementProvider
import com.android.systemui.keyguard.ui.composable.elements.LockscreenUpperRegionElementProvider
import com.android.systemui.keyguard.ui.composable.elements.MediaElementProvider
import com.android.systemui.keyguard.ui.composable.elements.NotificationStackElementProvider
import com.android.systemui.keyguard.ui.composable.elements.SettingsMenuElementProvider
import com.android.systemui.keyguard.ui.composable.elements.ShortcutElementProvider
import com.android.systemui.keyguard.ui.composable.elements.SmartspaceElementProvider
import com.android.systemui.keyguard.ui.composable.elements.StatusBarElementProvider
import com.android.systemui.keyguard.ui.composable.layout.LockscreenSceneLayout
import com.android.systemui.keyguard.ui.composable.modifier.burnInAware
import com.android.systemui.keyguard.ui.viewmodel.AodBurnInViewModel
@@ -55,16 +55,18 @@ class DefaultBlueprint
constructor(
    private val keyguardClockViewModel: KeyguardClockViewModel,
    private val aodBurnInViewModel: AodBurnInViewModel,
    private val statusBarElement: StatusBarElement,
    private val statusBarElementProvider: StatusBarElementProvider,
    private val upperRegionElementProvider: LockscreenUpperRegionElementProvider,
    private val lockElement: LockElement,
    private val ambientIndicationElementOptional: Optional<AmbientIndicationElement>,
    private val shortcutElement: ShortcutElement,
    private val indicationAreaElement: IndicationAreaElement,
    private val settingsMenuElement: SettingsMenuElement,
    private val notificationStackElementProvider: NotificationStackElementProvider,
    private val aodNotificationIconElementProvider: AodNotificationIconsElementProvider,
    private val aodPromotedNotificationElementProvider: AodPromotedNotificationAreaElementProvider,
    private val lowerRegionElementProvider: LockscreenLowerRegionElementProvider,
    private val lockIconElementProvider: LockIconElementProvider,
    private val ambientIndicationElementProviderOptional:
        Optional<AmbientIndicationElementProvider>,
    private val shortcutElementProvider: ShortcutElementProvider,
    private val indicationAreaElementProvider: IndicationAreaElementProvider,
    private val settingsMenuElementProvider: SettingsMenuElementProvider,
    private val smartspaceElementProvider: SmartspaceElementProvider,
    private val clockRegionElementProvider: ClockRegionElementProvider,
    private val mediaElementProvider: MediaElementProvider,
@@ -78,21 +80,33 @@ constructor(
        val currentClock by keyguardClockViewModel.currentClock.collectAsStateWithLifecycle()
        val elementFactory =
            elementFactoryBuilder.createRemembered(
                upperRegionElementProvider,
                mediaElementProvider,
                lockIconElementProvider,
                shortcutElementProvider,
                statusBarElementProvider,
                smartspaceElementProvider,
                upperRegionElementProvider,
                lowerRegionElementProvider,
                clockRegionElementProvider,
                settingsMenuElementProvider,
                indicationAreaElementProvider,
                notificationStackElementProvider,
                aodNotificationIconElementProvider,
                aodPromotedNotificationElementProvider,
                currentClock?.smallClock?.layout,
                currentClock?.largeClock?.layout,
                ambientIndicationElementProviderOptional.get(),
            )

        val burnIn = rememberBurnIn(keyguardClockViewModel)

        LockscreenTouchHandling(
            viewModelFactory = viewModel.touchHandlingFactory,
            modifier = modifier,
        ) { onSettingsMenuPlaced ->
            val elementContext =
                LockscreenElementContext(
                scope = this,
                    scope = this@Content,
                    burnInModifier =
                        Modifier.burnInAware(
                            viewModel = aodBurnInViewModel,
@@ -111,56 +125,20 @@ constructor(
                            LockscreenElementKeys.MediaCarousel -> {
                                viewModel.setMediaPlayerBottom(rect.bottom)
                            }
                            LockscreenElementKeys.Shortcuts.Start -> {
                                viewModel.setShortcutTop(rect.top)
                            }
                },
            )

        LockscreenTouchHandling(
            viewModelFactory = viewModel.touchHandlingFactory,
            modifier = modifier,
        ) { onSettingsMenuPlaced ->
            LockscreenSceneLayout(
                viewModel = viewModel.layout,
                elementFactory = elementFactory,
                elementContext = elementContext,
                statusBar = {
                    with(statusBarElement) { StatusBar(modifier = Modifier.fillMaxWidth()) }
                },
                lockIcon = { with(lockElement) { LockIcon() } },
                startShortcut = {
                    with(shortcutElement) {
                        Shortcut(
                            isStart = true,
                            applyPadding = false,
                            onTopChanged = viewModel::setShortcutTop,
                        )
                    }
                },
                ambientIndication = {
                    if (ambientIndicationElementOptional.isPresent) {
                        with(ambientIndicationElementOptional.get()) {
                            AmbientIndication(modifier = Modifier.fillMaxWidth())
                        }
                            LockscreenElementKeys.Shortcuts.End -> {
                                viewModel.setShortcutTop(rect.top)
                            }
                },
                bottomIndication = {
                    with(indicationAreaElement) {
                        IndicationArea(modifier = Modifier.fillMaxWidth())
                            LockscreenElementKeys.SettingsMenu -> {
                                onSettingsMenuPlaced(rect)
                            }
                },
                endShortcut = {
                    with(shortcutElement) {
                        Shortcut(
                            isStart = false,
                            applyPadding = false,
                            onTopChanged = viewModel::setShortcutTop,
                        )
                        }
                    },
                settingsMenu = {
                    with(settingsMenuElement) { SettingsMenu(onPlaced = onSettingsMenuPlaced) }
                },
                )

            LockscreenSceneLayout(elementFactory = elementFactory, elementContext = elementContext)
        }
    }
}
+3 −7
Original line number Diff line number Diff line
@@ -14,13 +14,9 @@
 * limitations under the License.
 */

package com.android.systemui.keyguard.ui.composable.element
package com.android.systemui.keyguard.ui.composable.elements

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.ContentScope
import com.android.systemui.plugins.keyguard.ui.composable.elements.LockscreenElementProvider

/** Defines interface for classes that can render the ambient indication area. */
interface AmbientIndicationElement {
    @Composable fun ContentScope.AmbientIndication(modifier: Modifier)
}
interface AmbientIndicationElementProvider : LockscreenElementProvider
Loading