Merge "Adds LongPressHandlingView to KeyguardRootView." into udc-qpr-dev
This commit is contained in:
@@ -89,8 +89,9 @@ class LongPressHandlingView(
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
||||
return interactionHandler.onTouchEvent(event?.toModel())
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
super.onTouchEvent(event)
|
||||
return interactionHandler.onTouchEvent(event.toModel())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,12 +24,15 @@ import com.android.keyguard.KeyguardStatusViewController
|
||||
import com.android.keyguard.dagger.KeyguardStatusViewComponent
|
||||
import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.animation.view.LaunchableLinearLayout
|
||||
import com.android.systemui.common.ui.view.LongPressHandlingView
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
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.KeyguardLongPressViewBinder
|
||||
import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
|
||||
import com.android.systemui.keyguard.ui.binder.KeyguardRootViewBinder
|
||||
import com.android.systemui.keyguard.ui.binder.KeyguardSettingsViewBinder
|
||||
@@ -38,6 +41,7 @@ import com.android.systemui.keyguard.ui.view.layout.KeyguardBlueprintCommandList
|
||||
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.KeyguardLongPressViewModel
|
||||
import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel
|
||||
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
|
||||
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSettingsMenuViewModel
|
||||
@@ -76,6 +80,7 @@ constructor(
|
||||
private val falsingManager: FalsingManager,
|
||||
private val vibratorHelper: VibratorHelper,
|
||||
private val keyguardStateController: KeyguardStateController,
|
||||
private val keyguardLongPressViewModel: KeyguardLongPressViewModel,
|
||||
private val keyguardSettingsMenuViewModel: KeyguardSettingsMenuViewModel,
|
||||
private val activityStarter: ActivityStarter,
|
||||
private val occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel,
|
||||
@@ -105,7 +110,7 @@ constructor(
|
||||
bindLeftShortcut()
|
||||
bindRightShortcut()
|
||||
bindAmbientIndicationArea()
|
||||
bindSettingsPopupMenu()
|
||||
bindSettingsPopupMenu(notificationPanel)
|
||||
|
||||
KeyguardBlueprintViewBinder.bind(keyguardRootView, keyguardBlueprintViewModel)
|
||||
keyguardBlueprintCommandListener.start()
|
||||
@@ -194,12 +199,34 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindSettingsPopupMenu() {
|
||||
private fun bindSettingsPopupMenu(legacyParent: ViewGroup) {
|
||||
if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
|
||||
// Remove the legacy long-press view from the NotificationPanelView where it used to be
|
||||
// before this refactor such that we only have one long-press view at the bottom of
|
||||
// KeyguardRootView.
|
||||
val legacyLongPressView = legacyParent.requireViewById<View>(R.id.keyguard_long_press)
|
||||
legacyParent.removeView(legacyLongPressView)
|
||||
|
||||
val longPressView: LongPressHandlingView =
|
||||
keyguardRootView.requireViewById(R.id.keyguard_long_press)
|
||||
val settingsMenuView: LaunchableLinearLayout =
|
||||
keyguardRootView.requireViewById(R.id.keyguard_settings_button)
|
||||
|
||||
// Bind the long-press view that (1) triggers the showing of the settings popup menu and
|
||||
// (2) captures touch events outside of the shown settings popup menu to hide it.
|
||||
KeyguardLongPressViewBinder.bind(
|
||||
view = longPressView,
|
||||
viewModel = keyguardLongPressViewModel,
|
||||
onSingleTap = {},
|
||||
falsingManager = falsingManager,
|
||||
settingsMenuView = settingsMenuView,
|
||||
)
|
||||
|
||||
// Bind the settings popup menu.
|
||||
settingsPopupMenuHandle?.dispose()
|
||||
settingsPopupMenuHandle =
|
||||
KeyguardSettingsViewBinder.bind(
|
||||
keyguardRootView,
|
||||
settingsMenuView,
|
||||
keyguardSettingsMenuViewModel,
|
||||
vibratorHelper,
|
||||
activityStarter,
|
||||
@@ -208,6 +235,9 @@ constructor(
|
||||
keyguardRootView.findViewById<View?>(R.id.keyguard_settings_button)?.let {
|
||||
keyguardRootView.removeView(it)
|
||||
}
|
||||
keyguardRootView.findViewById<View?>(R.id.keyguard_long_press)?.let {
|
||||
keyguardRootView.removeView(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -99,11 +99,3 @@ interface KeyguardBlueprint {
|
||||
|
||||
fun apply(constraintSet: ConstraintSet)
|
||||
}
|
||||
|
||||
/**
|
||||
* Lower level modules that determine constraints for a particular section in the lockscreen root
|
||||
* view.
|
||||
*/
|
||||
interface KeyguardSection {
|
||||
fun apply(constraintSet: ConstraintSet)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 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.shared.model
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
|
||||
/**
|
||||
* Lower level modules that determine constraints for a particular section in the lockscreen root
|
||||
* view.
|
||||
*/
|
||||
interface KeyguardSection {
|
||||
fun apply(constraintSet: ConstraintSet)
|
||||
}
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.keyguard.ui.binder
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Animatable2
|
||||
import android.util.Size
|
||||
import android.view.View
|
||||
@@ -76,7 +75,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
* Users of the [KeyguardBottomAreaViewBinder] class should use this to control the binder after
|
||||
* it is bound.
|
||||
*/
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
@Deprecated("Deprecated as part of b/278057014")
|
||||
interface Binding {
|
||||
/**
|
||||
@@ -119,17 +118,6 @@ object KeyguardBottomAreaViewBinder {
|
||||
|
||||
view.clipChildren = false
|
||||
view.clipToPadding = false
|
||||
view.setOnTouchListener { _, event ->
|
||||
if (settingsMenu.isVisible) {
|
||||
val hitRect = Rect()
|
||||
settingsMenu.getHitRect(hitRect)
|
||||
if (!hitRect.contains(event.x.toInt(), event.y.toInt())) {
|
||||
viewModel.onTouchedOutsideLockScreenSettingsMenu()
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
val configurationBasedDimensions = MutableStateFlow(loadFromResources(view))
|
||||
|
||||
@@ -137,7 +125,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
view.repeatWhenAttached {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
launch {
|
||||
viewModel.startButton.collect { buttonModel ->
|
||||
updateButton(
|
||||
@@ -150,7 +138,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
}
|
||||
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
launch {
|
||||
viewModel.endButton.collect { buttonModel ->
|
||||
updateButton(
|
||||
@@ -188,7 +176,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
}
|
||||
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
launch {
|
||||
updateButtonAlpha(
|
||||
view = startButton,
|
||||
@@ -197,7 +185,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
)
|
||||
}
|
||||
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
launch {
|
||||
updateButtonAlpha(
|
||||
view = endButton,
|
||||
@@ -223,7 +211,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
}
|
||||
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
launch {
|
||||
configurationBasedDimensions.collect { dimensions ->
|
||||
startButton.updateLayoutParams<ViewGroup.LayoutParams> {
|
||||
@@ -385,13 +373,14 @@ object KeyguardBottomAreaViewBinder {
|
||||
view.isClickable = viewModel.isClickable
|
||||
if (viewModel.isClickable) {
|
||||
if (viewModel.useLongPress) {
|
||||
val onTouchListener = KeyguardQuickAffordanceOnTouchListener(
|
||||
view,
|
||||
viewModel,
|
||||
messageDisplayer,
|
||||
vibratorHelper,
|
||||
falsingManager,
|
||||
)
|
||||
val onTouchListener =
|
||||
KeyguardQuickAffordanceOnTouchListener(
|
||||
view,
|
||||
viewModel,
|
||||
messageDisplayer,
|
||||
vibratorHelper,
|
||||
falsingManager,
|
||||
)
|
||||
view.setOnTouchListener(onTouchListener)
|
||||
view.onLongClickListener =
|
||||
OnLongClickListener(falsingManager, viewModel, vibratorHelper, onTouchListener)
|
||||
@@ -408,7 +397,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated as part of b/278057014")
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
private suspend fun updateButtonAlpha(
|
||||
view: View,
|
||||
viewModel: Flow<KeyguardQuickAffordanceViewModel>,
|
||||
@@ -439,7 +428,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated as part of b/278057014")
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
private class OnLongClickListener(
|
||||
private val falsingManager: FalsingManager?,
|
||||
private val viewModel: KeyguardQuickAffordanceViewModel,
|
||||
@@ -476,7 +465,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated as part of b/278057014")
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
private class OnClickListener(
|
||||
private val viewModel: KeyguardQuickAffordanceViewModel,
|
||||
private val falsingManager: FalsingManager,
|
||||
@@ -532,7 +521,7 @@ object KeyguardBottomAreaViewBinder {
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated as part of b/278057014")
|
||||
//If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
// If updated, be sure to update [KeyguardQuickAffordanceViewBinder.kt]
|
||||
private data class ConfigurationBasedDimensions(
|
||||
val defaultBurnInPreventionYOffsetPx: Int,
|
||||
val buttonSizePx: Size,
|
||||
|
||||
@@ -17,7 +17,11 @@
|
||||
|
||||
package com.android.systemui.keyguard.ui.binder
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Rect
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.android.systemui.common.ui.view.LongPressHandlingView
|
||||
@@ -35,6 +39,9 @@ object KeyguardLongPressViewBinder {
|
||||
* @param onSingleTap A callback to invoke when the system decides that there was a single tap.
|
||||
* @param falsingManager [FalsingManager] for making sure the long-press didn't just happen in
|
||||
* the user's pocket.
|
||||
* @param settingsMenuView The [View] for the settings menu that shows up when the long-press is
|
||||
* detected. The [view] will be monitored for all touch to know when to actually hide the
|
||||
* settings menu after it had been shown due to an outside touch.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun bind(
|
||||
@@ -42,6 +49,7 @@ object KeyguardLongPressViewBinder {
|
||||
viewModel: KeyguardLongPressViewModel,
|
||||
onSingleTap: () -> Unit,
|
||||
falsingManager: FalsingManager,
|
||||
settingsMenuView: View,
|
||||
) {
|
||||
view.listener =
|
||||
object : LongPressHandlingView.Listener {
|
||||
@@ -62,6 +70,12 @@ object KeyguardLongPressViewBinder {
|
||||
}
|
||||
}
|
||||
|
||||
listenForTouchOutsideDismissals(
|
||||
outsideView = view,
|
||||
settingsMenuView = settingsMenuView,
|
||||
onTouchedOutsideSettingsMenu = viewModel::onTouchedOutside,
|
||||
)
|
||||
|
||||
view.repeatWhenAttached {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
launch {
|
||||
@@ -72,4 +86,27 @@ object KeyguardLongPressViewBinder {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Listens for and handles touches outside the settings menu view, to dismiss it. */
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private fun listenForTouchOutsideDismissals(
|
||||
outsideView: View,
|
||||
settingsMenuView: View,
|
||||
onTouchedOutsideSettingsMenu: () -> Unit,
|
||||
) {
|
||||
outsideView.setOnTouchListener { _, event ->
|
||||
if (event.actionMasked == MotionEvent.ACTION_DOWN && settingsMenuView.isVisible) {
|
||||
val hitRect = Rect()
|
||||
settingsMenuView.getHitRect(hitRect)
|
||||
if (!hitRect.contains(event.x.toInt(), event.y.toInt())) {
|
||||
onTouchedOutsideSettingsMenu()
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,13 +38,11 @@ import kotlinx.coroutines.launch
|
||||
|
||||
object KeyguardSettingsViewBinder {
|
||||
fun bind(
|
||||
parentView: View,
|
||||
view: LaunchableLinearLayout,
|
||||
viewModel: KeyguardSettingsMenuViewModel,
|
||||
vibratorHelper: VibratorHelper,
|
||||
activityStarter: ActivityStarter
|
||||
): DisposableHandle {
|
||||
val view = parentView.requireViewById<LaunchableLinearLayout>(R.id.keyguard_settings_button)
|
||||
|
||||
val disposableHandle =
|
||||
view.repeatWhenAttached {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
@@ -127,5 +125,4 @@ object KeyguardSettingsViewBinder {
|
||||
}
|
||||
.start()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.android.systemui.keyguard.ui.view
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
@@ -28,6 +29,7 @@ import com.android.keyguard.KeyguardStatusView
|
||||
import com.android.keyguard.LockIconView
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.animation.view.LaunchableImageView
|
||||
import com.android.systemui.common.ui.view.LongPressHandlingView
|
||||
|
||||
/** Provides a container for all keyguard ui content. */
|
||||
class KeyguardRootView(
|
||||
@@ -39,9 +41,11 @@ class KeyguardRootView(
|
||||
attrs,
|
||||
) {
|
||||
|
||||
var motionEventSpy: ((MotionEvent) -> Unit)? = null
|
||||
private var statusView: KeyguardStatusView? = null
|
||||
|
||||
init {
|
||||
addLongPressHandlingView()
|
||||
addIndicationTextArea()
|
||||
addLockIconView()
|
||||
addAmbientIndicationArea()
|
||||
@@ -51,6 +55,15 @@ class KeyguardRootView(
|
||||
addStatusView()
|
||||
}
|
||||
|
||||
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
|
||||
motionEventSpy?.invoke(event)
|
||||
return super.onInterceptTouchEvent(event)
|
||||
}
|
||||
|
||||
private fun addLongPressHandlingView() {
|
||||
addView(LongPressHandlingView(context, attrs).apply { id = R.id.keyguard_long_press })
|
||||
}
|
||||
|
||||
private fun addIndicationTextArea() {
|
||||
val view = KeyguardIndicationArea(context, attrs)
|
||||
addView(view)
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardBlueprint
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLongPressHandlingSection
|
||||
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.DefaultStatusViewSection
|
||||
@@ -43,6 +44,7 @@ constructor(
|
||||
private val defaultLockIconSection: DefaultLockIconSection,
|
||||
private val defaultShortcutsSection: DefaultShortcutsSection,
|
||||
private val defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection,
|
||||
private val defaultLongPressHandlingSection: DefaultLongPressHandlingSection,
|
||||
private val defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection,
|
||||
private val defaultStatusViewSection: DefaultStatusViewSection,
|
||||
private val splitShadeGuidelines: SplitShadeGuidelines,
|
||||
@@ -54,6 +56,7 @@ constructor(
|
||||
defaultLockIconSection.apply(constraintSet)
|
||||
defaultShortcutsSection.apply(constraintSet)
|
||||
defaultAmbientIndicationAreaSection.apply(constraintSet)
|
||||
defaultLongPressHandlingSection.apply(constraintSet)
|
||||
defaultSettingsPopupMenuSection.apply(constraintSet)
|
||||
defaultStatusViewSection.apply(constraintSet)
|
||||
splitShadeGuidelines.apply(constraintSet)
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.android.systemui.keyguard.ui.view.layout.sections.AlignShortcutsToUdf
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLongPressHandlingSection
|
||||
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.DefaultStatusViewSection
|
||||
@@ -40,6 +41,7 @@ constructor(
|
||||
private val defaultIndicationAreaSection: DefaultIndicationAreaSection,
|
||||
private val defaultLockIconSection: DefaultLockIconSection,
|
||||
private val defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection,
|
||||
private val defaultLongPressHandlingSection: DefaultLongPressHandlingSection,
|
||||
private val defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection,
|
||||
private val alignShortcutsToUdfpsSection: AlignShortcutsToUdfpsSection,
|
||||
private val defaultShortcutsSection: DefaultShortcutsSection,
|
||||
@@ -52,6 +54,7 @@ constructor(
|
||||
defaultIndicationAreaSection.apply(constraintSet)
|
||||
defaultLockIconSection.apply(constraintSet)
|
||||
defaultAmbientIndicationAreaSection.apply(constraintSet)
|
||||
defaultLongPressHandlingSection.apply(constraintSet)
|
||||
defaultSettingsPopupMenuSection.apply(constraintSet)
|
||||
if (keyguardUpdateMonitor.isUdfpsSupported) {
|
||||
alignShortcutsToUdfpsSection.apply(constraintSet)
|
||||
|
||||
@@ -26,7 +26,7 @@ import androidx.constraintlayout.widget.ConstraintSet.RIGHT
|
||||
import androidx.constraintlayout.widget.ConstraintSet.TOP
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class AlignShortcutsToUdfpsSection @Inject constructor(@Main private val resources: Resources) :
|
||||
|
||||
@@ -28,7 +28,7 @@ import androidx.constraintlayout.widget.ConstraintSet.TOP
|
||||
import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT
|
||||
import com.android.keyguard.KeyguardUpdateMonitor
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultAmbientIndicationAreaSection
|
||||
|
||||
@@ -21,7 +21,7 @@ import android.content.Context
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultIndicationAreaSection @Inject constructor(private val context: Context) :
|
||||
|
||||
@@ -27,7 +27,7 @@ import androidx.constraintlayout.widget.ConstraintSet
|
||||
import com.android.keyguard.KeyguardUpdateMonitor
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.biometrics.AuthController
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultLockIconSection
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 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 androidx.annotation.IdRes
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
/** Positions the long-press handling view in the keyguard. */
|
||||
class DefaultLongPressHandlingSection @Inject constructor() : KeyguardSection {
|
||||
override fun apply(constraintSet: ConstraintSet) {
|
||||
constraintSet.fillMaxSize(R.id.keyguard_long_press)
|
||||
}
|
||||
|
||||
private fun ConstraintSet.fillMaxSize(@IdRes viewId: Int) {
|
||||
listOf(
|
||||
ConstraintSet.START,
|
||||
ConstraintSet.TOP,
|
||||
ConstraintSet.END,
|
||||
ConstraintSet.BOTTOM,
|
||||
)
|
||||
.forEach { side ->
|
||||
connect(
|
||||
viewId,
|
||||
side,
|
||||
ConstraintSet.PARENT_ID,
|
||||
side,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ import androidx.constraintlayout.widget.ConstraintSet.START
|
||||
import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultSettingsPopupMenuSection @Inject constructor(@Main private val resources: Resources) :
|
||||
|
||||
@@ -25,7 +25,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
|
||||
import androidx.constraintlayout.widget.ConstraintSet.RIGHT
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultShortcutsSection @Inject constructor(@Main private val resources: Resources) :
|
||||
|
||||
@@ -18,20 +18,18 @@
|
||||
package com.android.systemui.keyguard.ui.view.layout.sections
|
||||
|
||||
import android.content.Context
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
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.END
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultStatusViewSection @Inject constructor(private val context: Context) :
|
||||
KeyguardSection {
|
||||
class DefaultStatusViewSection @Inject constructor(private val context: Context) : KeyguardSection {
|
||||
private val statusViewId = R.id.keyguard_status_view
|
||||
|
||||
override fun apply(constraintSet: ConstraintSet) {
|
||||
|
||||
@@ -18,21 +18,13 @@
|
||||
package com.android.systemui.keyguard.ui.view.layout.sections
|
||||
|
||||
import android.content.Context
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
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.END
|
||||
import androidx.constraintlayout.widget.ConstraintSet.VERTICAL
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSection
|
||||
import javax.inject.Inject
|
||||
|
||||
class SplitShadeGuidelines @Inject constructor(private val context: Context) :
|
||||
KeyguardSection {
|
||||
class SplitShadeGuidelines @Inject constructor(private val context: Context) : KeyguardSection {
|
||||
|
||||
override fun apply(constraintSet: ConstraintSet) {
|
||||
constraintSet.apply {
|
||||
|
||||
@@ -157,14 +157,6 @@ constructor(
|
||||
selectedPreviewSlotId.value = slotId
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies that some input gesture has started somewhere in the bottom area that's outside of
|
||||
* the lock screen settings menu item pop-up.
|
||||
*/
|
||||
fun onTouchedOutsideLockScreenSettingsMenu() {
|
||||
longPressViewModel.onTouchedOutside()
|
||||
}
|
||||
|
||||
private fun button(
|
||||
position: KeyguardQuickAffordancePosition
|
||||
): Flow<KeyguardQuickAffordanceViewModel> {
|
||||
|
||||
@@ -546,6 +546,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
||||
private final NPVCDownEventState.Buffer mLastDownEvents;
|
||||
private final KeyguardBottomAreaViewModel mKeyguardBottomAreaViewModel;
|
||||
private final KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor;
|
||||
private final KeyguardLongPressViewModel mKeyguardLongPressViewModel;
|
||||
private float mMinExpandHeight;
|
||||
private boolean mPanelUpdateWhenAnimatorEnds;
|
||||
private boolean mHasVibratedOnOpen = false;
|
||||
@@ -949,14 +950,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
||||
updateUserSwitcherFlags();
|
||||
mKeyguardBottomAreaViewModel = keyguardBottomAreaViewModel;
|
||||
mKeyguardBottomAreaInteractor = keyguardBottomAreaInteractor;
|
||||
KeyguardLongPressViewBinder.bind(
|
||||
mView.requireViewById(R.id.keyguard_long_press),
|
||||
keyguardLongPressViewModel,
|
||||
() -> {
|
||||
onEmptySpaceClick();
|
||||
return Unit.INSTANCE;
|
||||
},
|
||||
mFalsingManager);
|
||||
mKeyguardLongPressViewModel = keyguardLongPressViewModel;
|
||||
mActivityStarter = activityStarter;
|
||||
onFinishInflate();
|
||||
keyguardUnlockAnimationController.addKeyguardUnlockAnimationListener(
|
||||
@@ -1500,6 +1494,16 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
||||
@Deprecated
|
||||
private void setKeyguardBottomArea(KeyguardBottomAreaView keyguardBottomArea) {
|
||||
mKeyguardBottomArea = keyguardBottomArea;
|
||||
|
||||
KeyguardLongPressViewBinder.bind(
|
||||
mView.requireViewById(R.id.keyguard_long_press),
|
||||
mKeyguardLongPressViewModel,
|
||||
() -> {
|
||||
onEmptySpaceClick();
|
||||
return Unit.INSTANCE;
|
||||
},
|
||||
mFalsingManager,
|
||||
mKeyguardBottomArea.requireViewById(R.id.keyguard_settings_button));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.android.systemui.keyguard.ui.view.KeyguardRootView
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection
|
||||
import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLongPressHandlingSection
|
||||
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.DefaultStatusViewSection
|
||||
@@ -48,6 +49,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() {
|
||||
@Mock private lateinit var defaultShortcutsSection: DefaultShortcutsSection
|
||||
@Mock
|
||||
private lateinit var defaultAmbientIndicationAreaSection: DefaultAmbientIndicationAreaSection
|
||||
@Mock private lateinit var defaultLongPressHandlingSection: DefaultLongPressHandlingSection
|
||||
@Mock private lateinit var defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection
|
||||
@Mock private lateinit var defaultStatusViewSection: DefaultStatusViewSection
|
||||
@Mock private lateinit var splitShadeGuidelines: SplitShadeGuidelines
|
||||
@@ -62,6 +64,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() {
|
||||
defaultLockIconSection,
|
||||
defaultShortcutsSection,
|
||||
defaultAmbientIndicationAreaSection,
|
||||
defaultLongPressHandlingSection,
|
||||
defaultSettingsPopupMenuSection,
|
||||
defaultStatusViewSection,
|
||||
splitShadeGuidelines,
|
||||
|
||||
@@ -69,7 +69,6 @@ import com.android.wm.shell.bubbles.Bubble
|
||||
import com.android.wm.shell.bubbles.Bubbles
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import java.util.Optional
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.TestScope
|
||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||
@@ -673,7 +672,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
|
||||
extras().bool(EXTRA_USE_STYLUS_MODE).isTrue()
|
||||
}
|
||||
iconCaptor.value?.let { icon ->
|
||||
assertNotNull(icon)
|
||||
assertThat(icon).isNotNull()
|
||||
assertThat(icon.resId).isEqualTo(R.drawable.ic_note_task_shortcut_widget)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
|
||||
import com.android.keyguard.logging.KeyguardLogger;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.animation.view.LaunchableLinearLayout;
|
||||
import com.android.systemui.biometrics.AuthController;
|
||||
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
|
||||
import com.android.systemui.classifier.FalsingCollectorFake;
|
||||
@@ -411,6 +412,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
|
||||
when(mKeyguardBottomAreaViewController.getView()).thenReturn(mKeyguardBottomArea);
|
||||
when(mView.findViewById(R.id.keyguard_bottom_area)).thenReturn(mKeyguardBottomArea);
|
||||
when(mKeyguardBottomArea.animate()).thenReturn(mViewPropertyAnimator);
|
||||
when(mKeyguardBottomArea.requireViewById(R.id.keyguard_settings_button))
|
||||
.thenReturn(mock(LaunchableLinearLayout.class));
|
||||
when(mView.animate()).thenReturn(mViewPropertyAnimator);
|
||||
when(mKeyguardStatusView.animate()).thenReturn(mViewPropertyAnimator);
|
||||
when(mViewPropertyAnimator.translationX(anyFloat())).thenReturn(mViewPropertyAnimator);
|
||||
|
||||
Reference in New Issue
Block a user