diff options
author | Craig Mautner <cmautner@google.com> | 2014-07-21 14:18:29 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2014-07-21 14:33:47 -0700 |
commit | 3d0c57a1d3b8eb6bb54045c02c2e93a9313d3cf7 (patch) | |
tree | 633803ef24d181cf4724e362d8c3874a892fec34 /core/java | |
parent | d1c344e412ba927db0276d37f7a42362aa2966b0 (diff) | |
download | frameworks_base-3d0c57a1d3b8eb6bb54045c02c2e93a9313d3cf7.zip frameworks_base-3d0c57a1d3b8eb6bb54045c02c2e93a9313d3cf7.tar.gz frameworks_base-3d0c57a1d3b8eb6bb54045c02c2e93a9313d3cf7.tar.bz2 |
Don't create a delegate for null callbacks.
ActivityView does not create callbacks for the VirtualDisplay. This
leads to setting Looper.myLooper() from a Binder thread which
leads to NPE when trying to dereference its message queue.
Fixes bug 16386002.
Change-Id: I12760a22075ed4770f3fe960763e0135fe095cfe
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/hardware/display/DisplayManagerGlobal.java | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index f2426e5..1b9a0c5 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -471,22 +471,30 @@ public final class DisplayManagerGlobal { private VirtualDisplayCallbacksDelegate mDelegate; public VirtualDisplayCallbacks(VirtualDisplay.Callbacks callbacks, Handler handler) { - mDelegate = new VirtualDisplayCallbacksDelegate(callbacks, handler); + if (callbacks != null) { + mDelegate = new VirtualDisplayCallbacksDelegate(callbacks, handler); + } } @Override // Binder call public void onDisplayPaused() { - mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_PAUSED); + if (mDelegate != null) { + mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_PAUSED); + } } @Override // Binder call public void onDisplayResumed() { - mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_RESUMED); + if (mDelegate != null) { + mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_RESUMED); + } } @Override // Binder call public void onDisplayStopped() { - mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_STOPPED); + if (mDelegate != null) { + mDelegate.sendEmptyMessage(VirtualDisplayCallbacksDelegate.MSG_DISPLAY_STOPPED); + } } } @@ -505,9 +513,6 @@ public final class DisplayManagerGlobal { @Override public void handleMessage(Message msg) { - if (mCallbacks == null) { - return; - } switch (msg.what) { case MSG_DISPLAY_PAUSED: mCallbacks.onDisplayPaused(); |