From 1efc9c389676a49096a8755e14011fef5758333f Mon Sep 17 00:00:00 2001 From: Matthew Ng Date: Wed, 11 Apr 2018 18:13:56 -0700 Subject: [PATCH] Update nav buttons current view after inflates occur Made sure that after nav buttons are inflated that the current view is set immediately so that when using getCurrentView() you may not get an older view (that could cause issues). Fixes the inability to quick scrub because the getCurrentView() returned an old view that was detached from parent and it's position was wrong not allowing home button to be dragged. Change-Id: Ia9ef61712298d0391b6479ee14d6410ca6d3f980 Fixes: 77909224 Test: wipe phone and try quick scrub --- .../phone/NavigationBarInflaterView.java | 19 +++++++++++++++++-- .../statusbar/phone/NavigationBarView.java | 4 +--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java index 989423530599b..91cf8f0869050 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java @@ -25,6 +25,7 @@ import android.view.Display; import android.view.Display.Mode; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -80,6 +81,7 @@ public class NavigationBarInflaterView extends FrameLayout private static final String WEIGHT_CENTERED_SUFFIX = "WC"; private final List mPlugins = new ArrayList<>(); + private final Display mDisplay; protected LayoutInflater mLayoutInflater; protected LayoutInflater mLandscapeInflater; @@ -99,9 +101,9 @@ public class NavigationBarInflaterView extends FrameLayout public NavigationBarInflaterView(Context context, AttributeSet attrs) { super(context, attrs); createInflaters(); - Display display = ((WindowManager) + mDisplay = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - Mode displayMode = display.getMode(); + Mode displayMode = mDisplay.getMode(); isRot0Landscape = displayMode.getPhysicalWidth() > displayMode.getPhysicalHeight(); } @@ -173,6 +175,17 @@ public class NavigationBarInflaterView extends FrameLayout } } + public void updateButtonDispatchersCurrentView() { + if (mButtonDispatchers != null) { + final int rotation = mDisplay.getRotation(); + final View view = rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 + ? mRot0 : mRot90; + for (int i = 0; i < mButtonDispatchers.size(); i++) { + mButtonDispatchers.valueAt(i).setCurrentView(view); + } + } + } + public void setAlternativeOrder(boolean alternativeOrder) { if (alternativeOrder != mAlternativeOrder) { mAlternativeOrder = alternativeOrder; @@ -239,6 +252,8 @@ public class NavigationBarInflaterView extends FrameLayout inflateButtons(end, mRot0.findViewById(R.id.ends_group), isRot0Landscape, false); inflateButtons(end, mRot90.findViewById(R.id.ends_group), !isRot0Landscape, false); + + updateButtonDispatchersCurrentView(); } private void addGravitySpacer(LinearLayout layout) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index db2139da6b76d..687ab7c9037aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -873,9 +873,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener