Merge "[Bouncer] Fix translation speed for notifications." into tm-dev

This commit is contained in:
Aaron Liu
2022-04-14 17:37:22 +00:00
committed by Android (Google) Code Review
14 changed files with 59 additions and 34 deletions

View File

@@ -475,7 +475,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
public void onPanelExpansionChanged( public void onPanelExpansionChanged(
float fraction, boolean expanded, boolean tracking) { float fraction, boolean expanded, boolean tracking) {
mPanelExpansionFraction = mPanelExpansionFraction =
mKeyguardViewManager.bouncerIsInTransit() ? BouncerPanelExpansionCalculator mKeyguardViewManager.isBouncerInTransit() ? BouncerPanelExpansionCalculator
.aboutToShowBouncerProgress(fraction) : fraction; .aboutToShowBouncerProgress(fraction) : fraction;
updateAlpha(); updateAlpha();
} }

View File

@@ -612,7 +612,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
} else if (progress > 0 && view.getVisibility() != View.VISIBLE) { } else if (progress > 0 && view.getVisibility() != View.VISIBLE) {
view.setVisibility((View.VISIBLE)); view.setVisibility((View.VISIBLE));
} }
float alpha = mQSPanelController.bouncerInTransit() float alpha = mQSPanelController.isBouncerInTransit()
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(progress) ? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(progress)
: ShadeInterpolation.getContentAlpha(progress); : ShadeInterpolation.getContentAlpha(progress);
view.setAlpha(alpha); view.setAlpha(alpha);

View File

@@ -254,8 +254,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
* *
* @return if bouncer is in transit * @return if bouncer is in transit
*/ */
public boolean bouncerInTransit() { public boolean isBouncerInTransit() {
return mStatusBarKeyguardViewManager.bouncerIsInTransit(); return mStatusBarKeyguardViewManager.isBouncerInTransit();
} }
} }

View File

@@ -31,6 +31,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController; import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider; import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import javax.inject.Inject; import javax.inject.Inject;
@@ -45,6 +46,10 @@ public class AmbientState {
private final SectionProvider mSectionProvider; private final SectionProvider mSectionProvider;
private final BypassController mBypassController; private final BypassController mBypassController;
/**
* Used to read bouncer states.
*/
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private int mScrollY; private int mScrollY;
private boolean mDimmed; private boolean mDimmed;
private ActivatableNotificationView mActivatedChild; private ActivatableNotificationView mActivatedChild;
@@ -204,9 +209,11 @@ public class AmbientState {
public AmbientState( public AmbientState(
Context context, Context context,
@NonNull SectionProvider sectionProvider, @NonNull SectionProvider sectionProvider,
@NonNull BypassController bypassController) { @NonNull BypassController bypassController,
@Nullable StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
mSectionProvider = sectionProvider; mSectionProvider = sectionProvider;
mBypassController = bypassController; mBypassController = bypassController;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
reload(context); reload(context);
} }
@@ -661,4 +668,14 @@ public class AmbientState {
public int getStackTopMargin() { public int getStackTopMargin() {
return mStackTopMargin; return mStackTopMargin;
} }
/**
* Check to see if we are about to show bouncer.
*
* @return if bouncer expansion is between 0 and 1.
*/
public boolean isBouncerInTransit() {
return mStatusBarKeyguardViewManager != null
&& mStatusBarKeyguardViewManager.isBouncerInTransit();
}
} }

View File

@@ -27,6 +27,7 @@ import android.view.ViewGroup;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.android.internal.policy.SystemBarUtils; import com.android.internal.policy.SystemBarUtils;
import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.statusbar.EmptyShadeView; import com.android.systemui.statusbar.EmptyShadeView;
@@ -431,7 +432,9 @@ public class StackScrollAlgorithm {
} else if (ambientState.isExpansionChanging()) { } else if (ambientState.isExpansionChanging()) {
// Adjust alpha for shade open & close. // Adjust alpha for shade open & close.
float expansion = ambientState.getExpansionFraction(); float expansion = ambientState.getExpansionFraction();
viewState.alpha = ShadeInterpolation.getContentAlpha(expansion); viewState.alpha = ambientState.isBouncerInTransit()
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(expansion)
: ShadeInterpolation.getContentAlpha(expansion);
} }
if (ambientState.isShadeExpanded() && view.mustStayOnScreen() if (ambientState.isShadeExpanded() && view.mustStayOnScreen()

View File

@@ -48,7 +48,6 @@ import android.view.animation.Interpolator;
import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.LatencyTracker; import com.android.internal.util.LatencyTracker;
import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.systemui.DejankUtils; import com.android.systemui.DejankUtils;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.animation.Interpolators; import com.android.systemui.animation.Interpolators;
@@ -796,9 +795,7 @@ public abstract class PanelViewController {
} }
mExpandedFraction = Math.min(1f, mExpandedFraction = Math.min(1f,
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight); maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
mAmbientState.setExpansionFraction(mStatusBarKeyguardViewManager.bouncerIsInTransit() mAmbientState.setExpansionFraction(mExpandedFraction);
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(mExpandedFraction)
: mExpandedFraction);
onHeightUpdated(mExpandedHeight); onHeightUpdated(mExpandedHeight);
updatePanelExpansionAndVisibility(); updatePanelExpansionAndVisibility();
}); });

