Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt +0 −19 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.data.repository.FakeFacePropertyRepository import com.android.systemui.common.shared.model.Position import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.DozeMachine import com.android.systemui.doze.DozeTransitionCallback Loading Loading @@ -151,24 +150,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { assertThat(underTest.topClippingBounds.value).isEqualTo(500) } @Test fun clockPosition() = testScope.runTest { assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 0)) underTest.setClockPosition(0, 1) assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 1)) underTest.setClockPosition(1, 9) assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 9)) underTest.setClockPosition(1, 0) assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 0)) underTest.setClockPosition(3, 1) assertThat(underTest.clockPosition.value).isEqualTo(Position(3, 1)) } @Test fun dozeTimeTick() = testScope.runTest { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModelTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ class AodBurnInViewModelTest : SysuiTestCase() { mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT) MockitoAnnotations.initMocks(this) whenever(burnInInteractor.keyguardBurnIn).thenReturn(burnInFlow) whenever(burnInInteractor.burnIn(anyInt(), anyInt())).thenReturn(burnInFlow) kosmos.burnInInteractor = burnInInteractor whenever(goneToAodTransitionViewModel.enterFromTopTranslationY(anyInt())) .thenReturn(emptyFlow()) Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardIndicationAreaViewModelTest.kt→packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardIndicationAreaViewModelTest.kt +76 −57 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.keyguard.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags as AConfigFlags import com.android.systemui.SysuiTestCase Loading @@ -24,9 +25,13 @@ import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.util.BurnInHelperWrapper import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.BurnInInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardBottomAreaInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory import com.android.systemui.keyguard.shared.model.BurnInModel import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition import com.android.systemui.kosmos.testScope import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever Loading @@ -36,18 +41,23 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.MockitoAnnotations @SmallTest @RunWith(JUnit4::class) @RunWith(AndroidJUnit4::class) class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope @Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper @Mock private lateinit var shortcutsCombinedViewModel: KeyguardQuickAffordancesCombinedViewModel @Mock private lateinit var burnInInteractor: BurnInInteractor private val burnInFlow = MutableStateFlow(BurnInModel()) private lateinit var bottomAreaInteractor: KeyguardBottomAreaInteractor private lateinit var underTest: KeyguardIndicationAreaViewModel private lateinit var repository: FakeKeyguardRepository Loading @@ -70,9 +80,11 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT) whenever(burnInHelperWrapper.burnInOffset(anyInt(), any())) .thenReturn(RETURNED_BURN_IN_OFFSET) whenever(burnInInteractor.burnIn(anyInt(), anyInt())).thenReturn(burnInFlow) val withDeps = KeyguardInteractorFactory.create() val keyguardInteractor = withDeps.keyguardInteractor Loading @@ -82,19 +94,22 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { whenever(bottomAreaViewModel.startButton).thenReturn(startButtonFlow) whenever(bottomAreaViewModel.endButton).thenReturn(endButtonFlow) whenever(bottomAreaViewModel.alpha).thenReturn(alphaFlow) bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository) underTest = KeyguardIndicationAreaViewModel( keyguardInteractor = keyguardInteractor, bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository), bottomAreaInteractor = bottomAreaInteractor, keyguardBottomAreaViewModel = bottomAreaViewModel, burnInHelperWrapper = burnInHelperWrapper, burnInInteractor = burnInInteractor, shortcutsCombinedViewModel = shortcutsCombinedViewModel, configurationInteractor = ConfigurationInteractor(FakeConfigurationRepository()), ) } @Test fun alpha() = runTest { fun alpha() = testScope.runTest { val value = collectLastValue(underTest.alpha) assertThat(value()).isEqualTo(1f) Loading @@ -109,7 +124,8 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { } @Test fun isIndicationAreaPadded() = runTest { fun isIndicationAreaPadded() = testScope.runTest { repository.setKeyguardShowing(true) val value = collectLastValue(underTest.isIndicationAreaPadded) Loading @@ -125,23 +141,26 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { } @Test fun indicationAreaTranslationX() = runTest { fun indicationAreaTranslationX() = testScope.runTest { val value = collectLastValue(underTest.indicationAreaTranslationX) assertThat(value()).isEqualTo(0f) repository.setClockPosition(100, 100) bottomAreaInteractor.setClockPosition(100, 100) assertThat(value()).isEqualTo(100f) repository.setClockPosition(200, 100) bottomAreaInteractor.setClockPosition(200, 100) assertThat(value()).isEqualTo(200f) repository.setClockPosition(200, 200) bottomAreaInteractor.setClockPosition(200, 200) assertThat(value()).isEqualTo(200f) repository.setClockPosition(300, 100) bottomAreaInteractor.setClockPosition(300, 100) assertThat(value()).isEqualTo(300f) } @Test fun indicationAreaTranslationY() = runTest { val value = collectLastValue(underTest.indicationAreaTranslationY(DEFAULT_BURN_IN_OFFSET)) fun indicationAreaTranslationY() = testScope.runTest { val value = collectLastValue(underTest.indicationAreaTranslationY(DEFAULT_BURN_IN_OFFSET)) // Negative 0 - apparently there's a difference in floating point arithmetic - FML assertThat(value()).isEqualTo(-0f) Loading packages/SystemUI/res/values/ids.xml +1 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ <item type="id" name="lock_icon" /> <item type="id" name="lock_icon_bg" /> <item type="id" name="burn_in_layer" /> <item type="id" name="burn_in_layer_empty_view" /> <item type="id" name="communal_tutorial_indicator" /> <item type="id" name="nssl_placeholder_barrier_bottom" /> <item type="id" name="ambient_indication_container" /> Loading packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +2 −17 Original line number Diff line number Diff line Loading @@ -53,9 +53,6 @@ import com.android.systemui.Dumpable; import com.android.systemui.animation.ViewHierarchyAnimator; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.keyguard.shared.model.TransitionState; import com.android.systemui.keyguard.shared.model.TransitionStep; import com.android.systemui.plugins.clocks.ClockController; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.power.shared.model.ScreenPowerState; Loading Loading @@ -104,7 +101,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private final Rect mClipBounds = new Rect(); private final KeyguardInteractor mKeyguardInteractor; private final PowerInteractor mPowerInteractor; private final KeyguardTransitionInteractor mKeyguardTransitionInteractor; private final DozeParameters mDozeParameters; private View mStatusArea = null; Loading @@ -112,7 +108,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private Boolean mSplitShadeEnabled = false; private Boolean mStatusViewCentered = true; private boolean mGoneToAodTransitionRunning = false; private DumpManager mDumpManager; private final TransitionListenerAdapter mKeyguardStatusAlignmentTransitionListener = Loading Loading @@ -181,7 +176,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV KeyguardLogger logger, InteractionJankMonitor interactionJankMonitor, KeyguardInteractor keyguardInteractor, KeyguardTransitionInteractor keyguardTransitionInteractor, DumpManager dumpManager, PowerInteractor powerInteractor) { super(keyguardStatusView); Loading @@ -197,7 +191,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mDumpManager = dumpManager; mKeyguardInteractor = keyguardInteractor; mPowerInteractor = powerInteractor; mKeyguardTransitionInteractor = keyguardTransitionInteractor; } @Override Loading Loading @@ -232,6 +225,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mDumpManager.registerDumpable(getInstanceName(), this); if (migrateClocksToBlueprint()) { startCoroutines(EmptyCoroutineContext.INSTANCE); mView.setVisibility(View.GONE); } } Loading @@ -247,15 +241,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV dozeTimeTick(); } }, context); collectFlow(mView, mKeyguardTransitionInteractor.getGoneToAodTransition(), (TransitionStep step) -> { if (step.getTransitionState() == TransitionState.RUNNING) { mGoneToAodTransitionRunning = true; } else { mGoneToAodTransitionRunning = false; } }, context); } public KeyguardStatusView getView() { Loading Loading @@ -326,7 +311,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV * Set keyguard status view alpha. */ public void setAlpha(float alpha) { if (!mKeyguardVisibilityHelper.isVisibilityAnimating() && !mGoneToAodTransitionRunning) { if (!mKeyguardVisibilityHelper.isVisibilityAnimating()) { mView.setAlpha(alpha); } } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt +0 −19 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.data.repository.FakeFacePropertyRepository import com.android.systemui.common.shared.model.Position import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.DozeMachine import com.android.systemui.doze.DozeTransitionCallback Loading Loading @@ -151,24 +150,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { assertThat(underTest.topClippingBounds.value).isEqualTo(500) } @Test fun clockPosition() = testScope.runTest { assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 0)) underTest.setClockPosition(0, 1) assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 1)) underTest.setClockPosition(1, 9) assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 9)) underTest.setClockPosition(1, 0) assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 0)) underTest.setClockPosition(3, 1) assertThat(underTest.clockPosition.value).isEqualTo(Position(3, 1)) } @Test fun dozeTimeTick() = testScope.runTest { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModelTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ class AodBurnInViewModelTest : SysuiTestCase() { mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT) MockitoAnnotations.initMocks(this) whenever(burnInInteractor.keyguardBurnIn).thenReturn(burnInFlow) whenever(burnInInteractor.burnIn(anyInt(), anyInt())).thenReturn(burnInFlow) kosmos.burnInInteractor = burnInInteractor whenever(goneToAodTransitionViewModel.enterFromTopTranslationY(anyInt())) .thenReturn(emptyFlow()) Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardIndicationAreaViewModelTest.kt→packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardIndicationAreaViewModelTest.kt +76 −57 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.keyguard.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags as AConfigFlags import com.android.systemui.SysuiTestCase Loading @@ -24,9 +25,13 @@ import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.doze.util.BurnInHelperWrapper import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.BurnInInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardBottomAreaInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory import com.android.systemui.keyguard.shared.model.BurnInModel import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition import com.android.systemui.kosmos.testScope import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever Loading @@ -36,18 +41,23 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.MockitoAnnotations @SmallTest @RunWith(JUnit4::class) @RunWith(AndroidJUnit4::class) class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope @Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper @Mock private lateinit var shortcutsCombinedViewModel: KeyguardQuickAffordancesCombinedViewModel @Mock private lateinit var burnInInteractor: BurnInInteractor private val burnInFlow = MutableStateFlow(BurnInModel()) private lateinit var bottomAreaInteractor: KeyguardBottomAreaInteractor private lateinit var underTest: KeyguardIndicationAreaViewModel private lateinit var repository: FakeKeyguardRepository Loading @@ -70,9 +80,11 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT) whenever(burnInHelperWrapper.burnInOffset(anyInt(), any())) .thenReturn(RETURNED_BURN_IN_OFFSET) whenever(burnInInteractor.burnIn(anyInt(), anyInt())).thenReturn(burnInFlow) val withDeps = KeyguardInteractorFactory.create() val keyguardInteractor = withDeps.keyguardInteractor Loading @@ -82,19 +94,22 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { whenever(bottomAreaViewModel.startButton).thenReturn(startButtonFlow) whenever(bottomAreaViewModel.endButton).thenReturn(endButtonFlow) whenever(bottomAreaViewModel.alpha).thenReturn(alphaFlow) bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository) underTest = KeyguardIndicationAreaViewModel( keyguardInteractor = keyguardInteractor, bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository), bottomAreaInteractor = bottomAreaInteractor, keyguardBottomAreaViewModel = bottomAreaViewModel, burnInHelperWrapper = burnInHelperWrapper, burnInInteractor = burnInInteractor, shortcutsCombinedViewModel = shortcutsCombinedViewModel, configurationInteractor = ConfigurationInteractor(FakeConfigurationRepository()), ) } @Test fun alpha() = runTest { fun alpha() = testScope.runTest { val value = collectLastValue(underTest.alpha) assertThat(value()).isEqualTo(1f) Loading @@ -109,7 +124,8 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { } @Test fun isIndicationAreaPadded() = runTest { fun isIndicationAreaPadded() = testScope.runTest { repository.setKeyguardShowing(true) val value = collectLastValue(underTest.isIndicationAreaPadded) Loading @@ -125,23 +141,26 @@ class KeyguardIndicationAreaViewModelTest : SysuiTestCase() { } @Test fun indicationAreaTranslationX() = runTest { fun indicationAreaTranslationX() = testScope.runTest { val value = collectLastValue(underTest.indicationAreaTranslationX) assertThat(value()).isEqualTo(0f) repository.setClockPosition(100, 100) bottomAreaInteractor.setClockPosition(100, 100) assertThat(value()).isEqualTo(100f) repository.setClockPosition(200, 100) bottomAreaInteractor.setClockPosition(200, 100) assertThat(value()).isEqualTo(200f) repository.setClockPosition(200, 200) bottomAreaInteractor.setClockPosition(200, 200) assertThat(value()).isEqualTo(200f) repository.setClockPosition(300, 100) bottomAreaInteractor.setClockPosition(300, 100) assertThat(value()).isEqualTo(300f) } @Test fun indicationAreaTranslationY() = runTest { val value = collectLastValue(underTest.indicationAreaTranslationY(DEFAULT_BURN_IN_OFFSET)) fun indicationAreaTranslationY() = testScope.runTest { val value = collectLastValue(underTest.indicationAreaTranslationY(DEFAULT_BURN_IN_OFFSET)) // Negative 0 - apparently there's a difference in floating point arithmetic - FML assertThat(value()).isEqualTo(-0f) Loading
packages/SystemUI/res/values/ids.xml +1 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ <item type="id" name="lock_icon" /> <item type="id" name="lock_icon_bg" /> <item type="id" name="burn_in_layer" /> <item type="id" name="burn_in_layer_empty_view" /> <item type="id" name="communal_tutorial_indicator" /> <item type="id" name="nssl_placeholder_barrier_bottom" /> <item type="id" name="ambient_indication_container" /> Loading
packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +2 −17 Original line number Diff line number Diff line Loading @@ -53,9 +53,6 @@ import com.android.systemui.Dumpable; import com.android.systemui.animation.ViewHierarchyAnimator; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.keyguard.shared.model.TransitionState; import com.android.systemui.keyguard.shared.model.TransitionStep; import com.android.systemui.plugins.clocks.ClockController; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.power.shared.model.ScreenPowerState; Loading Loading @@ -104,7 +101,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private final Rect mClipBounds = new Rect(); private final KeyguardInteractor mKeyguardInteractor; private final PowerInteractor mPowerInteractor; private final KeyguardTransitionInteractor mKeyguardTransitionInteractor; private final DozeParameters mDozeParameters; private View mStatusArea = null; Loading @@ -112,7 +108,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private Boolean mSplitShadeEnabled = false; private Boolean mStatusViewCentered = true; private boolean mGoneToAodTransitionRunning = false; private DumpManager mDumpManager; private final TransitionListenerAdapter mKeyguardStatusAlignmentTransitionListener = Loading Loading @@ -181,7 +176,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV KeyguardLogger logger, InteractionJankMonitor interactionJankMonitor, KeyguardInteractor keyguardInteractor, KeyguardTransitionInteractor keyguardTransitionInteractor, DumpManager dumpManager, PowerInteractor powerInteractor) { super(keyguardStatusView); Loading @@ -197,7 +191,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mDumpManager = dumpManager; mKeyguardInteractor = keyguardInteractor; mPowerInteractor = powerInteractor; mKeyguardTransitionInteractor = keyguardTransitionInteractor; } @Override Loading Loading @@ -232,6 +225,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV mDumpManager.registerDumpable(getInstanceName(), this); if (migrateClocksToBlueprint()) { startCoroutines(EmptyCoroutineContext.INSTANCE); mView.setVisibility(View.GONE); } } Loading @@ -247,15 +241,6 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV dozeTimeTick(); } }, context); collectFlow(mView, mKeyguardTransitionInteractor.getGoneToAodTransition(), (TransitionStep step) -> { if (step.getTransitionState() == TransitionState.RUNNING) { mGoneToAodTransitionRunning = true; } else { mGoneToAodTransitionRunning = false; } }, context); } public KeyguardStatusView getView() { Loading Loading @@ -326,7 +311,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV * Set keyguard status view alpha. */ public void setAlpha(float alpha) { if (!mKeyguardVisibilityHelper.isVisibilityAnimating() && !mGoneToAodTransitionRunning) { if (!mKeyguardVisibilityHelper.isVisibilityAnimating()) { mView.setAlpha(alpha); } } Loading