Merge "Improve transition between AOD and lockscreen when media is playing for split shade" into udc-dev

This commit is contained in:
Kateryna Ivanova
2023-06-29 18:04:30 +00:00
committed by Android (Google) Code Review
7 changed files with 70 additions and 0 deletions

View File

@@ -127,6 +127,16 @@ public interface BcSmartspaceDataPlugin extends Plugin {
*/ */
void setDozeAmount(float amount); void setDozeAmount(float amount);
/**
* Set if dozing is true or false
*/
default void setDozing(boolean dozing) {}
/**
* Set if split shade enabled
*/
default void setSplitShadeEnabled(boolean enabled) {}
/** /**
* Set the current keyguard bypass enabled status. * Set the current keyguard bypass enabled status.
*/ */

View File

@@ -351,6 +351,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
mView.setSplitShadeCentered(splitShadeCentered); mView.setSplitShadeCentered(splitShadeCentered);
} }
/**
* Set if the split shade is enabled
*/
public void setSplitShadeEnabled(boolean splitShadeEnabled) {
mSmartspaceController.setSplitShadeEnabled(splitShadeEnabled);
}
/** /**
* Set which clock should be displayed on the keyguard. The other one will be automatically * Set which clock should be displayed on the keyguard. The other one will be automatically
* hidden. * hidden.

View File

@@ -322,6 +322,13 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
return clock != null && clock.getLargeClock().getConfig().getHasCustomWeatherDataDisplay(); return clock != null && clock.getLargeClock().getConfig().getHasCustomWeatherDataDisplay();
} }
/**
* Set if the split shade is enabled
*/
public void setSplitShadeEnabled(boolean enabled) {
mKeyguardClockSwitchController.setSplitShadeEnabled(enabled);
}
/** /**
* Updates the alignment of the KeyguardStatusView and animates the transition if requested. * Updates the alignment of the KeyguardStatusView and animates the transition if requested.
*/ */
@@ -350,6 +357,9 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
} }
mInteractionJankMonitor.begin(mView, CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION); mInteractionJankMonitor.begin(mView, CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION);
/* This transition blocks any layout changes while running. For that reason
* special logic with setting visibility was added to {@link BcSmartspaceView#setDozing}
* for split shade to avoid jump of the media object. */
ChangeBounds transition = new ChangeBounds(); ChangeBounds transition = new ChangeBounds();
if (splitShadeEnabled) { if (splitShadeEnabled) {
// Excluding media from the transition on split-shade, as it doesn't transition // Excluding media from the transition on split-shade, as it doesn't transition

View File

@@ -1172,6 +1172,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
mKeyguardStatusViewComponentFactory.build(keyguardStatusView); mKeyguardStatusViewComponentFactory.build(keyguardStatusView);
mKeyguardStatusViewController = statusViewComponent.getKeyguardStatusViewController(); mKeyguardStatusViewController = statusViewComponent.getKeyguardStatusViewController();
mKeyguardStatusViewController.init(); mKeyguardStatusViewController.init();
mKeyguardStatusViewController.setSplitShadeEnabled(mSplitShadeEnabled);
updateClockAppearance(); updateClockAppearance();
if (mKeyguardUserSwitcherController != null) { if (mKeyguardUserSwitcherController != null) {
@@ -1224,6 +1225,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
private void onSplitShadeEnabledChanged() { private void onSplitShadeEnabledChanged() {
mShadeLog.logSplitShadeChanged(mSplitShadeEnabled); mShadeLog.logSplitShadeChanged(mSplitShadeEnabled);
mKeyguardStatusViewController.setSplitShadeEnabled(mSplitShadeEnabled);
// Reset any left over overscroll state. It is a rare corner case but can happen. // Reset any left over overscroll state. It is a rare corner case but can happen.
mQsController.setOverScrollAmount(0); mQsController.setOverScrollAmount(0);
mScrimController.setNotificationsOverScrollAmount(0); mScrimController.setNotificationsOverScrollAmount(0);

View File

@@ -124,6 +124,7 @@ constructor(
private var showSensitiveContentForCurrentUser = false private var showSensitiveContentForCurrentUser = false
private var showSensitiveContentForManagedUser = false private var showSensitiveContentForManagedUser = false
private var managedUserHandle: UserHandle? = null private var managedUserHandle: UserHandle? = null
private var mSplitShadeEnabled = false
// TODO(b/202758428): refactor so that we can test color updates via region samping, similar to // TODO(b/202758428): refactor so that we can test color updates via region samping, similar to
// how we test color updates when theme changes (See testThemeChangeUpdatesTextColor). // how we test color updates when theme changes (See testThemeChangeUpdatesTextColor).
@@ -131,6 +132,7 @@ constructor(
// TODO: Move logic into SmartspaceView // TODO: Move logic into SmartspaceView
var stateChangeListener = object : View.OnAttachStateChangeListener { var stateChangeListener = object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) { override fun onViewAttachedToWindow(v: View) {
(v as SmartspaceView).setSplitShadeEnabled(mSplitShadeEnabled)
smartspaceViews.add(v as SmartspaceView) smartspaceViews.add(v as SmartspaceView)
connectSession() connectSession()
@@ -216,6 +218,11 @@ constructor(
execution.assertIsMainThread() execution.assertIsMainThread()
smartspaceViews.forEach { it.setDozeAmount(eased) } smartspaceViews.forEach { it.setDozeAmount(eased) }
} }
override fun onDozingChanged(isDozing: Boolean) {
execution.assertIsMainThread()
smartspaceViews.forEach { it.setDozing(isDozing) }
}
} }
private val deviceProvisionedListener = private val deviceProvisionedListener =
@@ -421,6 +428,11 @@ constructor(
reloadSmartspace() reloadSmartspace()
} }
fun setSplitShadeEnabled(enabled: Boolean) {
mSplitShadeEnabled = enabled
smartspaceViews.forEach { it.setSplitShadeEnabled(enabled) }
}
/** /**
* Requests the smartspace session for an update. * Requests the smartspace session for an update.
*/ */

View File

@@ -408,4 +408,18 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
any(ClockRegistry.ClockChangeListener.class)); any(ClockRegistry.ClockChangeListener.class));
verify(mClockEventController, times).registerListeners(mView); verify(mClockEventController, times).registerListeners(mView);
} }
@Test
public void testSplitShadeEnabledSetToSmartspaceController() {
mController.setSplitShadeEnabled(true);
verify(mSmartspaceController, times(1)).setSplitShadeEnabled(true);
verify(mSmartspaceController, times(0)).setSplitShadeEnabled(false);
}
@Test
public void testSplitShadeDisabledSetToSmartspaceController() {
mController.setSplitShadeEnabled(false);
verify(mSmartspaceController, times(1)).setSplitShadeEnabled(false);
verify(mSmartspaceController, times(0)).setSplitShadeEnabled(true);
}
} }

View File

@@ -17,6 +17,7 @@
package com.android.keyguard; package com.android.keyguard;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -155,4 +156,18 @@ public class KeyguardStatusViewControllerTest extends SysuiTestCase {
verify(mControllerMock).setProperty(AnimatableProperty.SCALE_X, 20f, true); verify(mControllerMock).setProperty(AnimatableProperty.SCALE_X, 20f, true);
verify(mControllerMock).setProperty(AnimatableProperty.SCALE_Y, 20f, true); verify(mControllerMock).setProperty(AnimatableProperty.SCALE_Y, 20f, true);
} }
@Test
public void splitShadeEnabledPassedToClockSwitchController() {
mController.setSplitShadeEnabled(true);
verify(mKeyguardClockSwitchController, times(1)).setSplitShadeEnabled(true);
verify(mKeyguardClockSwitchController, times(0)).setSplitShadeEnabled(false);
}
@Test
public void splitShadeDisabledPassedToClockSwitchController() {
mController.setSplitShadeEnabled(false);
verify(mKeyguardClockSwitchController, times(1)).setSplitShadeEnabled(false);
verify(mKeyguardClockSwitchController, times(0)).setSplitShadeEnabled(true);
}
} }