View File

@@ -1074,7 +1074,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
} }
private float getInterpolatedFraction() { private float getInterpolatedFraction() {
if (mStatusBarKeyguardViewManager.bouncerIsInTransit()) { if (mStatusBarKeyguardViewManager.isBouncerInTransit()) {
return BouncerPanelExpansionCalculator return BouncerPanelExpansionCalculator
.aboutToShowBouncerProgress(mPanelExpansionFraction); .aboutToShowBouncerProgress(mPanelExpansionFraction);
} }

View File

@@ -1376,7 +1376,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
/** /**
* Returns if bouncer expansion is between 0 and 1 non-inclusive. * Returns if bouncer expansion is between 0 and 1 non-inclusive.
*/ */
public boolean bouncerIsInTransit() { public boolean isBouncerInTransit() {
if (mBouncer == null) return false; if (mBouncer == null) return false;
return mBouncer.inTransit(); return mBouncer.inTransit();

View File

@@ -190,7 +190,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();
enableSplitShade(); enableSplitShade();
setStatusBarState(StatusBarState.KEYGUARD); setStatusBarState(StatusBarState.KEYGUARD);
when(mQSPanelController.bouncerInTransit()).thenReturn(false); when(mQSPanelController.isBouncerInTransit()).thenReturn(false);
int transitionPxAmount = 123; int transitionPxAmount = 123;
float transitionProgress = 0.5f; float transitionProgress = 0.5f;
@@ -206,7 +206,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
QSFragment fragment = resumeAndGetFragment(); QSFragment fragment = resumeAndGetFragment();
enableSplitShade(); enableSplitShade();
setStatusBarState(StatusBarState.KEYGUARD); setStatusBarState(StatusBarState.KEYGUARD);
when(mQSPanelController.bouncerInTransit()).thenReturn(true); when(mQSPanelController.isBouncerInTransit()).thenReturn(true);
int transitionPxAmount = 123; int transitionPxAmount = 123;
float transitionProgress = 0.5f; float transitionProgress = 0.5f;

View File

@@ -61,7 +61,7 @@ class QSPanelControllerTest : SysuiTestCase() {
whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider) whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController) whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources) whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources)
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false) whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false)
controller = QSPanelController( controller = QSPanelController(
qsPanel, qsPanel,
@@ -109,10 +109,10 @@ class QSPanelControllerTest : SysuiTestCase() {
} }
@Test @Test
fun testBouncerIsInTransit() { fun testIsBouncerInTransit() {
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true) whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true)
assertThat(controller.bouncerInTransit()).isEqualTo(true) assertThat(controller.isBouncerInTransit()).isEqualTo(true)
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false) whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false)
assertThat(controller.bouncerInTransit()).isEqualTo(false) assertThat(controller.isBouncerInTransit()).isEqualTo(false)
} }
} }

