From 2806269a5a4bb08c1f8694a4b601256db90728b1 Mon Sep 17 00:00:00 2001 From: shawnlin Date: Mon, 15 Jun 2020 13:55:51 +0800 Subject: [PATCH] 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 --- core/java/android/app/ActivityView.java | 15 ++++----------- .../systemui/bubbles/BubbleExpandedView.java | 6 +----- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index d650bbcdfa333..b749c3504811d 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -360,18 +360,9 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd } /** - * Release this container. Activity launching will no longer be permitted. - *

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 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd 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 2f7ffde50fd48..46cc8c3729342 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 @@ public class BubbleExpandedView extends LinearLayout { if (mActivityView == null) { return; } - switch (mActivityViewStatus) { - case INITIALIZED: - case ACTIVITY_STARTED: - mActivityView.release(); - } + mActivityView.release(); if (mTaskId != -1) { try { ActivityTaskManager.getService().removeTask(mTaskId);