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

Commit 27390cb5 authored by Louis Chang's avatar Louis Chang
Browse files

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: I21555644623442d75d863251a4837a6cf9e7c9a2
parent 13c4ea41
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,
                new Intent(intent),
                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);