View File

@@ -64,6 +64,7 @@ import com.android.systemui.statusbar.notification.row.FooterView;
import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
import org.junit.Assert; import org.junit.Assert;
@@ -104,6 +105,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
@Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; @Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
@Mock private NotificationShelf mNotificationShelf; @Mock private NotificationShelf mNotificationShelf;
@Mock private NotificationStackSizeCalculator mNotificationStackSizeCalculator; @Mock private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@Before @Before
@UiThreadTest @UiThreadTest
@@ -111,7 +113,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
allowTestableLooperAsMainThread(); allowTestableLooperAsMainThread();
// Interact with real instance of AmbientState. // Interact with real instance of AmbientState.
mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController); mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController,
mStatusBarKeyguardViewManager);
// Inject dependencies before initializing the layout // Inject dependencies before initializing the layout
mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState); mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState);

View File

@@ -8,6 +8,7 @@ import com.android.systemui.statusbar.EmptyShadeView
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@@ -21,10 +22,14 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
private val stackScrollAlgorithm = StackScrollAlgorithm(context, hostView) private val stackScrollAlgorithm = StackScrollAlgorithm(context, hostView)
private val expandableViewState = ExpandableViewState() private val expandableViewState = ExpandableViewState()
private val notificationRow = mock(ExpandableNotificationRow::class.java) private val notificationRow = mock(ExpandableNotificationRow::class.java)
private val mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager::class.java)
private val ambientState = AmbientState( private val ambientState = AmbientState(
context, context,
SectionProvider { _, _ -> false }, SectionProvider { _, _ -> false },
BypassController { false }) BypassController { false },
mStatusBarKeyguardViewManager
)
@Before @Before
fun setUp() { fun setUp() {

View File

@@ -1238,7 +1238,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() { public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
mScrimController.transitionTo(ScrimState.SHADE_LOCKED); mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
@@ -1254,7 +1254,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() { public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
mScrimController.transitionTo(ScrimState.SHADE_LOCKED); mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
@@ -1269,7 +1269,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void notificationAlpha_unnocclusionAnimating_bouncerActive_usesKeyguardNotifAlpha() { public void notificationAlpha_unnocclusionAnimating_bouncerActive_usesKeyguardNotifAlpha() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.transitionTo(ScrimState.KEYGUARD);
mScrimController.setUnocclusionAnimationRunning(true); mScrimController.setUnocclusionAnimationRunning(true);
@@ -1290,7 +1290,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() { public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.transitionTo(ScrimState.KEYGUARD);
mScrimController.setUnocclusionAnimationRunning(true); mScrimController.setUnocclusionAnimationRunning(true);
@@ -1311,7 +1311,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void notificationAlpha_inKeyguardState_bouncerActive_usesInvertedBouncerInterpolator() { public void notificationAlpha_inKeyguardState_bouncerActive_usesInvertedBouncerInterpolator() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.transitionTo(ScrimState.KEYGUARD);
@@ -1330,7 +1330,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test @Test
public void notificationAlpha_inKeyguardState_bouncerNotActive_usesInvertedShadeInterpolator() { public void notificationAlpha_inKeyguardState_bouncerNotActive_usesInvertedShadeInterpolator() {
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false); when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.transitionTo(ScrimState.KEYGUARD);

View File

@@ -438,12 +438,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
} }
@Test @Test
public void testBouncerIsInTransit() { public void testIsBouncerInTransit() {
when(mBouncer.inTransit()).thenReturn(true); when(mBouncer.inTransit()).thenReturn(true);
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isTrue(); Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isTrue();
when(mBouncer.inTransit()).thenReturn(false); when(mBouncer.inTransit()).thenReturn(false);
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse(); Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse();
mBouncer = null; mBouncer = null;
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse(); Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse();
} }
} }