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

Commit d90c2784 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Synchronize window config updates (9/n)" into main

parents b856a1c4 e8d079cc
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -59,7 +59,7 @@ public abstract class ActivityLifecycleItem extends ActivityTransactionItem {
    }
    }


    @Override
    @Override
    boolean isActivityLifecycleItem() {
    public boolean isActivityLifecycleItem() {
        return true;
        return true;
    }
    }


+1 −1
Original line number Original line Diff line number Diff line
@@ -75,7 +75,7 @@ public abstract class ClientTransactionItem implements BaseClientRequest, Parcel
    /**
    /**
     * Whether this is a {@link ActivityLifecycleItem}.
     * Whether this is a {@link ActivityLifecycleItem}.
     */
     */
    boolean isActivityLifecycleItem() {
    public boolean isActivityLifecycleItem() {
        return false;
        return false;
    }
    }


+37 −32
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
@@ -59,6 +60,8 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;


import java.util.Arrays;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
@@ -80,20 +83,32 @@ import java.util.stream.Collectors;
@Presubmit
@Presubmit
public class TransactionExecutorTests {
public class TransactionExecutorTests {


    @Mock
    private ClientTransactionHandler mTransactionHandler;
    @Mock
    private ActivityLifecycleItem mActivityLifecycleItem;
    @Mock
    private IBinder mActivityToken;
    @Mock
    private Activity mActivity;

    private TransactionExecutor mExecutor;
    private TransactionExecutor mExecutor;
    private TransactionExecutorHelper mExecutorHelper;
    private TransactionExecutorHelper mExecutorHelper;
    private ClientTransactionHandler mTransactionHandler;
    private ActivityClientRecord mClientRecord;
    private ActivityClientRecord mClientRecord;


    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        mTransactionHandler = mock(ClientTransactionHandler.class);
        MockitoAnnotations.initMocks(this);


        mClientRecord = new ActivityClientRecord();
        mClientRecord = new ActivityClientRecord();
        when(mTransactionHandler.getActivityClient(any())).thenReturn(mClientRecord);
        when(mTransactionHandler.getActivityClient(any())).thenReturn(mClientRecord);


        mExecutor = spy(new TransactionExecutor(mTransactionHandler));
        mExecutor = spy(new TransactionExecutor(mTransactionHandler));
        mExecutorHelper = new TransactionExecutorHelper();
        mExecutorHelper = new TransactionExecutorHelper();

        doReturn(true).when(mActivityLifecycleItem).isActivityLifecycleItem();
        doReturn(mActivityToken).when(mActivityLifecycleItem).getActivityToken();
        doReturn(mActivity).when(mTransactionHandler).getActivity(mActivityToken);
    }
    }


    @Test
    @Test
@@ -229,23 +244,21 @@ public class TransactionExecutorTests {
        when(callback1.getPostExecutionState()).thenReturn(UNDEFINED);
        when(callback1.getPostExecutionState()).thenReturn(UNDEFINED);
        ClientTransactionItem callback2 = mock(ClientTransactionItem.class);
        ClientTransactionItem callback2 = mock(ClientTransactionItem.class);
        when(callback2.getPostExecutionState()).thenReturn(UNDEFINED);
        when(callback2.getPostExecutionState()).thenReturn(UNDEFINED);
        ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class);
        IBinder token = mock(IBinder.class);
        when(stateRequest.getActivityToken()).thenReturn(token);
        when(mTransactionHandler.getActivity(token)).thenReturn(mock(Activity.class));


        ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        transaction.addCallback(callback1);
        transaction.addCallback(callback1);
        transaction.addCallback(callback2);
        transaction.addCallback(callback2);
        transaction.setLifecycleStateRequest(stateRequest);
        transaction.setLifecycleStateRequest(mActivityLifecycleItem);


        transaction.preExecute(mTransactionHandler);
        transaction.preExecute(mTransactionHandler);
        mExecutor.execute(transaction);
        mExecutor.execute(transaction);


        InOrder inOrder = inOrder(mTransactionHandler, callback1, callback2, stateRequest);
        InOrder inOrder = inOrder(mTransactionHandler, callback1, callback2,
                mActivityLifecycleItem);
        inOrder.verify(callback1).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback1).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback2).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback2).execute(eq(mTransactionHandler), any());
        inOrder.verify(stateRequest).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(mActivityLifecycleItem).execute(eq(mTransactionHandler), eq(mClientRecord),
                any());
    }
    }


    @Test
    @Test
