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

Commit 93f1c898 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Convert remaining elements to implement LockscreenElement" into main

parents 8cfa9f97 ea207f2d
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