diff options
| author | 2022-08-03 17:51:25 +0000 | |
|---|---|---|
| committer | 2022-08-03 17:51:25 +0000 | |
| commit | 2400a36cbe97de4fd2538e9fc6790da0243c3a00 (patch) | |
| tree | a9bdd9727f041554806ec355fd5cbcd9f5c253a1 | |
| parent | f0243591ecde603d7232f29bfdf9ce6cde13fac3 (diff) | |
| parent | 6b3f5537dc5244604233d2f536d0874c38787f56 (diff) | |
Merge "Allow system info to be set visible even if we don't animate" into tm-d1-dev am: 6b3f5537dc
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19498372
Change-Id: I57de9daccba86c9f0e7ab0d108953dde49fafd1d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2 files changed, 104 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 597c949168d4..cf1edf9094df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -483,6 +483,10 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue int state = mAnimationScheduler.getAnimationState(); if (state == IDLE || state == SHOWING_PERSISTENT_DOT) { animateShow(mSystemIconArea, animate); + } else { + // We are in the middle of a system status event animation, which will animate the + // alpha (but not the visibility). Allow the view to become visible again + mSystemIconArea.setVisibility(View.VISIBLE); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index 6abc687f0ebb..034e06d7e8c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -16,6 +16,11 @@ package com.android.systemui.statusbar.phone.fragment; import static android.view.Display.DEFAULT_DISPLAY; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_IN; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_OUT; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.IDLE; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.RUNNING_CHIP_ANIM; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -25,6 +30,7 @@ import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.animation.Animator; import android.app.Fragment; import android.app.StatusBarManager; import android.content.Context; @@ -127,7 +133,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { } @Test - public void testDisableSystemInfo() { + public void testDisableSystemInfo_systemAnimationIdle_doesHide() { + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); CollapsedStatusBarFragment fragment = resumeAndGetFragment(); fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); @@ -140,6 +147,98 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { } @Test + public void testSystemStatusAnimation_startedDisabled_finishedWithAnimator_showsSystemInfo() { + // GIVEN the status bar hides the system info via disable flags, while there is no event + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); + fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + + // WHEN the disable flags are cleared during a system event animation + when(mAnimationScheduler.getAnimationState()).thenReturn(RUNNING_CHIP_ANIM); + fragment.disable(DEFAULT_DISPLAY, 0, 0, false); + + // THEN the view is made visible again, but still low alpha + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + Animator anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is full alpha + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test + public void testSystemStatusAnimation_systemInfoDisabled_staysInvisible() { + // GIVEN the status bar hides the system info via disable flags, while there is no event + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); + fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + Animator anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is at full alpha, but still INVISIBLE (since the disable flag is + // still set) + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + } + + + @Test + public void testSystemStatusAnimation_notDisabled_animatesAlphaZero() { + // GIVEN the status bar is not disabled + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_IN); + // WHEN the system event animation begins + Animator anim = fragment.onSystemEventAnimationBegin(); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is visible but alpha 0 + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test + public void testSystemStatusAnimation_notDisabled_animatesBackToAlphaOne() { + // GIVEN the status bar is not disabled + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_IN); + // WHEN the system event animation begins + Animator anim = fragment.onSystemEventAnimationBegin(); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is visible but alpha 0 + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the syste info is full alpha and VISIBLE + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test public void testDisableNotifications() { CollapsedStatusBarFragment fragment = resumeAndGetFragment(); |