@@ -254,23 +267,21 @@ public class TransactionExecutorTests {
        when(callback1.getPostExecutionState()).thenReturn(UNDEFINED);
        when(callback1.getPostExecutionState()).thenReturn(UNDEFINED);
        ClientTransactionItem callback2 = mock(ClientTransactionItem.class);
        ClientTransactionItem callback2 = mock(ClientTransactionItem.class);
        when(callback2.getPostExecutionState()).thenReturn(UNDEFINED);
        when(callback2.getPostExecutionState()).thenReturn(UNDEFINED);
        ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class);
        IBinder token = mock(IBinder.class);
        when(stateRequest.getActivityToken()).thenReturn(token);
        when(mTransactionHandler.getActivity(token)).thenReturn(mock(Activity.class));


        ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        transaction.addTransactionItem(callback1);
        transaction.addTransactionItem(callback1);
        transaction.addTransactionItem(callback2);
        transaction.addTransactionItem(callback2);
        transaction.addTransactionItem(stateRequest);
        transaction.addTransactionItem(mActivityLifecycleItem);


        transaction.preExecute(mTransactionHandler);
        transaction.preExecute(mTransactionHandler);
        mExecutor.execute(transaction);
        mExecutor.execute(transaction);


        InOrder inOrder = inOrder(mTransactionHandler, callback1, callback2, stateRequest);
        InOrder inOrder = inOrder(mTransactionHandler, callback1, callback2,
                mActivityLifecycleItem);
        inOrder.verify(callback1).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback1).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback2).execute(eq(mTransactionHandler), any());
        inOrder.verify(callback2).execute(eq(mTransactionHandler), any());
        inOrder.verify(stateRequest).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(mActivityLifecycleItem).execute(eq(mTransactionHandler), eq(mClientRecord),
                any());
    }
    }


    @Test
    @Test
