Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +4 −0 Original line number Diff line number Diff line Loading @@ -184,6 +184,10 @@ public class KeyguardClockSwitch extends RelativeLayout { } } public boolean getSplitShadeCentered() { return mSplitShadeCentered; } @Override protected void onFinishInflate() { super.onFinishInflate(); Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +4 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,10 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } } public KeyguardClockSwitch getView() { return mView; } private void hideSliceViewAndNotificationIconContainer() { View ksv = mView.findViewById(R.id.keyguard_slice_view); ksv.setVisibility(View.GONE); Loading packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.keyguard; import static java.util.Collections.emptySet; import android.animation.LayoutTransition; import android.content.Context; import android.graphics.Canvas; import android.os.Build; Loading Loading @@ -78,6 +79,14 @@ public class KeyguardStatusView extends GridLayout { mKeyguardSlice = findViewById(R.id.keyguard_slice_view); mMediaHostContainer = findViewById(R.id.status_view_media_container); if (mMediaHostContainer != null) { LayoutTransition mediaLayoutTransition = new LayoutTransition(); ((ViewGroup) mMediaHostContainer).setLayoutTransition(mediaLayoutTransition); mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_APPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.APPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.DISAPPEARING); } updateDark(); } Loading packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +45 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_CL import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import android.animation.Animator; import android.animation.LayoutTransition; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.content.res.Configuration; Loading Loading @@ -101,6 +102,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private final Rect mClipBounds = new Rect(); private final KeyguardInteractor mKeyguardInteractor; private Boolean mSplitShadeEnabled = false; private Boolean mStatusViewCentered = true; private DumpManager mDumpManager; Loading Loading @@ -150,6 +152,48 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV @Override public void onInit() { mKeyguardClockSwitchController.init(); final View mediaHostContainer = mView.findViewById(R.id.status_view_media_container); if (mediaHostContainer != null) { mKeyguardClockSwitchController.getView().addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { if (!mSplitShadeEnabled || mKeyguardClockSwitchController.getView().getSplitShadeCentered() // Note: isKeyguardVisible() returns false after Launcher -> AOD. || !mKeyguardUpdateMonitor.isKeyguardVisible()) { return; } int oldHeight = oldBottom - oldTop; if (v.getHeight() == oldHeight) return; if (mediaHostContainer.getVisibility() != View.VISIBLE // If the media is appearing, also don't do the transition. || mediaHostContainer.getHeight() == 0) { return; } final LayoutTransition mediaLayoutTransition = ((ViewGroup) mediaHostContainer).getLayoutTransition(); if (mediaLayoutTransition == null) return; mediaLayoutTransition.enableTransitionType(LayoutTransition.CHANGING); }); mediaHostContainer.addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { final LayoutTransition mediaLayoutTransition = ((ViewGroup) mediaHostContainer).getLayoutTransition(); if (mediaLayoutTransition == null) return; if (!mediaLayoutTransition.isTransitionTypeEnabled( LayoutTransition.CHANGING)) { return; } // Note: when this is called, the LayoutTransition is already been set up. // Disables the LayoutTransition until it's explicitly enabled again. mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGING); } ); } mDumpManager.registerDumpable(getInstanceName(), this); if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { Loading Loading @@ -385,6 +429,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV */ public void setSplitShadeEnabled(boolean enabled) { mKeyguardClockSwitchController.setSplitShadeEnabled(enabled); mSplitShadeEnabled = enabled; } /** Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerBaseTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -20,8 +20,10 @@ import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.animation.LayoutTransition; import android.view.View; import android.view.ViewTreeObserver; import android.widget.FrameLayout; import com.android.internal.jank.InteractionJankMonitor; import com.android.keyguard.logging.KeyguardLogger; Loading @@ -44,6 +46,7 @@ import org.mockito.MockitoAnnotations; public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { @Mock protected KeyguardStatusView mKeyguardStatusView; @Mock protected KeyguardSliceViewController mKeyguardSliceViewController; @Mock protected KeyguardClockSwitchController mKeyguardClockSwitchController; @Mock protected KeyguardStateController mKeyguardStateController; Loading @@ -61,6 +64,10 @@ public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { protected KeyguardStatusViewController mController; @Mock protected KeyguardClockSwitch mKeyguardClockSwitch; @Mock protected FrameLayout mMediaHostContainer; @Mock protected LayoutTransition mMediaLayoutTransition; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -93,6 +100,8 @@ public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { }; when(mKeyguardStatusView.getViewTreeObserver()).thenReturn(mViewTreeObserver); when(mKeyguardClockSwitchController.getView()).thenReturn(mKeyguardClockSwitch); } protected void givenViewAttached() { Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +4 −0 Original line number Diff line number Diff line Loading @@ -184,6 +184,10 @@ public class KeyguardClockSwitch extends RelativeLayout { } } public boolean getSplitShadeCentered() { return mSplitShadeCentered; } @Override protected void onFinishInflate() { super.onFinishInflate(); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +4 −0 Original line number Diff line number Diff line Loading @@ -234,6 +234,10 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } } public KeyguardClockSwitch getView() { return mView; } private void hideSliceViewAndNotificationIconContainer() { View ksv = mView.findViewById(R.id.keyguard_slice_view); ksv.setVisibility(View.GONE); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.keyguard; import static java.util.Collections.emptySet; import android.animation.LayoutTransition; import android.content.Context; import android.graphics.Canvas; import android.os.Build; Loading Loading @@ -78,6 +79,14 @@ public class KeyguardStatusView extends GridLayout { mKeyguardSlice = findViewById(R.id.keyguard_slice_view); mMediaHostContainer = findViewById(R.id.status_view_media_container); if (mMediaHostContainer != null) { LayoutTransition mediaLayoutTransition = new LayoutTransition(); ((ViewGroup) mMediaHostContainer).setLayoutTransition(mediaLayoutTransition); mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_APPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.APPEARING); mediaLayoutTransition.disableTransitionType(LayoutTransition.DISAPPEARING); } updateDark(); } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +45 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_CL import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import android.animation.Animator; import android.animation.LayoutTransition; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.content.res.Configuration; Loading Loading @@ -101,6 +102,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV private final Rect mClipBounds = new Rect(); private final KeyguardInteractor mKeyguardInteractor; private Boolean mSplitShadeEnabled = false; private Boolean mStatusViewCentered = true; private DumpManager mDumpManager; Loading Loading @@ -150,6 +152,48 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV @Override public void onInit() { mKeyguardClockSwitchController.init(); final View mediaHostContainer = mView.findViewById(R.id.status_view_media_container); if (mediaHostContainer != null) { mKeyguardClockSwitchController.getView().addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { if (!mSplitShadeEnabled || mKeyguardClockSwitchController.getView().getSplitShadeCentered() // Note: isKeyguardVisible() returns false after Launcher -> AOD. || !mKeyguardUpdateMonitor.isKeyguardVisible()) { return; } int oldHeight = oldBottom - oldTop; if (v.getHeight() == oldHeight) return; if (mediaHostContainer.getVisibility() != View.VISIBLE // If the media is appearing, also don't do the transition. || mediaHostContainer.getHeight() == 0) { return; } final LayoutTransition mediaLayoutTransition = ((ViewGroup) mediaHostContainer).getLayoutTransition(); if (mediaLayoutTransition == null) return; mediaLayoutTransition.enableTransitionType(LayoutTransition.CHANGING); }); mediaHostContainer.addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { final LayoutTransition mediaLayoutTransition = ((ViewGroup) mediaHostContainer).getLayoutTransition(); if (mediaLayoutTransition == null) return; if (!mediaLayoutTransition.isTransitionTypeEnabled( LayoutTransition.CHANGING)) { return; } // Note: when this is called, the LayoutTransition is already been set up. // Disables the LayoutTransition until it's explicitly enabled again. mediaLayoutTransition.disableTransitionType(LayoutTransition.CHANGING); } ); } mDumpManager.registerDumpable(getInstanceName(), this); if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { Loading Loading @@ -385,6 +429,7 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV */ public void setSplitShadeEnabled(boolean enabled) { mKeyguardClockSwitchController.setSplitShadeEnabled(enabled); mSplitShadeEnabled = enabled; } /** Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerBaseTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -20,8 +20,10 @@ import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.animation.LayoutTransition; import android.view.View; import android.view.ViewTreeObserver; import android.widget.FrameLayout; import com.android.internal.jank.InteractionJankMonitor; import com.android.keyguard.logging.KeyguardLogger; Loading @@ -44,6 +46,7 @@ import org.mockito.MockitoAnnotations; public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { @Mock protected KeyguardStatusView mKeyguardStatusView; @Mock protected KeyguardSliceViewController mKeyguardSliceViewController; @Mock protected KeyguardClockSwitchController mKeyguardClockSwitchController; @Mock protected KeyguardStateController mKeyguardStateController; Loading @@ -61,6 +64,10 @@ public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { protected KeyguardStatusViewController mController; @Mock protected KeyguardClockSwitch mKeyguardClockSwitch; @Mock protected FrameLayout mMediaHostContainer; @Mock protected LayoutTransition mMediaLayoutTransition; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -93,6 +100,8 @@ public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { }; when(mKeyguardStatusView.getViewTreeObserver()).thenReturn(mViewTreeObserver); when(mKeyguardClockSwitchController.getView()).thenReturn(mKeyguardClockSwitch); } protected void givenViewAttached() { Loading