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:
Ale Nijamkin
2022-10-14 19:50:10 +00:00
committed by Automerger Merge Worker
16 changed files with 112 additions and 44 deletions

View File

@@ -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 */,
) )
} }

View File

@@ -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()
} }

View File

@@ -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 =

View File

@@ -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()
} }

View File

@@ -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,

View File

@@ -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

View File

@@ -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()
}

View File

@@ -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,
if (viewModel.isActivated) {
com.android.internal.R.attr.textColorPrimaryInverse
} else {
com.android.internal.R.attr.textColorPrimary 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),
) )
) )
} }

View File

@@ -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()
} }

View File

@@ -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?,
) )
} }

View File

@@ -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) {

View File

@@ -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()
} }

View File

@@ -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
} }

View File

@@ -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()

View File

@@ -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(

View File

@@ -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,