Merge changes I967b7fb7,Idddb4bae into tm-qpr-dev am: 0243d0d1e3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20192041 Change-Id: I3274a862624a3cde19ab704f5bc6bde55a946a44 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -19,7 +19,7 @@ package com.android.systemui.keyguard.domain.interactor
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
||||||
@@ -67,19 +67,19 @@ constructor(
|
|||||||
*
|
*
|
||||||
* @param configKey The configuration key corresponding to the [KeyguardQuickAffordanceModel] of
|
* @param configKey The configuration key corresponding to the [KeyguardQuickAffordanceModel] of
|
||||||
* the affordance that was clicked
|
* the affordance that was clicked
|
||||||
* @param animationController An optional controller for the activity-launch animation
|
* @param expandable An optional [Expandable] for the activity- or dialog-launch animation
|
||||||
*/
|
*/
|
||||||
fun onQuickAffordanceClicked(
|
fun onQuickAffordanceClicked(
|
||||||
configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
) {
|
) {
|
||||||
@Suppress("UNCHECKED_CAST") val config = registry.get(configKey as KClass<Nothing>)
|
@Suppress("UNCHECKED_CAST") val config = registry.get(configKey as KClass<Nothing>)
|
||||||
when (val result = config.onQuickAffordanceClicked(animationController)) {
|
when (val result = config.onQuickAffordanceClicked(expandable)) {
|
||||||
is KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity ->
|
is KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity ->
|
||||||
launchQuickAffordance(
|
launchQuickAffordance(
|
||||||
intent = result.intent,
|
intent = result.intent,
|
||||||
canShowWhileLocked = result.canShowWhileLocked,
|
canShowWhileLocked = result.canShowWhileLocked,
|
||||||
animationController = animationController
|
expandable = expandable,
|
||||||
)
|
)
|
||||||
is KeyguardQuickAffordanceConfig.OnClickedResult.Handled -> Unit
|
is KeyguardQuickAffordanceConfig.OnClickedResult.Handled -> Unit
|
||||||
}
|
}
|
||||||
@@ -104,6 +104,7 @@ constructor(
|
|||||||
KeyguardQuickAffordanceModel.Visible(
|
KeyguardQuickAffordanceModel.Visible(
|
||||||
configKey = configs[index]::class,
|
configKey = configs[index]::class,
|
||||||
icon = visibleState.icon,
|
icon = visibleState.icon,
|
||||||
|
toggle = visibleState.toggle,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
KeyguardQuickAffordanceModel.Hidden
|
KeyguardQuickAffordanceModel.Hidden
|
||||||
@@ -114,7 +115,7 @@ constructor(
|
|||||||
private fun launchQuickAffordance(
|
private fun launchQuickAffordance(
|
||||||
intent: Intent,
|
intent: Intent,
|
||||||
canShowWhileLocked: Boolean,
|
canShowWhileLocked: Boolean,
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
) {
|
) {
|
||||||
@LockPatternUtils.StrongAuthTracker.StrongAuthFlags
|
@LockPatternUtils.StrongAuthTracker.StrongAuthFlags
|
||||||
val strongAuthFlags =
|
val strongAuthFlags =
|
||||||
@@ -130,13 +131,13 @@ constructor(
|
|||||||
activityStarter.postStartActivityDismissingKeyguard(
|
activityStarter.postStartActivityDismissingKeyguard(
|
||||||
intent,
|
intent,
|
||||||
0 /* delay */,
|
0 /* delay */,
|
||||||
animationController
|
expandable?.activityLaunchController(),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
activityStarter.startActivity(
|
activityStarter.startActivity(
|
||||||
intent,
|
intent,
|
||||||
true /* dismissShade */,
|
true /* dismissShade */,
|
||||||
animationController,
|
expandable?.activityLaunchController(),
|
||||||
true /* showOverLockscreenWhenLocked */,
|
true /* showOverLockscreenWhenLocked */,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.domain.model
|
|||||||
|
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
||||||
|
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,5 +36,7 @@ sealed class KeyguardQuickAffordanceModel {
|
|||||||
val configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
val configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
||||||
/** An icon for the affordance. */
|
/** An icon for the affordance. */
|
||||||
val icon: Icon,
|
val icon: Icon,
|
||||||
|
/** The toggle state for the affordance. */
|
||||||
|
val toggle: KeyguardQuickAffordanceToggleState,
|
||||||
) : KeyguardQuickAffordanceModel()
|
) : KeyguardQuickAffordanceModel()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ package com.android.systemui.keyguard.domain.quickaffordance
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
||||||
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
@@ -61,7 +61,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onQuickAffordanceClicked(
|
override fun onQuickAffordanceClicked(
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
||||||
return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
|
return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
|
||||||
intent =
|
intent =
|
||||||
|
|||||||
@@ -18,8 +18,9 @@
|
|||||||
package com.android.systemui.keyguard.domain.quickaffordance
|
package com.android.systemui.keyguard.domain.quickaffordance
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
|
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
/** Defines interface that can act as data source for a single quick affordance model. */
|
/** Defines interface that can act as data source for a single quick affordance model. */
|
||||||
@@ -27,9 +28,7 @@ interface KeyguardQuickAffordanceConfig {
|
|||||||
|
|
||||||
val state: Flow<State>
|
val state: Flow<State>
|
||||||
|
|
||||||
fun onQuickAffordanceClicked(
|
fun onQuickAffordanceClicked(expandable: Expandable?): OnClickedResult
|
||||||
animationController: ActivityLaunchAnimator.Controller?
|
|
||||||
): OnClickedResult
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates the state of a "quick affordance" in the keyguard bottom area (for example, a
|
* Encapsulates the state of a "quick affordance" in the keyguard bottom area (for example, a
|
||||||
@@ -44,6 +43,9 @@ interface KeyguardQuickAffordanceConfig {
|
|||||||
data class Visible(
|
data class Visible(
|
||||||
/** An icon for the affordance. */
|
/** An icon for the affordance. */
|
||||||
val icon: Icon,
|
val icon: Icon,
|
||||||
|
/** The toggle state for the affordance. */
|
||||||
|
val toggle: KeyguardQuickAffordanceToggleState =
|
||||||
|
KeyguardQuickAffordanceToggleState.NotSupported,
|
||||||
) : State()
|
) : State()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
package com.android.systemui.keyguard.domain.quickaffordance
|
package com.android.systemui.keyguard.domain.quickaffordance
|
||||||
|
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
||||||
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
@@ -66,7 +66,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onQuickAffordanceClicked(
|
override fun onQuickAffordanceClicked(
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
||||||
return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
|
return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
|
||||||
intent = controller.intent,
|
intent = controller.intent,
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import android.service.quickaccesswallet.GetWalletCardsResponse
|
|||||||
import android.service.quickaccesswallet.QuickAccessWalletClient
|
import android.service.quickaccesswallet.QuickAccessWalletClient
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
|
||||||
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
@@ -84,11 +84,11 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onQuickAffordanceClicked(
|
override fun onQuickAffordanceClicked(
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
): KeyguardQuickAffordanceConfig.OnClickedResult {
|
||||||
walletController.startQuickAccessUiIntent(
|
walletController.startQuickAccessUiIntent(
|
||||||
activityStarter,
|
activityStarter,
|
||||||
animationController,
|
expandable?.activityLaunchController(),
|
||||||
/* hasCard= */ true,
|
/* hasCard= */ true,
|
||||||
)
|
)
|
||||||
return KeyguardQuickAffordanceConfig.OnClickedResult.Handled
|
return KeyguardQuickAffordanceConfig.OnClickedResult.Handled
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.quickaffordance
|
||||||
|
|
||||||
|
/** Enumerates all possible toggle states for a quick affordance on the lock-screen. */
|
||||||
|
sealed class KeyguardQuickAffordanceToggleState {
|
||||||
|
/** Toggling is not supported. */
|
||||||
|
object NotSupported : KeyguardQuickAffordanceToggleState()
|
||||||
|
/** The quick affordance is on. */
|
||||||
|
object On : KeyguardQuickAffordanceToggleState()
|
||||||
|
/** The quick affordance is off. */
|
||||||
|
object Off : KeyguardQuickAffordanceToggleState()
|
||||||
|
}
|
||||||
@@ -29,7 +29,7 @@ import androidx.lifecycle.Lifecycle
|
|||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import com.android.settingslib.Utils
|
import com.android.settingslib.Utils
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.animation.Interpolators
|
import com.android.systemui.animation.Interpolators
|
||||||
import com.android.systemui.common.ui.binder.IconViewBinder
|
import com.android.systemui.common.ui.binder.IconViewBinder
|
||||||
import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel
|
import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel
|
||||||
@@ -238,14 +238,26 @@ object KeyguardBottomAreaViewBinder {
|
|||||||
|
|
||||||
IconViewBinder.bind(viewModel.icon, view)
|
IconViewBinder.bind(viewModel.icon, view)
|
||||||
|
|
||||||
|
view.isActivated = viewModel.isActivated
|
||||||
view.drawable.setTint(
|
view.drawable.setTint(
|
||||||
Utils.getColorAttrDefaultColor(
|
Utils.getColorAttrDefaultColor(
|
||||||
view.context,
|
view.context,
|
||||||
com.android.internal.R.attr.textColorPrimary
|
if (viewModel.isActivated) {
|
||||||
|
com.android.internal.R.attr.textColorPrimaryInverse
|
||||||
|
} else {
|
||||||
|
com.android.internal.R.attr.textColorPrimary
|
||||||
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
view.backgroundTintList =
|
view.backgroundTintList =
|
||||||
Utils.getColorAttr(view.context, com.android.internal.R.attr.colorSurface)
|
Utils.getColorAttr(
|
||||||
|
view.context,
|
||||||
|
if (viewModel.isActivated) {
|
||||||
|
com.android.internal.R.attr.colorAccentPrimary
|
||||||
|
} else {
|
||||||
|
com.android.internal.R.attr.colorSurface
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
view.isClickable = viewModel.isClickable
|
view.isClickable = viewModel.isClickable
|
||||||
if (viewModel.isClickable) {
|
if (viewModel.isClickable) {
|
||||||
@@ -268,7 +280,7 @@ object KeyguardBottomAreaViewBinder {
|
|||||||
viewModel.onClicked(
|
viewModel.onClicked(
|
||||||
KeyguardQuickAffordanceViewModel.OnClickedParameters(
|
KeyguardQuickAffordanceViewModel.OnClickedParameters(
|
||||||
configKey = viewModel.configKey,
|
configKey = viewModel.configKey,
|
||||||
animationController = ActivityLaunchAnimator.Controller.fromView(view),
|
expandable = Expandable.fromView(view),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
|||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
|
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
||||||
|
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
@@ -119,10 +120,11 @@ constructor(
|
|||||||
onClicked = { parameters ->
|
onClicked = { parameters ->
|
||||||
quickAffordanceInteractor.onQuickAffordanceClicked(
|
quickAffordanceInteractor.onQuickAffordanceClicked(
|
||||||
configKey = parameters.configKey,
|
configKey = parameters.configKey,
|
||||||
animationController = parameters.animationController,
|
expandable = parameters.expandable,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
isClickable = isClickable,
|
isClickable = isClickable,
|
||||||
|
isActivated = toggle is KeyguardQuickAffordanceToggleState.On,
|
||||||
)
|
)
|
||||||
is KeyguardQuickAffordanceModel.Hidden -> KeyguardQuickAffordanceViewModel()
|
is KeyguardQuickAffordanceModel.Hidden -> KeyguardQuickAffordanceViewModel()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.keyguard.ui.viewmodel
|
package com.android.systemui.keyguard.ui.viewmodel
|
||||||
|
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
@@ -30,9 +30,10 @@ data class KeyguardQuickAffordanceViewModel(
|
|||||||
val icon: Icon = Icon.Resource(res = 0, contentDescription = null),
|
val icon: Icon = Icon.Resource(res = 0, contentDescription = null),
|
||||||
val onClicked: (OnClickedParameters) -> Unit = {},
|
val onClicked: (OnClickedParameters) -> Unit = {},
|
||||||
val isClickable: Boolean = false,
|
val isClickable: Boolean = false,
|
||||||
|
val isActivated: Boolean = false,
|
||||||
) {
|
) {
|
||||||
data class OnClickedParameters(
|
data class OnClickedParameters(
|
||||||
val configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
val configKey: KClass<out KeyguardQuickAffordanceConfig>,
|
||||||
val animationController: ActivityLaunchAnimator.Controller?,
|
val expandable: Expandable?,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,20 +12,20 @@
|
|||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.keyguard.domain.usecase
|
package com.android.systemui.keyguard.domain.interactor
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.ActivityLaunchAnimator
|
||||||
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
|
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||||
@@ -195,6 +195,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var userTracker: UserTracker
|
@Mock private lateinit var userTracker: UserTracker
|
||||||
@Mock private lateinit var activityStarter: ActivityStarter
|
@Mock private lateinit var activityStarter: ActivityStarter
|
||||||
@Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
|
@Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
|
||||||
|
@Mock private lateinit var expandable: Expandable
|
||||||
|
|
||||||
private lateinit var underTest: KeyguardQuickAffordanceInteractor
|
private lateinit var underTest: KeyguardQuickAffordanceInteractor
|
||||||
|
|
||||||
@@ -208,6 +209,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
|||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
whenever(expandable.activityLaunchController()).thenReturn(animationController)
|
||||||
|
|
||||||
homeControls = object : FakeKeyguardQuickAffordanceConfig() {}
|
homeControls = object : FakeKeyguardQuickAffordanceConfig() {}
|
||||||
underTest =
|
underTest =
|
||||||
@@ -259,7 +261,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
|||||||
|
|
||||||
underTest.onQuickAffordanceClicked(
|
underTest.onQuickAffordanceClicked(
|
||||||
configKey = homeControls::class,
|
configKey = homeControls::class,
|
||||||
animationController = animationController,
|
expandable = expandable,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (startActivity) {
|
if (startActivity) {
|
||||||
@@ -12,9 +12,10 @@
|
|||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.keyguard.domain.usecase
|
package com.android.systemui.keyguard.domain.interactor
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
@@ -22,13 +23,12 @@ import com.android.systemui.SysuiTestCase
|
|||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
|
||||||
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
|
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
||||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
||||||
|
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState
|
||||||
import com.android.systemui.plugins.ActivityStarter
|
import com.android.systemui.plugins.ActivityStarter
|
||||||
import com.android.systemui.settings.UserTracker
|
import com.android.systemui.settings.UserTracker
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||||
@@ -103,6 +103,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
|||||||
homeControls.setState(
|
homeControls.setState(
|
||||||
KeyguardQuickAffordanceConfig.State.Visible(
|
KeyguardQuickAffordanceConfig.State.Visible(
|
||||||
icon = ICON,
|
icon = ICON,
|
||||||
|
toggle = KeyguardQuickAffordanceToggleState.On,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -123,6 +124,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
|||||||
assertThat(visibleModel.icon).isEqualTo(ICON)
|
assertThat(visibleModel.icon).isEqualTo(ICON)
|
||||||
assertThat(visibleModel.icon.contentDescription)
|
assertThat(visibleModel.icon.contentDescription)
|
||||||
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
||||||
|
assertThat(visibleModel.toggle).isEqualTo(KeyguardQuickAffordanceToggleState.On)
|
||||||
job.cancel()
|
job.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +154,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
|||||||
assertThat(visibleModel.icon).isEqualTo(ICON)
|
assertThat(visibleModel.icon).isEqualTo(ICON)
|
||||||
assertThat(visibleModel.icon.contentDescription)
|
assertThat(visibleModel.icon.contentDescription)
|
||||||
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
||||||
|
assertThat(visibleModel.toggle).isEqualTo(KeyguardQuickAffordanceToggleState.NotSupported)
|
||||||
job.cancel()
|
job.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.keyguard.domain.quickaffordance
|
package com.android.systemui.keyguard.domain.quickaffordance
|
||||||
|
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -40,7 +40,7 @@ abstract class FakeKeyguardQuickAffordanceConfig : KeyguardQuickAffordanceConfig
|
|||||||
override val state: Flow<KeyguardQuickAffordanceConfig.State> = _state
|
override val state: Flow<KeyguardQuickAffordanceConfig.State> = _state
|
||||||
|
|
||||||
override fun onQuickAffordanceClicked(
|
override fun onQuickAffordanceClicked(
|
||||||
animationController: ActivityLaunchAnimator.Controller?,
|
expandable: Expandable?,
|
||||||
): OnClickedResult {
|
): OnClickedResult {
|
||||||
return onClickedResult
|
return onClickedResult
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ package com.android.systemui.keyguard.domain.quickaffordance
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.controls.controller.ControlsController
|
import com.android.systemui.controls.controller.ControlsController
|
||||||
import com.android.systemui.controls.dagger.ControlsComponent
|
import com.android.systemui.controls.dagger.ControlsComponent
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
|
||||||
@@ -44,7 +44,7 @@ import org.mockito.MockitoAnnotations
|
|||||||
class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
|
class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
|
||||||
|
|
||||||
@Mock private lateinit var component: ControlsComponent
|
@Mock private lateinit var component: ControlsComponent
|
||||||
@Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
|
@Mock private lateinit var expandable: Expandable
|
||||||
|
|
||||||
private lateinit var underTest: HomeControlsKeyguardQuickAffordanceConfig
|
private lateinit var underTest: HomeControlsKeyguardQuickAffordanceConfig
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
|
|||||||
fun `onQuickAffordanceClicked - canShowWhileLockedSetting is true`() = runBlockingTest {
|
fun `onQuickAffordanceClicked - canShowWhileLockedSetting is true`() = runBlockingTest {
|
||||||
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true))
|
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true))
|
||||||
|
|
||||||
val onClickedResult = underTest.onQuickAffordanceClicked(animationController)
|
val onClickedResult = underTest.onQuickAffordanceClicked(expandable)
|
||||||
|
|
||||||
assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
|
assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
|
||||||
assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isTrue()
|
assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isTrue()
|
||||||
@@ -113,7 +113,7 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
|
|||||||
fun `onQuickAffordanceClicked - canShowWhileLockedSetting is false`() = runBlockingTest {
|
fun `onQuickAffordanceClicked - canShowWhileLockedSetting is false`() = runBlockingTest {
|
||||||
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false))
|
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false))
|
||||||
|
|
||||||
val onClickedResult = underTest.onQuickAffordanceClicked(animationController)
|
val onClickedResult = underTest.onQuickAffordanceClicked(expandable)
|
||||||
|
|
||||||
assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
|
assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
|
||||||
assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isFalse()
|
assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isFalse()
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ import androidx.test.filters.SmallTest
|
|||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.ActivityLaunchAnimator
|
||||||
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.plugins.ActivityStarter
|
import com.android.systemui.plugins.ActivityStarter
|
||||||
import com.android.systemui.util.mockito.any
|
import com.android.systemui.util.mockito.any
|
||||||
import com.android.systemui.util.mockito.mock
|
import com.android.systemui.util.mockito.mock
|
||||||
|
import com.android.systemui.util.mockito.whenever
|
||||||
import com.android.systemui.wallet.controller.QuickAccessWalletController
|
import com.android.systemui.wallet.controller.QuickAccessWalletController
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@@ -40,7 +42,6 @@ import org.junit.runner.RunWith
|
|||||||
import org.junit.runners.JUnit4
|
import org.junit.runners.JUnit4
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
import org.mockito.Mockito.`when` as whenever
|
|
||||||
import org.mockito.MockitoAnnotations
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@@ -135,8 +136,11 @@ class QuickAccessWalletKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
|
|||||||
@Test
|
@Test
|
||||||
fun onQuickAffordanceClicked() {
|
fun onQuickAffordanceClicked() {
|
||||||
val animationController: ActivityLaunchAnimator.Controller = mock()
|
val animationController: ActivityLaunchAnimator.Controller = mock()
|
||||||
|
val expandable: Expandable = mock {
|
||||||
|
whenever(this.activityLaunchController()).thenReturn(animationController)
|
||||||
|
}
|
||||||
|
|
||||||
assertThat(underTest.onQuickAffordanceClicked(animationController))
|
assertThat(underTest.onQuickAffordanceClicked(expandable))
|
||||||
.isEqualTo(KeyguardQuickAffordanceConfig.OnClickedResult.Handled)
|
.isEqualTo(KeyguardQuickAffordanceConfig.OnClickedResult.Handled)
|
||||||
verify(walletController)
|
verify(walletController)
|
||||||
.startQuickAccessUiIntent(
|
.startQuickAccessUiIntent(
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import android.content.Intent
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.doze.util.BurnInHelperWrapper
|
import com.android.systemui.doze.util.BurnInHelperWrapper
|
||||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
||||||
@@ -31,6 +31,7 @@ import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePositio
|
|||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig
|
||||||
|
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState
|
||||||
import com.android.systemui.plugins.ActivityStarter
|
import com.android.systemui.plugins.ActivityStarter
|
||||||
import com.android.systemui.settings.UserTracker
|
import com.android.systemui.settings.UserTracker
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||||
@@ -59,7 +60,7 @@ import org.mockito.MockitoAnnotations
|
|||||||
@RunWith(JUnit4::class)
|
@RunWith(JUnit4::class)
|
||||||
class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||||
|
|
||||||
@Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
|
@Mock private lateinit var expandable: Expandable
|
||||||
@Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper
|
@Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper
|
||||||
@Mock private lateinit var lockPatternUtils: LockPatternUtils
|
@Mock private lateinit var lockPatternUtils: LockPatternUtils
|
||||||
@Mock private lateinit var keyguardStateController: KeyguardStateController
|
@Mock private lateinit var keyguardStateController: KeyguardStateController
|
||||||
@@ -130,6 +131,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
TestConfig(
|
TestConfig(
|
||||||
isVisible = true,
|
isVisible = true,
|
||||||
isClickable = true,
|
isClickable = true,
|
||||||
|
isActivated = true,
|
||||||
icon = mock(),
|
icon = mock(),
|
||||||
canShowWhileLocked = false,
|
canShowWhileLocked = false,
|
||||||
intent = Intent("action"),
|
intent = Intent("action"),
|
||||||
@@ -505,6 +507,12 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
KeyguardQuickAffordanceConfig.State.Visible(
|
KeyguardQuickAffordanceConfig.State.Visible(
|
||||||
icon = testConfig.icon ?: error("Icon is unexpectedly null!"),
|
icon = testConfig.icon ?: error("Icon is unexpectedly null!"),
|
||||||
|
toggle =
|
||||||
|
when (testConfig.isActivated) {
|
||||||
|
true -> KeyguardQuickAffordanceToggleState.On
|
||||||
|
false -> KeyguardQuickAffordanceToggleState.Off
|
||||||
|
null -> KeyguardQuickAffordanceToggleState.NotSupported
|
||||||
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
KeyguardQuickAffordanceConfig.State.Hidden
|
KeyguardQuickAffordanceConfig.State.Hidden
|
||||||
@@ -521,12 +529,13 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
checkNotNull(viewModel)
|
checkNotNull(viewModel)
|
||||||
assertThat(viewModel.isVisible).isEqualTo(testConfig.isVisible)
|
assertThat(viewModel.isVisible).isEqualTo(testConfig.isVisible)
|
||||||
assertThat(viewModel.isClickable).isEqualTo(testConfig.isClickable)
|
assertThat(viewModel.isClickable).isEqualTo(testConfig.isClickable)
|
||||||
|
assertThat(viewModel.isActivated).isEqualTo(testConfig.isActivated)
|
||||||
if (testConfig.isVisible) {
|
if (testConfig.isVisible) {
|
||||||
assertThat(viewModel.icon).isEqualTo(testConfig.icon)
|
assertThat(viewModel.icon).isEqualTo(testConfig.icon)
|
||||||
viewModel.onClicked.invoke(
|
viewModel.onClicked.invoke(
|
||||||
KeyguardQuickAffordanceViewModel.OnClickedParameters(
|
KeyguardQuickAffordanceViewModel.OnClickedParameters(
|
||||||
configKey = configKey,
|
configKey = configKey,
|
||||||
animationController = animationController,
|
expandable = expandable,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if (testConfig.intent != null) {
|
if (testConfig.intent != null) {
|
||||||
@@ -542,6 +551,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
private data class TestConfig(
|
private data class TestConfig(
|
||||||
val isVisible: Boolean,
|
val isVisible: Boolean,
|
||||||
val isClickable: Boolean = false,
|
val isClickable: Boolean = false,
|
||||||
|
val isActivated: Boolean = false,
|
||||||
val icon: Icon? = null,
|
val icon: Icon? = null,
|
||||||
val canShowWhileLocked: Boolean = false,
|
val canShowWhileLocked: Boolean = false,
|
||||||
val intent: Intent? = null,
|
val intent: Intent? = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user