diff options
Diffstat (limited to 'src/com/android/launcher3/util/DisplayController.java')
-rw-r--r-- | src/com/android/launcher3/util/DisplayController.java | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java index e2c0a32bb0..94f29dbbf7 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -55,7 +55,7 @@ import java.util.Set; * Utility class to cache properties of default display to avoid a system RPC on every call. */ @SuppressLint("NewApi") -public class DisplayController implements DisplayListener, ComponentCallbacks { +public class DisplayController implements DisplayListener, ComponentCallbacks, SafeCloseable { private static final String TAG = "DisplayController"; @@ -79,6 +79,7 @@ public class DisplayController implements DisplayListener, ComponentCallbacks { private final ArrayList<DisplayInfoChangeListener> mListeners = new ArrayList<>(); private Info mInfo; + private boolean mDestroyed = false; private DisplayController(Context context) { mContext = context; @@ -111,6 +112,17 @@ public class DisplayController implements DisplayListener, ComponentCallbacks { } @Override + public void close() { + mDestroyed = true; + if (mWindowContext != null) { + mWindowContext.unregisterComponentCallbacks(this); + } else { + // TODO: unregister broadcast receiver + } + mDM.unregisterDisplayListener(this); + } + + @Override public final void onDisplayAdded(int displayId) { } @Override @@ -157,6 +169,9 @@ public class DisplayController implements DisplayListener, ComponentCallbacks { * Only used for pre-S */ private void onConfigChanged(Intent intent) { + if (mDestroyed) { + return; + } Configuration config = mContext.getResources().getConfiguration(); if (mInfo.fontScale != config.fontScale || mInfo.densityDpi != config.densityDpi) { Log.d(TAG, "Configuration changed, notifying listeners"); |