Merge changes from topic "prp-fix" into main

* changes:
  Improve reliability of cleanup done in onDestroy.
  Change the studio build specific onEndCallback exception to a log.e
This commit is contained in:
Shamali Patwa
2025-03-13 10:25:06 -07:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 12 deletions
@@ -92,6 +92,7 @@ import android.os.Looper;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.Log;
import android.util.Pair;
import android.util.Size;
import android.view.CrossWindowBlurListeners;
@@ -182,6 +183,7 @@ import java.util.Map.Entry;
* Manages the opening and closing app transitions from Launcher
*/
public class QuickstepTransitionManager implements OnDeviceProfileChangeListener {
private static final String TAG = "QuickstepTransitionManager";
private static final boolean ENABLE_SHELL_STARTING_SURFACE =
SystemProperties.getBoolean("persist.debug.shell_starting_surface", true);
@@ -1207,7 +1209,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
mLauncher.removeOnDeviceProfileChangeListener(this);
SystemUiProxy.INSTANCE.get(mLauncher).setStartingWindowListener(null);
if (BuildConfig.IS_STUDIO_BUILD && !mRegisteredTaskStackChangeListener.isEmpty()) {
throw new IllegalStateException("Failed to run onEndCallback created from"
Log.e(TAG, "IllegalState: Failed to run onEndCallback created from"
+ " getActivityLaunchOptions()");
}
mRegisteredTaskStackChangeListener.forEach(TaskRestartedDuringLaunchListener::unregister);
@@ -86,6 +86,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Display;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
@@ -226,6 +227,7 @@ import java.util.stream.Stream;
public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
SystemShortcut.BubbleActivityStarter {
private static final String TAG = "QuickstepLauncher";
private static final boolean TRACE_LAYOUTS =
SystemProperties.getBoolean("persist.debug.trace_layouts", false);
private static final String TRACE_RELAYOUT_CLASS =
@@ -561,20 +563,35 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
@Override
public void onDestroy() {
// wrap non-trivial clean up blocks in try-catch to avoid stopping clean up of rest of
// objects
if (mAppTransitionManager != null) {
mAppTransitionManager.onActivityDestroyed();
try {
mAppTransitionManager.onActivityDestroyed();
} catch (Exception e) {
Log.e(TAG, "Failed to destroy mAppTransitionManager", e);
}
}
mAppTransitionManager = null;
mIsPredictiveBackToHomeInProgress = false;
if (mUnfoldTransitionProgressProvider != null) {
SystemUiProxy.INSTANCE.get(this).setUnfoldAnimationListener(null);
mUnfoldTransitionProgressProvider.destroy();
try {
SystemUiProxy.INSTANCE.get(this).setUnfoldAnimationListener(null);
mUnfoldTransitionProgressProvider.destroy();
} catch (Exception e) {
Log.e(TAG, "Failed to destroy mUnfoldTransitionProgressProvider", e);
}
}
OverviewComponentObserver.INSTANCE.get(this)
.removeOverviewChangeListener(mOverviewChangeListener);
mTISBindHelper.onDestroy();
try {
mTISBindHelper.onDestroy();
} catch (Exception e) {
Log.e(TAG, "Failed to destroy mTISBindHelper", e);
}
if (mLauncherUnfoldAnimationController != null) {
mLauncherUnfoldAnimationController.onDestroy();
@@ -584,15 +601,22 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
mSplitSelectStateController.onDestroy();
}
RecentsView recentsView = getOverviewPanel();
if (recentsView != null) {
recentsView.destroy();
try {
RecentsView recentsView = getOverviewPanel();
if (recentsView != null) {
recentsView.destroy();
}
} catch (Exception e) {
Log.e(TAG, "Failed to destroy RecentsView", e);
}
super.onDestroy();
mHotseatPredictionController.destroy();
if (mViewCapture != null) mViewCapture.close();
removeBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler());
try {
super.onDestroy();
} finally { // trivial close operations in finally.
mHotseatPredictionController.destroy();
if (mViewCapture != null) mViewCapture.close();
removeBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler());
}
}
@Override