Fixed the conflict of the release methods of ActivityView & TaskEmbedder
There is a case in Bubble that we might release a un-initialized
TaskEmbedder while calling ActivityView.release() (ex. create a bubble
and don't expand it and then dismiss it) which will cause an exception.
Allow ActivityView.release() to be called at anytime and check the
initialization state before calling TaskEmbedder.release().
Bug: 155417004
Test: 1. Add bubbles and don't expands them then dimiss them
2. Check logs.
Change-Id: I583ddd36f407c908cb63c109834940fc91c8d130
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java
index d650bbc..b749c35 100644
--- a/core/java/android/app/ActivityView.java
+++ b/core/java/android/app/ActivityView.java
@@ -360,18 +360,9 @@
}
/**
- * Release this container. Activity launching will no longer be permitted.
- * <p>Note: Calling this method is allowed after
- * {@link StateCallback#onActivityViewReady(ActivityView)} callback was triggered and before
- * {@link StateCallback#onActivityViewDestroyed(ActivityView)}.
- *
- * @see StateCallback
+ * Release this container if it is initialized. Activity launching will no longer be permitted.
*/
public void release() {
- if (!mTaskEmbedder.isInitialized()) {
- throw new IllegalStateException(
- "Trying to release container that is not initialized.");
- }
performRelease();
}
@@ -487,7 +478,9 @@
return;
}
mSurfaceView.getHolder().removeCallback(mSurfaceCallback);
- mTaskEmbedder.release();
+ if (mTaskEmbedder.isInitialized()) {
+ mTaskEmbedder.release();
+ }
mTaskEmbedder.setListener(null);
mGuard.close();
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
index 2f7ffde..46cc8c3 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
@@ -746,11 +746,7 @@
if (mActivityView == null) {
return;
}
- switch (mActivityViewStatus) {
- case INITIALIZED:
- case ACTIVITY_STARTED:
- mActivityView.release();
- }
+ mActivityView.release();
if (mTaskId != -1) {
try {
ActivityTaskManager.getService().removeTask(mTaskId);