@@ -536,42 +547,36 @@ public class TransactionExecutorTests {


    @Test
    @Test
    public void testActivityItemExecute() {
    public void testActivityItemExecute() {
        final IBinder token = mock(IBinder.class);
        final ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        final ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class);
        final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class);
        when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED);
        when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED);
        when(activityItem.getActivityToken()).thenReturn(token);
        when(activityItem.getActivityToken()).thenReturn(mActivityToken);
        transaction.addCallback(activityItem);
        transaction.addCallback(activityItem);
        final ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class);
        transaction.setLifecycleStateRequest(mActivityLifecycleItem);
        transaction.setLifecycleStateRequest(stateRequest);
        when(stateRequest.getActivityToken()).thenReturn(token);
        when(mTransactionHandler.getActivity(token)).thenReturn(mock(Activity.class));


        mExecutor.execute(transaction);
        mExecutor.execute(transaction);


        final InOrder inOrder = inOrder(activityItem, stateRequest);
        final InOrder inOrder = inOrder(activityItem, mActivityLifecycleItem);
        inOrder.verify(activityItem).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(activityItem).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(stateRequest).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(mActivityLifecycleItem).execute(eq(mTransactionHandler), eq(mClientRecord),
                any());
    }
    }


    @Test
    @Test
    public void testExecuteTransactionItems_activityItemExecute() {
    public void testExecuteTransactionItems_activityItemExecute() {
        final IBinder token = mock(IBinder.class);
        final ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        final ClientTransaction transaction = ClientTransaction.obtain(null /* client */);
        final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class);
        final ActivityTransactionItem activityItem = mock(ActivityTransactionItem.class);
        when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED);
        when(activityItem.getPostExecutionState()).thenReturn(UNDEFINED);
        when(activityItem.getActivityToken()).thenReturn(token);
        when(activityItem.getActivityToken()).thenReturn(mActivityToken);
        transaction.addTransactionItem(activityItem);
        transaction.addTransactionItem(activityItem);
        final ActivityLifecycleItem stateRequest = mock(ActivityLifecycleItem.class);
        transaction.addTransactionItem(mActivityLifecycleItem);
        transaction.addTransactionItem(stateRequest);
        when(stateRequest.getActivityToken()).thenReturn(token);
        when(mTransactionHandler.getActivity(token)).thenReturn(mock(Activity.class));


        mExecutor.execute(transaction);
        mExecutor.execute(transaction);


        final InOrder inOrder = inOrder(activityItem, stateRequest);
        final InOrder inOrder = inOrder(activityItem, mActivityLifecycleItem);
        inOrder.verify(activityItem).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(activityItem).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(stateRequest).execute(eq(mTransactionHandler), eq(mClientRecord), any());
        inOrder.verify(mActivityLifecycleItem).execute(eq(mTransactionHandler), eq(mClientRecord),
                any());
    }
    }


    private static int[] shuffledArray(int[] inputArray) {
    private static int[] shuffledArray(int[] inputArray) {
+3 −5
Original line number Original line Diff line number Diff line
@@ -70,7 +70,6 @@ import android.app.IRequestFinishCallback;
import android.app.PictureInPictureParams;
import android.app.PictureInPictureParams;
import android.app.PictureInPictureUiState;
import android.app.PictureInPictureUiState;
import android.app.compat.CompatChanges;
import android.app.compat.CompatChanges;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.EnterPipRequestedItem;
import android.app.servertransaction.EnterPipRequestedItem;
import android.app.servertransaction.PipStateTransactionItem;
import android.app.servertransaction.PipStateTransactionItem;
import android.compat.annotation.ChangeId;
import android.compat.annotation.ChangeId;
@@ -1018,7 +1017,7 @@ class ActivityClientController extends IActivityClientController.Stub {
        }
        }


        try {
        try {
            mService.getLifecycleManager().scheduleTransaction(r.app.getThread(),
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(),
                    EnterPipRequestedItem.obtain(r.token));
                    EnterPipRequestedItem.obtain(r.token));
            return true;
            return true;
        } catch (Exception e) {
        } catch (Exception e) {
@@ -1038,9 +1037,8 @@ class ActivityClientController extends IActivityClientController.Stub {
        }
        }


        try {
        try {
            final ClientTransaction transaction = ClientTransaction.obtain(r.app.getThread());
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(),
            transaction.addCallback(PipStateTransactionItem.obtain(r.token, pipState));
                    PipStateTransactionItem.obtain(r.token, pipState));
            mService.getLifecycleManager().scheduleTransaction(transaction);
        } catch (Exception e) {
        } catch (Exception e) {
            Slog.w(TAG, "Failed to send pip state transaction item: "
            Slog.w(TAG, "Failed to send pip state transaction item: "
                    + r.intent.getComponent(), e);
                    + r.intent.getComponent(), e);
+25 −27
Original line number Original line Diff line number Diff line
@@ -277,7 +277,6 @@ import android.app.servertransaction.ActivityConfigurationChangeItem;
import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ActivityRelaunchItem;
import android.app.servertransaction.ActivityRelaunchItem;
import android.app.servertransaction.ActivityResultItem;
import android.app.servertransaction.ActivityResultItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.ClientTransactionItem;
import android.app.servertransaction.ClientTransactionItem;
import android.app.servertransaction.DestroyActivityItem;
import android.app.servertransaction.DestroyActivityItem;
import android.app.servertransaction.MoveToDisplayItem;
import android.app.servertransaction.MoveToDisplayItem;
@@ -1449,7 +1448,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                    + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId,
                    + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId,
                    config);
                    config);


            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    MoveToDisplayItem.obtain(token, displayId, config));
                    MoveToDisplayItem.obtain(token, displayId, config));
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            // If process died, whatever.
            // If process died, whatever.
@@ -1466,7 +1465,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending new config to %s, "
            ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending new config to %s, "
                    + "config: %s", this, config);
                    + "config: %s", this, config);


            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    ActivityConfigurationChangeItem.obtain(token, config));
                    ActivityConfigurationChangeItem.obtain(token, config));
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            // If process died, whatever.
            // If process died, whatever.
