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

Commit 57da5c64 authored by Louis Chang's avatar Louis Chang
Browse files

[Reland]Copy Intent while sending the Intent to the listeners asynchronously

to prevent the Intent being modified concurrently while accessing.

Bug: 417133563
Test: wm presubmit
Flag: EXEMPT bugfix
Change-Id: Id6d28d0e831edefbcd59fbbb10dbc4db8ec094e3
parent fd95f6d9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ class LaunchObserverRegistryImpl extends ActivityMetricsLaunchObserver implement
        mHandler.sendMessage(PooledLambda.obtainMessage(
                LaunchObserverRegistryImpl::handleOnIntentStarted,
                this,
                intent,
                intent != null ? new Intent(intent) : null,
                timestampNs));
    }

+6 −1
Original line number Diff line number Diff line
@@ -153,14 +153,19 @@ public class ActivityMetricsLaunchObserverTests extends WindowTestsBase {
    }

    private long onIntentStarted(Intent intent) {
        clearInvocations(mLaunchObserver);
        notifyActivityLaunching(intent);

        long timestamp = -1;
        // If it is launching top activity from trampoline activity, the observer shouldn't receive
        // onActivityLaunched because the activities should belong to the same transition.
        if (!mLaunchTopByTrampoline) {
            final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
            final ArgumentCaptor<Long> captor = ArgumentCaptor.forClass(Long.class);
            verifyAsync(mLaunchObserver).onIntentStarted(eq(intent), captor.capture());
            verifyAsync(mLaunchObserver).onIntentStarted(intentCaptor.capture(),
                    captor.capture());
            assertWithMessage("Same intent").that(
                    intent.filterEquals(intentCaptor.getValue())).isTrue();
            timestamp = captor.getValue();
        }
        verifyNoMoreInteractions(mLaunchObserver);