OSDN Git Service

Fixed an issue where the pattern wouldn't show properly
authorSelim Cinek <cinek@google.com>
Sat, 9 Sep 2017 01:00:18 +0000 (18:00 -0700)
committerSelim Cinek <cinek@google.com>
Wed, 13 Sep 2017 22:45:55 +0000 (22:45 +0000)
Because we were still collapsed, the height of the pattern
could still remain 0 and we would try to animate in a state
that doesn't make sense. we're now delaying it until we're
drawn.

Change-Id: I2588e5ccd45f1f472825e5502590a9890029a9b8
Fixes: 65441390
Test: follow steps on bug, observe normal pattern

packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java

index fd95cc4..42c454d 100644 (file)
@@ -69,6 +69,7 @@ public class KeyguardBouncer {
                 }
             };
     private final Runnable mRemoveViewRunnable = this::removeView;
+    private int mStatusBarHeight;
 
     public KeyguardBouncer(Context context, ViewMediatorCallback callback,
             LockPatternUtils lockPatternUtils, ViewGroup container,
@@ -128,7 +129,9 @@ public class KeyguardBouncer {
             mRoot.setVisibility(View.VISIBLE);
             mKeyguardView.onResume();
             showPromptReason(mBouncerPromptReason);
-            if (mKeyguardView.getHeight() != 0) {
+            // We might still be collapsed and the view didn't have time to layout yet or still
+            // be small, let's wait on the predraw to do the animation in that case.
+            if (mKeyguardView.getHeight() != 0 && mKeyguardView.getHeight() != mStatusBarHeight) {
                 mKeyguardView.startAppearAnimation();
             } else {
                 mKeyguardView.getViewTreeObserver().addOnPreDrawListener(
@@ -251,6 +254,8 @@ public class KeyguardBouncer {
         mKeyguardView.setLockPatternUtils(mLockPatternUtils);
         mKeyguardView.setViewMediatorCallback(mCallback);
         mContainer.addView(mRoot, mContainer.getChildCount());
+        mStatusBarHeight = mRoot.getResources().getDimensionPixelOffset(
+                com.android.systemui.R.dimen.status_bar_height);
         mRoot.setVisibility(View.INVISIBLE);
         mRoot.dispatchApplyWindowInsets(mRoot.getRootWindowInsets());
     }