@@ -1487,7 +1486,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            ProtoLog.v(WM_DEBUG_STATES, "Sending position change to %s, onTop: %b",
            ProtoLog.v(WM_DEBUG_STATES, "Sending position change to %s, onTop: %b",
                    this, onTop);
                    this, onTop);


            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    TopResumedActivityChangeItem.obtain(token, onTop));
                    TopResumedActivityChangeItem.obtain(token, onTop));
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            // If process died, whatever.
            // If process died, whatever.
@@ -2750,7 +2749,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }
        }
        try {
        try {
            mTransferringSplashScreenState = TRANSFER_SPLASH_SCREEN_ATTACH_TO_CLIENT;
            mTransferringSplashScreenState = TRANSFER_SPLASH_SCREEN_ATTACH_TO_CLIENT;
            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    TransferSplashScreenViewStateItem.obtain(token, parcelable,
                    TransferSplashScreenViewStateItem.obtain(token, parcelable,
                            windowAnimationLeash));
                            windowAnimationLeash));
            scheduleTransferSplashScreenTimeout();
            scheduleTransferSplashScreenTimeout();
@@ -3914,7 +3913,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A


            try {
            try {
                if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + this);
                if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + this);
                mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                        DestroyActivityItem.obtain(token, finishing, configChangeFlags));
                        DestroyActivityItem.obtain(token, finishing, configChangeFlags));
            } catch (Exception e) {
            } catch (Exception e) {
                // We can just ignore exceptions here...  if the process has crashed, our death
                // We can just ignore exceptions here...  if the process has crashed, our death
@@ -4825,7 +4824,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            try {
            try {
                final ArrayList<ResultInfo> list = new ArrayList<>();
                final ArrayList<ResultInfo> list = new ArrayList<>();
                list.add(new ResultInfo(resultWho, requestCode, resultCode, data));
                list.add(new ResultInfo(resultWho, requestCode, resultCode, data));
                mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                        ActivityResultItem.obtain(token, list));
                        ActivityResultItem.obtain(token, list));
                return;
                return;
            } catch (Exception e) {
            } catch (Exception e) {
@@ -4836,22 +4835,23 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // Schedule sending results now for Media Projection setup.
        // Schedule sending results now for Media Projection setup.
        if (forceSendForMediaProjection && attachedToProcess() && isState(STARTED, PAUSING, PAUSED,
        if (forceSendForMediaProjection && attachedToProcess() && isState(STARTED, PAUSING, PAUSED,
                STOPPING, STOPPED)) {
                STOPPING, STOPPED)) {
            final ClientTransaction transaction = ClientTransaction.obtain(app.getThread());
            // Build result to be returned immediately.
            // Build result to be returned immediately.
            transaction.addCallback(ActivityResultItem.obtain(
            final ActivityResultItem activityResultItem = ActivityResultItem.obtain(
                    token, List.of(new ResultInfo(resultWho, requestCode, resultCode, data))));
                    token, List.of(new ResultInfo(resultWho, requestCode, resultCode, data)));
            // When the activity result is delivered, the activity will transition to RESUMED.
            // When the activity result is delivered, the activity will transition to RESUMED.
            // Since the activity is only resumed so the result can be immediately delivered,
            // Since the activity is only resumed so the result can be immediately delivered,
            // return it to its original lifecycle state.
            // return it to its original lifecycle state.
            ActivityLifecycleItem lifecycleItem = getLifecycleItemForCurrentStateForResult();
            final ActivityLifecycleItem lifecycleItem = getLifecycleItemForCurrentStateForResult();
            try {
                if (lifecycleItem != null) {
                if (lifecycleItem != null) {
                transaction.setLifecycleStateRequest(lifecycleItem);
                    mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems(
                            app.getThread(), activityResultItem, lifecycleItem);
                } else {
                } else {
                    Slog.w(TAG, "Unable to get the lifecycle item for state " + mState
                    Slog.w(TAG, "Unable to get the lifecycle item for state " + mState
                            + " so couldn't immediately send result");
                            + " so couldn't immediately send result");
                    mAtmService.getLifecycleManager().scheduleTransactionItem(
                            app.getThread(), activityResultItem);
                }
                }
            try {
                mAtmService.getLifecycleManager().scheduleTransaction(transaction);
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Slog.w(TAG, "Exception thrown sending result to " + this, e);
                Slog.w(TAG, "Exception thrown sending result to " + this, e);
            }
            }
@@ -4931,7 +4931,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                // Making sure the client state is RESUMED after transaction completed and doing
                // Making sure the client state is RESUMED after transaction completed and doing
                // so only if activity is currently RESUMED. Otherwise, client may have extra
                // so only if activity is currently RESUMED. Otherwise, client may have extra
                // life-cycle calls to RESUMED (and PAUSED later).
                // life-cycle calls to RESUMED (and PAUSED later).
                mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                        NewIntentItem.obtain(token, ar, mState == RESUMED));
                        NewIntentItem.obtain(token, ar, mState == RESUMED));
                unsent = false;
                unsent = false;
            } catch (RemoteException e) {
            } catch (RemoteException e) {
@@ -6156,7 +6156,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            EventLogTags.writeWmPauseActivity(mUserId, System.identityHashCode(this),
            EventLogTags.writeWmPauseActivity(mUserId, System.identityHashCode(this),
                    shortComponentName, "userLeaving=false", "make-active");
                    shortComponentName, "userLeaving=false", "make-active");
            try {
            try {
                mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                        PauseActivityItem.obtain(token, finishing, false /* userLeaving */,
                        PauseActivityItem.obtain(token, finishing, false /* userLeaving */,
                                configChangeFlags, false /* dontReport */, mAutoEnteringPip));
                                configChangeFlags, false /* dontReport */, mAutoEnteringPip));
            } catch (Exception e) {
            } catch (Exception e) {
@@ -6169,7 +6169,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            setState(STARTED, "makeActiveIfNeeded");
            setState(STARTED, "makeActiveIfNeeded");


            try {
            try {
                mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                        StartActivityItem.obtain(token, takeOptions()));
                        StartActivityItem.obtain(token, takeOptions()));
            } catch (Exception e) {
            } catch (Exception e) {
                Slog.w(TAG, "Exception thrown sending start: " + intent.getComponent(), e);
                Slog.w(TAG, "Exception thrown sending start: " + intent.getComponent(), e);
@@ -6467,7 +6467,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            }
            }
            EventLogTags.writeWmStopActivity(
            EventLogTags.writeWmStopActivity(
                    mUserId, System.identityHashCode(this), shortComponentName);
                    mUserId, System.identityHashCode(this), shortComponentName);
            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    StopActivityItem.obtain(token, configChangeFlags));
                    StopActivityItem.obtain(token, configChangeFlags));


            mAtmService.mH.postDelayed(mStopTimeoutRunnable, STOP_TIMEOUT);
            mAtmService.mH.postDelayed(mStopTimeoutRunnable, STOP_TIMEOUT);
