From e7e879deb63e966a14456c975003e77c827c8294 Mon Sep 17 00:00:00 2001 From: Alejandro Nijamkin Date: Tue, 11 Oct 2022 16:04:49 -0700 Subject: [PATCH 1/2] Adds toggle support for quick affordances. Introduces the ability to toggle quick affordance buttons on the lock-screen. Developers of keyguard quick affordances will now have the option of providing an ON or OFF state for their toggle (or leave it unset) and the reset of the system will reflect that state onto the UI. Bug: 253094565 Test: Temporarily added a fake toggle config to the collection of keyguard quick affordances and made sure it looks correct on both dark and light themes on the lock-screen and toggles appropriately. Also expansed existing unit tests to cover for the new state. Change-Id: Idddb4baeb19c603a6663347a7b4319751f02fd2f --- .../KeyguardQuickAffordanceInteractor.kt | 1 + .../model/KeyguardQuickAffordanceModel.kt | 3 ++ .../KeyguardQuickAffordanceConfig.kt | 4 +++ .../KeyguardQuickAffordanceToggleState.kt | 28 +++++++++++++++++++ .../ui/binder/KeyguardBottomAreaViewBinder.kt | 16 +++++++++-- .../viewmodel/KeyguardBottomAreaViewModel.kt | 2 ++ .../KeyguardQuickAffordanceViewModel.kt | 1 + .../KeyguardQuickAffordanceInteractorTest.kt | 4 +++ .../KeyguardBottomAreaViewModelTest.kt | 10 +++++++ 9 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/keyguard/shared/quickaffordance/KeyguardQuickAffordanceToggleState.kt diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt index 01cd3e28472e2..656ab3d95806b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt @@ -104,6 +104,7 @@ constructor( KeyguardQuickAffordanceModel.Visible( configKey = configs[index]::class, icon = visibleState.icon, + toggle = visibleState.toggle, ) } else { KeyguardQuickAffordanceModel.Hidden diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/model/KeyguardQuickAffordanceModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/model/KeyguardQuickAffordanceModel.kt index eb6bb92dd9126..e56b259679106 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/model/KeyguardQuickAffordanceModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/model/KeyguardQuickAffordanceModel.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.domain.model import com.android.systemui.common.shared.model.Icon import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig +import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState import kotlin.reflect.KClass /** @@ -35,5 +36,7 @@ sealed class KeyguardQuickAffordanceModel { val configKey: KClass, /** An icon for the affordance. */ val icon: Icon, + /** The toggle state for the affordance. */ + val toggle: KeyguardQuickAffordanceToggleState, ) : KeyguardQuickAffordanceModel() } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt index 8e1c6b76079f9..8476ffaf19626 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt @@ -20,6 +20,7 @@ package com.android.systemui.keyguard.domain.quickaffordance import android.content.Intent import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.common.shared.model.Icon +import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState import kotlinx.coroutines.flow.Flow /** Defines interface that can act as data source for a single quick affordance model. */ @@ -44,6 +45,9 @@ interface KeyguardQuickAffordanceConfig { data class Visible( /** An icon for the affordance. */ val icon: Icon, + /** The toggle state for the affordance. */ + val toggle: KeyguardQuickAffordanceToggleState = + KeyguardQuickAffordanceToggleState.NotSupported, ) : State() } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/quickaffordance/KeyguardQuickAffordanceToggleState.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/quickaffordance/KeyguardQuickAffordanceToggleState.kt new file mode 100644 index 0000000000000..55d38a41849d7 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/quickaffordance/KeyguardQuickAffordanceToggleState.kt @@ -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() +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt index 65b85c0355db7..01398bb30bd76 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt @@ -238,14 +238,26 @@ object KeyguardBottomAreaViewBinder { IconViewBinder.bind(viewModel.icon, view) + view.isActivated = viewModel.isActivated view.drawable.setTint( Utils.getColorAttrDefaultColor( 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 = - 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 if (viewModel.isClickable) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt index 970ee4c541d7e..5c3c8908791ae 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt @@ -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.model.KeyguardQuickAffordanceModel import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition +import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine @@ -123,6 +124,7 @@ constructor( ) }, isClickable = isClickable, + isActivated = toggle is KeyguardQuickAffordanceToggleState.On, ) is KeyguardQuickAffordanceModel.Hidden -> KeyguardQuickAffordanceViewModel() } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt index 0971f13e58dd6..27b5c756450f5 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt @@ -30,6 +30,7 @@ data class KeyguardQuickAffordanceViewModel( val icon: Icon = Icon.Resource(res = 0, contentDescription = null), val onClicked: (OnClickedParameters) -> Unit = {}, val isClickable: Boolean = false, + val isActivated: Boolean = false, ) { data class OnClickedParameters( val configKey: KClass, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt index 1dd919aba88d3..3633b6ec1e423 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePositio import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry 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.settings.UserTracker import com.android.systemui.statusbar.policy.KeyguardStateController @@ -103,6 +104,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { homeControls.setState( KeyguardQuickAffordanceConfig.State.Visible( icon = ICON, + toggle = KeyguardQuickAffordanceToggleState.On, ) ) @@ -123,6 +125,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { assertThat(visibleModel.icon).isEqualTo(ICON) assertThat(visibleModel.icon.contentDescription) .isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID)) + assertThat(visibleModel.toggle).isEqualTo(KeyguardQuickAffordanceToggleState.On) job.cancel() } @@ -152,6 +155,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { assertThat(visibleModel.icon).isEqualTo(ICON) assertThat(visibleModel.icon.contentDescription) .isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID)) + assertThat(visibleModel.toggle).isEqualTo(KeyguardQuickAffordanceToggleState.NotSupported) job.cancel() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt index 96544e7b7da6d..85c2f68813f6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt @@ -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.FakeKeyguardQuickAffordanceRegistry 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.settings.UserTracker import com.android.systemui.statusbar.policy.KeyguardStateController @@ -130,6 +131,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() { TestConfig( isVisible = true, isClickable = true, + isActivated = true, icon = mock(), canShowWhileLocked = false, intent = Intent("action"), @@ -505,6 +507,12 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() { } KeyguardQuickAffordanceConfig.State.Visible( icon = testConfig.icon ?: error("Icon is unexpectedly null!"), + toggle = + when (testConfig.isActivated) { + true -> KeyguardQuickAffordanceToggleState.On + false -> KeyguardQuickAffordanceToggleState.Off + null -> KeyguardQuickAffordanceToggleState.NotSupported + } ) } else { KeyguardQuickAffordanceConfig.State.Hidden @@ -521,6 +529,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() { checkNotNull(viewModel) assertThat(viewModel.isVisible).isEqualTo(testConfig.isVisible) assertThat(viewModel.isClickable).isEqualTo(testConfig.isClickable) + assertThat(viewModel.isActivated).isEqualTo(testConfig.isActivated) if (testConfig.isVisible) { assertThat(viewModel.icon).isEqualTo(testConfig.icon) viewModel.onClicked.invoke( @@ -542,6 +551,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() { private data class TestConfig( val isVisible: Boolean, val isClickable: Boolean = false, + val isActivated: Boolean = false, val icon: Icon? = null, val canShowWhileLocked: Boolean = false, val intent: Intent? = null, From b314f861993a09d9d479f010bb5c21766ed083c0 Mon Sep 17 00:00:00 2001 From: Alejandro Nijamkin Date: Thu, 13 Oct 2022 14:55:59 -0700 Subject: [PATCH 2/2] KeyguardBottomArea: migrates to Expandable Uses Expandable instead of ActivityLaunchAnimator.Controller which allows future configs to open a dialog instead of an activity. Fix: 243408565 Test: unit tests all pass. Manually verified on device that home controls and wallet buttons still open their activities properly. Change-Id: I967b7fb75e34c5e2aea6bed818fd957c5f70fad6 --- .../KeyguardQuickAffordanceInteractor.kt | 16 ++++++++-------- .../HomeControlsKeyguardQuickAffordanceConfig.kt | 4 ++-- .../KeyguardQuickAffordanceConfig.kt | 6 ++---- ...QrCodeScannerKeyguardQuickAffordanceConfig.kt | 4 ++-- ...kAccessWalletKeyguardQuickAffordanceConfig.kt | 6 +++--- .../ui/binder/KeyguardBottomAreaViewBinder.kt | 4 ++-- .../ui/viewmodel/KeyguardBottomAreaViewModel.kt | 2 +- .../KeyguardQuickAffordanceViewModel.kt | 4 ++-- ...QuickAffordanceInteractorParameterizedTest.kt | 10 ++++++---- .../KeyguardQuickAffordanceInteractorTest.kt | 5 ++--- .../FakeKeyguardQuickAffordanceConfig.kt | 4 ++-- ...eControlsKeyguardQuickAffordanceConfigTest.kt | 8 ++++---- ...essWalletKeyguardQuickAffordanceConfigTest.kt | 8 ++++++-- .../viewmodel/KeyguardBottomAreaViewModelTest.kt | 6 +++--- 14 files changed, 45 insertions(+), 42 deletions(-) rename packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/{usecase => interactor}/KeyguardQuickAffordanceInteractorParameterizedTest.kt (97%) rename packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/{usecase => interactor}/KeyguardQuickAffordanceInteractorTest.kt (97%) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt index 656ab3d95806b..f663b0dd23cd5 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.domain.interactor import android.content.Intent 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.keyguard.domain.model.KeyguardQuickAffordanceModel import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordancePosition @@ -67,19 +67,19 @@ constructor( * * @param configKey The configuration key corresponding to the [KeyguardQuickAffordanceModel] of * 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( configKey: KClass, - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ) { @Suppress("UNCHECKED_CAST") val config = registry.get(configKey as KClass) - when (val result = config.onQuickAffordanceClicked(animationController)) { + when (val result = config.onQuickAffordanceClicked(expandable)) { is KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity -> launchQuickAffordance( intent = result.intent, canShowWhileLocked = result.canShowWhileLocked, - animationController = animationController + expandable = expandable, ) is KeyguardQuickAffordanceConfig.OnClickedResult.Handled -> Unit } @@ -115,7 +115,7 @@ constructor( private fun launchQuickAffordance( intent: Intent, canShowWhileLocked: Boolean, - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ) { @LockPatternUtils.StrongAuthTracker.StrongAuthFlags val strongAuthFlags = @@ -131,13 +131,13 @@ constructor( activityStarter.postStartActivityDismissingKeyguard( intent, 0 /* delay */, - animationController + expandable?.activityLaunchController(), ) } else { activityStarter.startActivity( intent, true /* dismissShade */, - animationController, + expandable?.activityLaunchController(), true /* showOverLockscreenWhenLocked */, ) } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt index 89604f054f9b8..83842602cbee1 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt @@ -20,7 +20,7 @@ package com.android.systemui.keyguard.domain.quickaffordance import android.content.Context import android.content.Intent 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.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.common.shared.model.ContentDescription @@ -61,7 +61,7 @@ constructor( } override fun onQuickAffordanceClicked( - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ): KeyguardQuickAffordanceConfig.OnClickedResult { return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity( intent = diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt index 8476ffaf19626..95027d00c46cb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/KeyguardQuickAffordanceConfig.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.domain.quickaffordance 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.keyguard.shared.quickaffordance.KeyguardQuickAffordanceToggleState import kotlinx.coroutines.flow.Flow @@ -28,9 +28,7 @@ interface KeyguardQuickAffordanceConfig { val state: Flow - fun onQuickAffordanceClicked( - animationController: ActivityLaunchAnimator.Controller? - ): OnClickedResult + fun onQuickAffordanceClicked(expandable: Expandable?): OnClickedResult /** * Encapsulates the state of a "quick affordance" in the keyguard bottom area (for example, a diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt index d97deaf3b69ea..502a6070a422c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt @@ -18,7 +18,7 @@ package com.android.systemui.keyguard.domain.quickaffordance 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.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.common.shared.model.ContentDescription @@ -66,7 +66,7 @@ constructor( } override fun onQuickAffordanceClicked( - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ): KeyguardQuickAffordanceConfig.OnClickedResult { return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity( intent = controller.intent, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt index 9196b0920bb4a..a24a0d62465f6 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt @@ -23,7 +23,7 @@ import android.service.quickaccesswallet.GetWalletCardsResponse import android.service.quickaccesswallet.QuickAccessWalletClient import android.util.Log 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.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.common.shared.model.ContentDescription @@ -84,11 +84,11 @@ constructor( } override fun onQuickAffordanceClicked( - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ): KeyguardQuickAffordanceConfig.OnClickedResult { walletController.startQuickAccessUiIntent( activityStarter, - animationController, + expandable?.activityLaunchController(), /* hasCard= */ true, ) return KeyguardQuickAffordanceConfig.OnClickedResult.Handled diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt index 01398bb30bd76..2c99ca59ba6ba 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt @@ -29,7 +29,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.settingslib.Utils 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.common.ui.binder.IconViewBinder import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel @@ -280,7 +280,7 @@ object KeyguardBottomAreaViewBinder { viewModel.onClicked( KeyguardQuickAffordanceViewModel.OnClickedParameters( configKey = viewModel.configKey, - animationController = ActivityLaunchAnimator.Controller.fromView(view), + expandable = Expandable.fromView(view), ) ) } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt index 5c3c8908791ae..535ca72102440 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt @@ -120,7 +120,7 @@ constructor( onClicked = { parameters -> quickAffordanceInteractor.onQuickAffordanceClicked( configKey = parameters.configKey, - animationController = parameters.animationController, + expandable = parameters.expandable, ) }, isClickable = isClickable, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt index 27b5c756450f5..bf598ba859322 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt @@ -16,7 +16,7 @@ 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.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig import kotlin.reflect.KClass @@ -34,6 +34,6 @@ data class KeyguardQuickAffordanceViewModel( ) { data class OnClickedParameters( val configKey: KClass, - val animationController: ActivityLaunchAnimator.Controller?, + val expandable: Expandable?, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt similarity index 97% rename from packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorParameterizedTest.kt rename to packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt index b6d7559dbcbb9..b4d5464d11777 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorParameterizedTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt @@ -12,20 +12,20 @@ * 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.domain.usecase +package com.android.systemui.keyguard.domain.interactor import android.content.Intent import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils import com.android.systemui.SysuiTestCase 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.Icon 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.quickaffordance.FakeKeyguardQuickAffordanceConfig 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 activityStarter: ActivityStarter @Mock private lateinit var animationController: ActivityLaunchAnimator.Controller + @Mock private lateinit var expandable: Expandable private lateinit var underTest: KeyguardQuickAffordanceInteractor @@ -208,6 +209,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) + whenever(expandable.activityLaunchController()).thenReturn(animationController) homeControls = object : FakeKeyguardQuickAffordanceConfig() {} underTest = @@ -259,7 +261,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() { underTest.onQuickAffordanceClicked( configKey = homeControls::class, - animationController = animationController, + expandable = expandable, ) if (startActivity) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt similarity index 97% rename from packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt rename to packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt index 3633b6ec1e423..65fd6e5766500 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/KeyguardQuickAffordanceInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt @@ -12,9 +12,10 @@ * 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.domain.usecase +package com.android.systemui.keyguard.domain.interactor import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils @@ -22,8 +23,6 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon 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.KeyguardQuickAffordancePosition import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceConfig diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceConfig.kt index 6ea1daa7704f2..e99c139e9e7ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceConfig.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceConfig.kt @@ -17,7 +17,7 @@ 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 kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -40,7 +40,7 @@ abstract class FakeKeyguardQuickAffordanceConfig : KeyguardQuickAffordanceConfig override val state: Flow = _state override fun onQuickAffordanceClicked( - animationController: ActivityLaunchAnimator.Controller?, + expandable: Expandable?, ): OnClickedResult { return onClickedResult } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt index dede4ec0210cc..a809f0547ee64 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt @@ -20,7 +20,7 @@ package com.android.systemui.keyguard.domain.quickaffordance import androidx.test.filters.SmallTest import com.android.systemui.R 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.dagger.ControlsComponent import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult @@ -44,7 +44,7 @@ import org.mockito.MockitoAnnotations class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { @Mock private lateinit var component: ControlsComponent - @Mock private lateinit var animationController: ActivityLaunchAnimator.Controller + @Mock private lateinit var expandable: Expandable private lateinit var underTest: HomeControlsKeyguardQuickAffordanceConfig @@ -103,7 +103,7 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { fun `onQuickAffordanceClicked - canShowWhileLockedSetting is true`() = runBlockingTest { 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 as OnClickedResult.StartActivity).canShowWhileLocked).isTrue() @@ -113,7 +113,7 @@ class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() { fun `onQuickAffordanceClicked - canShowWhileLockedSetting is false`() = runBlockingTest { 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 as OnClickedResult.StartActivity).canShowWhileLocked).isFalse() diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt index 0a4478f274487..98dc4c4f6f76b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt @@ -24,11 +24,13 @@ import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase 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.Icon import com.android.systemui.plugins.ActivityStarter import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock +import com.android.systemui.util.mockito.whenever import com.android.systemui.wallet.controller.QuickAccessWalletController import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.launchIn @@ -40,7 +42,6 @@ import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.mockito.Mock import org.mockito.Mockito.verify -import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @SmallTest @@ -135,8 +136,11 @@ class QuickAccessWalletKeyguardQuickAffordanceConfigTest : SysuiTestCase() { @Test fun onQuickAffordanceClicked() { 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) verify(walletController) .startQuickAccessUiIntent( diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt index 85c2f68813f6a..d674c89c0e14d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt @@ -20,7 +20,7 @@ import android.content.Intent import androidx.test.filters.SmallTest import com.android.internal.widget.LockPatternUtils 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.doze.util.BurnInHelperWrapper import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository @@ -60,7 +60,7 @@ import org.mockito.MockitoAnnotations @RunWith(JUnit4::class) 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 lockPatternUtils: LockPatternUtils @Mock private lateinit var keyguardStateController: KeyguardStateController @@ -535,7 +535,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() { viewModel.onClicked.invoke( KeyguardQuickAffordanceViewModel.OnClickedParameters( configKey = configKey, - animationController = animationController, + expandable = expandable, ) ) if (testConfig.intent != null) {