Loading core/java/android/app/ActivityOptions.java +5 −0 Original line number Diff line number Diff line Loading @@ -1441,6 +1441,11 @@ public class ActivityOptions extends ComponentOptions { return mRemoteTransition; } /** @hide */ public void setRemoteTransition(@Nullable RemoteTransition remoteTransition) { mRemoteTransition = remoteTransition; } /** @hide */ public static ActivityOptions fromBundle(Bundle bOptions) { return bOptions != null ? new ActivityOptions(bOptions) : null; Loading core/proto/android/server/windowmanagerservice.proto +2 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ message KeyguardControllerProto { repeated KeyguardOccludedProto keyguard_occluded_states = 2 [deprecated=true]; optional bool aod_showing = 3; repeated KeyguardPerDisplayProto keyguard_per_display = 4; optional bool keyguard_going_away = 5; } message KeyguardOccludedProto { Loading @@ -132,6 +133,7 @@ message KeyguardPerDisplayProto { optional bool keyguard_showing = 2; optional bool aod_showing = 3; optional bool keyguard_occluded = 4; optional bool keyguard_going_away = 5; } /* represents PhoneWindowManager */ Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -1312,6 +1312,7 @@ public class NotificationChildrenContainer extends ViewGroup } float bottomRoundness = last ? currentBottomRoundness : 0.0f; child.setBottomRoundness(bottomRoundness, isShown() /* animate */); child.setTopRoundness(0.0f, false /* animate */); last = false; } } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); } } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +100 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -139,6 +146,98 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); } @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(); Loading Loading
core/java/android/app/ActivityOptions.java +5 −0 Original line number Diff line number Diff line Loading @@ -1441,6 +1441,11 @@ public class ActivityOptions extends ComponentOptions { return mRemoteTransition; } /** @hide */ public void setRemoteTransition(@Nullable RemoteTransition remoteTransition) { mRemoteTransition = remoteTransition; } /** @hide */ public static ActivityOptions fromBundle(Bundle bOptions) { return bOptions != null ? new ActivityOptions(bOptions) : null; Loading
core/proto/android/server/windowmanagerservice.proto +2 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ message KeyguardControllerProto { repeated KeyguardOccludedProto keyguard_occluded_states = 2 [deprecated=true]; optional bool aod_showing = 3; repeated KeyguardPerDisplayProto keyguard_per_display = 4; optional bool keyguard_going_away = 5; } message KeyguardOccludedProto { Loading @@ -132,6 +133,7 @@ message KeyguardPerDisplayProto { optional bool keyguard_showing = 2; optional bool aod_showing = 3; optional bool keyguard_occluded = 4; optional bool keyguard_going_away = 5; } /* represents PhoneWindowManager */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -1312,6 +1312,7 @@ public class NotificationChildrenContainer extends ViewGroup } float bottomRoundness = last ? currentBottomRoundness : 0.0f; child.setBottomRoundness(bottomRoundness, isShown() /* animate */); child.setTopRoundness(0.0f, false /* animate */); last = false; } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); } } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +100 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -139,6 +146,98 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); } @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(); Loading