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

Commit 418888a3 authored by Brad Hinegardner's avatar Brad Hinegardner Committed by Android (Google) Code Review
Browse files

Merge "Touching outside of the customize lockscreen button doesn't dismiss the button" into main

parents bf85bd69 9a02e60b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.OccludingAppDeviceEntryMessageViewModel
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.res.R
import com.android.systemui.shade.NotificationShadeWindowView
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -81,6 +82,7 @@ constructor(
    private val interactionJankMonitor: InteractionJankMonitor,
    private val deviceEntryHapticsInteractor: DeviceEntryHapticsInteractor,
    private val vibratorHelper: VibratorHelper,
    private val falsingManager: FalsingManager,
) : CoreStartable {

    private var rootViewHandle: DisposableHandle? = null
@@ -155,6 +157,7 @@ constructor(
                interactionJankMonitor,
                deviceEntryHapticsInteractor,
                vibratorHelper,
                falsingManager,
            )
    }

+5 −0
Original line number Diff line number Diff line
@@ -157,6 +157,9 @@ interface KeyguardRepository {

    val lastDozeTapToWakePosition: StateFlow<Point?>

    /** Last point that [KeyguardRootView] was tapped */
    val lastRootViewTapPosition: MutableStateFlow<Point?>

    /** Observable for the [StatusBarState] */
    val statusBarState: StateFlow<StatusBarState>

@@ -418,6 +421,8 @@ constructor(
        _lastDozeTapToWakePosition.value = position
    }

    override val lastRootViewTapPosition: MutableStateFlow<Point?> = MutableStateFlow(null)

    override val isDreamingWithOverlay: Flow<Boolean> =
        conflatedCallbackFlow {
                val callback =
+7 −0
Original line number Diff line number Diff line
@@ -171,6 +171,9 @@ constructor(
    /** Whether the keyguard is going away. */
    val isKeyguardGoingAway: Flow<Boolean> = repository.isKeyguardGoingAway

    /** Last point that [KeyguardRootView] view was tapped */
    val lastRootViewTapPosition: Flow<Point?> = repository.lastRootViewTapPosition.asStateFlow()

    /** Whether the primary bouncer is showing or not. */
    val primaryBouncerShowing: Flow<Boolean> = bouncerRepository.primaryBouncerShow

@@ -304,6 +307,10 @@ constructor(
        repository.setClockShouldBeCentered(shouldBeCentered)
    }

    fun setLastRootViewTapPosition(point: Point?) {
        repository.lastRootViewTapPosition.value = point
    }

    companion object {
        private const val TAG = "KeyguardInteractor"
    }
+15 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.systemui.keyguard.ui.binder
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.annotation.DrawableRes
import android.annotation.SuppressLint
import android.graphics.Point
import android.view.HapticFeedbackConstants
import android.view.View
import android.view.View.OnLayoutChangeListener
@@ -47,6 +49,7 @@ import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.OccludingAppDeviceEntryMessageViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -73,6 +76,7 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalCoroutinesApi::class)
object KeyguardRootViewBinder {

    @SuppressLint("ClickableViewAccessibility")
    @JvmStatic
    fun bind(
        view: ViewGroup,
@@ -87,6 +91,7 @@ object KeyguardRootViewBinder {
        interactionJankMonitor: InteractionJankMonitor?,
        deviceEntryHapticsInteractor: DeviceEntryHapticsInteractor?,
        vibratorHelper: VibratorHelper?,
        falsingManager: FalsingManager?,
    ): DisposableHandle {
        var onLayoutChangeListener: OnLayoutChange? = null
        val childViews = mutableMapOf<Int, View>()
@@ -94,6 +99,16 @@ object KeyguardRootViewBinder {
        val burnInLayerId = R.id.burn_in_layer
        val aodNotificationIconContainerId = R.id.aod_notification_icon_container
        val largeClockId = R.id.lockscreen_clock_view_large

        if (keyguardBottomAreaRefactor()) {
            view.setOnTouchListener { _, event ->
                if (falsingManager?.isFalseTap(FalsingManager.LOW_PENALTY) == false) {
                    viewModel.setRootViewLastTapPosition(Point(event.x.toInt(), event.y.toInt()))
                }
                false
            }
        }

        val disposableHandle =
            view.repeatWhenAttached {
                repeatOnLifecycle(Lifecycle.State.CREATED) {
+18 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package com.android.systemui.keyguard.ui.binder

import android.graphics.Rect
import android.view.View
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
@@ -25,6 +26,8 @@ import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.animation.view.LaunchableLinearLayout
import com.android.systemui.common.ui.binder.IconViewBinder
import com.android.systemui.common.ui.binder.TextViewBinder
import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSettingsMenuViewModel
import com.android.systemui.keyguard.util.WallpaperPickerIntentUtils
import com.android.systemui.keyguard.util.WallpaperPickerIntentUtils.LAUNCH_SOURCE_KEYGUARD
@@ -35,12 +38,15 @@ import com.android.systemui.statusbar.VibratorHelper
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.launch

object KeyguardSettingsViewBinder {
    fun bind(
        parentView: View,
        viewModel: KeyguardSettingsMenuViewModel,
        longPressViewModel: KeyguardLongPressViewModel,
        rootViewModel: KeyguardRootViewModel,
        vibratorHelper: VibratorHelper,
        activityStarter: ActivityStarter
    ): DisposableHandle {
@@ -88,6 +94,18 @@ object KeyguardSettingsViewBinder {
                                }
                        }
                    }

                    launch {
                        rootViewModel.lastRootViewTapPosition.filterNotNull().collect { point ->
                            if (view.isVisible) {
                                val hitRect = Rect()
                                view.getHitRect(hitRect)
                                if (!hitRect.contains(point.x, point.y)) {
                                    longPressViewModel.onTouchedOutside()
                                }
                            }
                        }
                    }
                }
            }
        return disposableHandle
Loading