diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 0ecd76f82a8a..5c09640e1785 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -800,11 +800,7 @@ public final class ViewRootImpl implements ViewParent, context); mCompatibleVisibilityInfo = new SystemUiVisibilityInfo(); mAccessibilityManager = AccessibilityManager.getInstance(context); - mAccessibilityManager.addAccessibilityStateChangeListener( - mAccessibilityInteractionConnectionManager, mHandler); mHighContrastTextManager = new HighContrastTextManager(); - mAccessibilityManager.addHighTextContrastStateChangeListener( - mHighContrastTextManager, mHandler); mViewConfiguration = ViewConfiguration.get(context); mDensity = context.getResources().getDisplayMetrics().densityDpi; mNoncompatDensity = context.getResources().getDisplayMetrics().noncompatDensityDpi; @@ -1004,8 +1000,6 @@ public final class ViewRootImpl implements ViewParent, mView = view; mAttachInfo.mDisplayState = mDisplay.getState(); - mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); - mViewLayoutDirectionInitial = mView.getRawLayoutDirection(); mFallbackEventHandler.setView(view); mWindowAttributes.copyFrom(attrs); @@ -1198,6 +1192,7 @@ public final class ViewRootImpl implements ViewParent, "Unable to add window -- unknown error code " + res); } + registerListeners(); if ((res & WindowManagerGlobal.ADD_FLAG_USE_BLAST) != 0) { mUseBLASTAdapter = true; } @@ -1254,6 +1249,28 @@ public final class ViewRootImpl implements ViewParent, } } + /** + * Register any kind of listeners if setView was success. + */ + private void registerListeners() { + mAccessibilityManager.addAccessibilityStateChangeListener( + mAccessibilityInteractionConnectionManager, mHandler); + mAccessibilityManager.addHighTextContrastStateChangeListener( + mHighContrastTextManager, mHandler); + mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); + } + + /** + * Unregister all listeners while detachedFromWindow. + */ + private void unregisterListeners() { + mAccessibilityManager.removeAccessibilityStateChangeListener( + mAccessibilityInteractionConnectionManager); + mAccessibilityManager.removeHighTextContrastStateChangeListener( + mHighContrastTextManager); + mDisplayManager.unregisterDisplayListener(mDisplayListener); + } + private void setTag() { final String[] split = mWindowAttributes.getTitle().toString().split("\\."); if (split.length > 0) { @@ -4979,10 +4996,6 @@ public final class ViewRootImpl implements ViewParent, } mAccessibilityInteractionConnectionManager.ensureNoConnection(); - mAccessibilityManager.removeAccessibilityStateChangeListener( - mAccessibilityInteractionConnectionManager); - mAccessibilityManager.removeHighTextContrastStateChangeListener( - mHighContrastTextManager); removeSendWindowContentChangedCallback(); destroyHardwareRenderer(); @@ -5015,8 +5028,7 @@ public final class ViewRootImpl implements ViewParent, mInputEventReceiver = null; } - mDisplayManager.unregisterDisplayListener(mDisplayListener); - + unregisterListeners(); unscheduleTraversals(); } |