summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
index 6854c97c3415..028888572995 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
@@ -40,6 +40,7 @@ import android.widget.FrameLayout;
import androidx.annotation.VisibleForTesting;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
+import androidx.viewpager.widget.ViewPager;
import com.android.app.animation.Interpolators;
import com.android.internal.jank.InteractionJankMonitor;
@@ -365,6 +366,19 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
// Excluding media from the transition on split-shade, as it doesn't transition
// horizontally properly.
transition.excludeTarget(R.id.status_view_media_container, true);
+
+ // Exclude smartspace viewpager and its children from the transition.
+ // - Each step of the transition causes the ViewPager to invoke resize,
+ // which invokes scrolling to the recalculated position. The scrolling
+ // actions are congested, resulting in kinky translation, and
+ // delay in settling to the final position. (http://b/281620564#comment1)
+ // - Also, the scrolling is unnecessary in the transition. We just want
+ // the viewpager to stay on the same page.
+ // - Exclude by Class type instead of resource id, since the resource id
+ // isn't available for all devices, and probably better to exclude all
+ // ViewPagers any way.
+ transition.excludeTarget(ViewPager.class, true);
+ transition.excludeChildren(ViewPager.class, true);
}
transition.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
@@ -397,6 +411,24 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
adapter.setDuration(KEYGUARD_STATUS_VIEW_CUSTOM_CLOCK_MOVE_DURATION);
adapter.addTarget(clockView);
set.addTransition(adapter);
+
+ if (splitShadeEnabled) {
+ // Exclude smartspace viewpager and its children from the transition set.
+ // - This is necessary in addition to excluding them from the
+ // ChangeBounds child transition.
+ // - Without this, the viewpager is scrolled to the new position
+ // (corresponding to its end size) before the size change is realized.
+ // Note that the size change is realized at the end of the ChangeBounds
+ // transition. With the "prescrolling", the viewpager ends up in a weird
+ // position, then recovers smoothly during the transition, and ends at
+ // the position for the current page.
+ // - Exclude by Class type instead of resource id, since the resource id
+ // isn't available for all devices, and probably better to exclude all
+ // ViewPagers any way.
+ set.excludeTarget(ViewPager.class, true);
+ set.excludeChildren(ViewPager.class, true);
+ }
+
set.addListener(mKeyguardStatusAlignmentTransitionListener);
TransitionManager.beginDelayedTransition(notifContainerParent, set);
}