Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b542b3a8 authored by Jiaming Liu's avatar Jiaming Liu
Browse files

[AE] Prevent crash when launching activity's task id is invalid

If we cannot get a valid task id for the launching activity, then we
fall back to treat it as a non-activity context. This prevents crash
when creating task fragment with invalid task id.

Bug: 391438117
Test: atest SplitControllerTest  ActivityEmbeddingLaunchTests
ActivityEmbeddingLifecycleTests ActivityEmbeddingPolicyTests
Flag: EXEMPT bugfix
Change-Id: I3209ac784ea5f97cda81a11f908d7eceead347db

Change-Id: I1ee93340ce8d7af776592182cb5240bd62e48736
parent 34303f98
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package androidx.window.extensions.embedding;

import static android.app.ActivityManager.START_SUCCESS;
import static android.app.ActivityOptions.KEY_LAUNCH_TASK_FRAGMENT_TOKEN;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -3148,15 +3149,22 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
                final WindowContainerTransaction wct = transactionRecord.getTransaction();
                final TaskFragmentContainer launchedInTaskFragment;
                if (launchingActivity != null) {
                    final int taskId = getTaskId(launchingActivity);
                    final String overlayTag = options.getString(KEY_OVERLAY_TAG);
                    if (Flags.activityEmbeddingOverlayPresentationFlag()
                            && overlayTag != null) {
                        launchedInTaskFragment = createOrUpdateOverlayTaskFragmentIfNeeded(wct,
                                options, intent, launchingActivity);
                    } else {
                        final int taskId = getTaskId(launchingActivity);
                        if (taskId != INVALID_TASK_ID) {
                            launchedInTaskFragment = resolveStartActivityIntent(wct, taskId, intent,
                                    launchingActivity);
                        } else {
                            // We cannot get a valid task id of launchingActivity so we fall back to
                            // treat it as a non-Activity context.
                            launchedInTaskFragment =
                                    resolveStartActivityIntentFromNonActivityContext(wct, intent);
                        }
                    }
                } else {
                    launchedInTaskFragment = resolveStartActivityIntentFromNonActivityContext(wct,