@@ -9907,10 +9907,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            } else {
            } else {
                lifecycleItem = PauseActivityItem.obtain(token);
                lifecycleItem = PauseActivityItem.obtain(token);
            }
            }
            final ClientTransaction transaction = ClientTransaction.obtain(app.getThread());
            mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems(
            transaction.addCallback(callbackItem);
                    app.getThread(), callbackItem, lifecycleItem);
            transaction.setLifecycleStateRequest(lifecycleItem);
            mAtmService.getLifecycleManager().scheduleTransaction(transaction);
            startRelaunching();
            startRelaunching();
            // Note: don't need to call pauseIfSleepingLocked() here, because the caller will only
            // Note: don't need to call pauseIfSleepingLocked() here, because the caller will only
            // request resume if this activity is currently resumed, which implies we aren't
            // request resume if this activity is currently resumed, which implies we aren't
@@ -10002,7 +10000,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // The process will be killed until the activity reports stopped with saved state (see
        // The process will be killed until the activity reports stopped with saved state (see
        // {@link ActivityTaskManagerService.activityStopped}).
        // {@link ActivityTaskManagerService.activityStopped}).
        try {
        try {
            mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    StopActivityItem.obtain(token, 0 /* configChanges */));
                    StopActivityItem.obtain(token, 0 /* configChanges */));
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Slog.w(TAG, "Exception thrown during restart " + this, e);
            Slog.w(TAG, "Exception thrown during restart " + this, e);
Loading