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);
/**
* 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.
*/

View File

@@ -351,6 +351,13 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
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
* hidden.

View File

@@ -322,6 +322,13 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
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.
*/
@@ -350,6 +357,9 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
}
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();
if (splitShadeEnabled) {
// 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);
mKeyguardStatusViewController = statusViewComponent.getKeyguardStatusViewController();
mKeyguardStatusViewController.init();
mKeyguardStatusViewController.setSplitShadeEnabled(mSplitShadeEnabled);
updateClockAppearance();
if (mKeyguardUserSwitcherController != null) {
@@ -1224,6 +1225,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
private void onSplitShadeEnabledChanged() {
mShadeLog.logSplitShadeChanged(mSplitShadeEnabled);
mKeyguardStatusViewController.setSplitShadeEnabled(mSplitShadeEnabled);
// Reset any left over overscroll state. It is a rare corner case but can happen.
mQsController.setOverScrollAmount(0);
mScrimController.setNotificationsOverScrollAmount(0);

View File

@@ -124,6 +124,7 @@ constructor(
private var showSensitiveContentForCurrentUser = false
private var showSensitiveContentForManagedUser = false
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
// how we test color updates when theme changes (See testThemeChangeUpdatesTextColor).
@@ -131,6 +132,7 @@ constructor(
// TODO: Move logic into SmartspaceView
var stateChangeListener = object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) {
(v as SmartspaceView).setSplitShadeEnabled(mSplitShadeEnabled)
smartspaceViews.add(v as SmartspaceView)
connectSession()
@@ -216,6 +218,11 @@ constructor(
execution.assertIsMainThread()
smartspaceViews.forEach { it.setDozeAmount(eased) }
}
override fun onDozingChanged(isDozing: Boolean) {
execution.assertIsMainThread()
smartspaceViews.forEach { it.setDozing(isDozing) }
}
}
private val deviceProvisionedListener =
@@ -421,6 +428,11 @@ constructor(
reloadSmartspace()
}
fun setSplitShadeEnabled(enabled: Boolean) {
mSplitShadeEnabled = enabled
smartspaceViews.forEach { it.setSplitShadeEnabled(enabled) }
}
/**
* Requests the smartspace session for an update.
*/

View File

@@ -408,4 +408,18 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
any(ClockRegistry.ClockChangeListener.class));
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;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
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_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);
}
}