Prevent dream service finishSelf before it was attached
Bring back stopSelf logic to prevent dream service finishSelf before any
token attached.
Fix: 150818348
Test: manual test, won't throw exp while leaving dream service.
Merged-In: I31bb4f32013b9fa0aa2263b94117060e4d3a7341
Change-Id: I31bb4f32013b9fa0aa2263b94117060e4d3a7341
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index e70311f..efe28d9 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -906,22 +906,27 @@
if (!mActivity.isFinishing()) {
// In case the activity is not finished yet, do it now.
mActivity.finishAndRemoveTask();
- return;
}
- } else if (!mWindowless) {
- Slog.w(TAG, "Finish was called before the dream was attached.");
+ return;
}
- if (!mFinished) {
- mFinished = true;
+ if (mFinished) {
+ return;
+ }
+ mFinished = true;
- try {
- // finishSelf will unbind the dream controller from the dream service. This will
- // trigger DreamService.this.onDestroy and DreamService.this will die.
- mDreamManager.finishSelf(mDreamToken, true /*immediate*/);
- } catch (RemoteException ex) {
- // system server died
- }
+ if (mDreamToken == null) {
+ Slog.w(TAG, "Finish was called before the dream was attached.");
+ stopSelf();
+ return;
+ }
+
+ try {
+ // finishSelf will unbind the dream controller from the dream service. This will
+ // trigger DreamService.this.onDestroy and DreamService.this will die.
+ mDreamManager.finishSelf(mDreamToken, true /*immediate*/);
+ } catch (RemoteException ex) {
+ // system server died
}
}