[Bouncer] Fix translation speed for notifications.
Read bouncer state in order to determine when to use bouncer interpolation for alpha. Also rename boolean to be prefixed with is. Bug: 228831465 Test: Manual and unit tests Change-Id: I6f872db0655d04efae926fdd04e82a4aa460a408
This commit is contained in:
@@ -475,7 +475,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
||||
public void onPanelExpansionChanged(
|
||||
float fraction, boolean expanded, boolean tracking) {
|
||||
mPanelExpansionFraction =
|
||||
mKeyguardViewManager.bouncerIsInTransit() ? BouncerPanelExpansionCalculator
|
||||
mKeyguardViewManager.isBouncerInTransit() ? BouncerPanelExpansionCalculator
|
||||
.aboutToShowBouncerProgress(fraction) : fraction;
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@@ -609,7 +609,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
} else if (progress > 0 && view.getVisibility() != View.VISIBLE) {
|
||||
view.setVisibility((View.VISIBLE));
|
||||
}
|
||||
float alpha = mQSPanelController.bouncerInTransit()
|
||||
float alpha = mQSPanelController.isBouncerInTransit()
|
||||
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(progress)
|
||||
: ShadeInterpolation.getContentAlpha(progress);
|
||||
view.setAlpha(alpha);
|
||||
|
||||
@@ -254,8 +254,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
||||
*
|
||||
* @return if bouncer is in transit
|
||||
*/
|
||||
public boolean bouncerInTransit() {
|
||||
return mStatusBarKeyguardViewManager.bouncerIsInTransit();
|
||||
public boolean isBouncerInTransit() {
|
||||
return mStatusBarKeyguardViewManager.isBouncerInTransit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.stack.StackScrollAlgorithm.BypassController;
|
||||
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -45,6 +46,10 @@ public class AmbientState {
|
||||
|
||||
private final SectionProvider mSectionProvider;
|
||||
private final BypassController mBypassController;
|
||||
/**
|
||||
* Used to read bouncer states.
|
||||
*/
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private int mScrollY;
|
||||
private boolean mDimmed;
|
||||
private ActivatableNotificationView mActivatedChild;
|
||||
@@ -204,9 +209,11 @@ public class AmbientState {
|
||||
public AmbientState(
|
||||
Context context,
|
||||
@NonNull SectionProvider sectionProvider,
|
||||
@NonNull BypassController bypassController) {
|
||||
@NonNull BypassController bypassController,
|
||||
@Nullable StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
mSectionProvider = sectionProvider;
|
||||
mBypassController = bypassController;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
reload(context);
|
||||
}
|
||||
|
||||
@@ -661,4 +668,14 @@ public class AmbientState {
|
||||
public int getStackTopMargin() {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.view.ViewGroup;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.policy.SystemBarUtils;
|
||||
import com.android.keyguard.BouncerPanelExpansionCalculator;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.statusbar.EmptyShadeView;
|
||||
@@ -431,7 +432,9 @@ public class StackScrollAlgorithm {
|
||||
} else if (ambientState.isExpansionChanging()) {
|
||||
// Adjust alpha for shade open & close.
|
||||
float expansion = ambientState.getExpansionFraction();
|
||||
viewState.alpha = ShadeInterpolation.getContentAlpha(expansion);
|
||||
viewState.alpha = ambientState.isBouncerInTransit()
|
||||
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(expansion)
|
||||
: ShadeInterpolation.getContentAlpha(expansion);
|
||||
}
|
||||
|
||||
if (ambientState.isShadeExpanded() && view.mustStayOnScreen()
|
||||
|
||||
@@ -48,7 +48,6 @@ import android.view.animation.Interpolator;
|
||||
import com.android.internal.jank.InteractionJankMonitor;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.keyguard.BouncerPanelExpansionCalculator;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
@@ -796,9 +795,7 @@ public abstract class PanelViewController {
|
||||
}
|
||||
mExpandedFraction = Math.min(1f,
|
||||
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
|
||||
mAmbientState.setExpansionFraction(mStatusBarKeyguardViewManager.bouncerIsInTransit()
|
||||
? BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(mExpandedFraction)
|
||||
: mExpandedFraction);
|
||||
mAmbientState.setExpansionFraction(mExpandedFraction);
|
||||
onHeightUpdated(mExpandedHeight);
|
||||
updatePanelExpansionAndVisibility();
|
||||
});
|
||||
|
||||
@@ -1074,7 +1074,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
}
|
||||
|
||||
private float getInterpolatedFraction() {
|
||||
if (mStatusBarKeyguardViewManager.bouncerIsInTransit()) {
|
||||
if (mStatusBarKeyguardViewManager.isBouncerInTransit()) {
|
||||
return BouncerPanelExpansionCalculator
|
||||
.aboutToShowBouncerProgress(mPanelExpansionFraction);
|
||||
}
|
||||
|
||||
@@ -1378,7 +1378,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
/**
|
||||
* Returns if bouncer expansion is between 0 and 1 non-inclusive.
|
||||
*/
|
||||
public boolean bouncerIsInTransit() {
|
||||
public boolean isBouncerInTransit() {
|
||||
if (mBouncer == null) return false;
|
||||
|
||||
return mBouncer.inTransit();
|
||||
|
||||
@@ -190,7 +190,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
QSFragment fragment = resumeAndGetFragment();
|
||||
enableSplitShade();
|
||||
setStatusBarState(StatusBarState.KEYGUARD);
|
||||
when(mQSPanelController.bouncerInTransit()).thenReturn(false);
|
||||
when(mQSPanelController.isBouncerInTransit()).thenReturn(false);
|
||||
int transitionPxAmount = 123;
|
||||
float transitionProgress = 0.5f;
|
||||
|
||||
@@ -206,7 +206,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
QSFragment fragment = resumeAndGetFragment();
|
||||
enableSplitShade();
|
||||
setStatusBarState(StatusBarState.KEYGUARD);
|
||||
when(mQSPanelController.bouncerInTransit()).thenReturn(true);
|
||||
when(mQSPanelController.isBouncerInTransit()).thenReturn(true);
|
||||
int transitionPxAmount = 123;
|
||||
float transitionProgress = 0.5f;
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ class QSPanelControllerTest : SysuiTestCase() {
|
||||
whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
|
||||
whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
|
||||
whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources)
|
||||
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false)
|
||||
whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false)
|
||||
|
||||
controller = QSPanelController(
|
||||
qsPanel,
|
||||
@@ -109,10 +109,10 @@ class QSPanelControllerTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBouncerIsInTransit() {
|
||||
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true)
|
||||
assertThat(controller.bouncerInTransit()).isEqualTo(true)
|
||||
whenever(statusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false)
|
||||
assertThat(controller.bouncerInTransit()).isEqualTo(false)
|
||||
fun testIsBouncerInTransit() {
|
||||
whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true)
|
||||
assertThat(controller.isBouncerInTransit()).isEqualTo(true)
|
||||
whenever(statusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false)
|
||||
assertThat(controller.isBouncerInTransit()).isEqualTo(false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
|
||||
import org.junit.Assert;
|
||||
@@ -104,6 +105,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
||||
@Mock private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||
@Mock private NotificationShelf mNotificationShelf;
|
||||
@Mock private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
|
||||
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
|
||||
@Before
|
||||
@UiThreadTest
|
||||
@@ -111,7 +113,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
||||
allowTestableLooperAsMainThread();
|
||||
|
||||
// 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
|
||||
mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState);
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.android.systemui.statusbar.EmptyShadeView
|
||||
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.SectionProvider
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
@@ -21,10 +22,14 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
|
||||
private val stackScrollAlgorithm = StackScrollAlgorithm(context, hostView)
|
||||
private val expandableViewState = ExpandableViewState()
|
||||
private val notificationRow = mock(ExpandableNotificationRow::class.java)
|
||||
private val mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager::class.java)
|
||||
|
||||
private val ambientState = AmbientState(
|
||||
context,
|
||||
SectionProvider { _, _ -> false },
|
||||
BypassController { false })
|
||||
context,
|
||||
SectionProvider { _, _ -> false },
|
||||
BypassController { false },
|
||||
mStatusBarKeyguardViewManager
|
||||
)
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
|
||||
@@ -1238,7 +1238,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||
|
||||
@@ -1254,7 +1254,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||
|
||||
@@ -1269,7 +1269,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void notificationAlpha_unnocclusionAnimating_bouncerActive_usesKeyguardNotifAlpha() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
mScrimController.setUnocclusionAnimationRunning(true);
|
||||
@@ -1290,7 +1290,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
mScrimController.setUnocclusionAnimationRunning(true);
|
||||
@@ -1311,7 +1311,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void notificationAlpha_inKeyguardState_bouncerActive_usesInvertedBouncerInterpolator() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(true);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(true);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
|
||||
@@ -1330,7 +1330,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void notificationAlpha_inKeyguardState_bouncerNotActive_usesInvertedShadeInterpolator() {
|
||||
when(mStatusBarKeyguardViewManager.bouncerIsInTransit()).thenReturn(false);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerInTransit()).thenReturn(false);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
|
||||
|
||||
@@ -438,12 +438,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBouncerIsInTransit() {
|
||||
public void testIsBouncerInTransit() {
|
||||
when(mBouncer.inTransit()).thenReturn(true);
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isTrue();
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isTrue();
|
||||
when(mBouncer.inTransit()).thenReturn(false);
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse();
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse();
|
||||
mBouncer = null;
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.bouncerIsInTransit()).isFalse();
|
||||
Truth.assertThat(mStatusBarKeyguardViewManager.isBouncerInTransit()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user