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

Commit e55b009a authored by Andrii Kulian's avatar Andrii Kulian
Browse files

Don't require post-execution state for onActivityResult

According to the documentation, onActivityResult() should be called
immediately before onResume(). This, however, was not always the case
in previous releases and fixing this caused some app compatibility
issues.
This CL removes required post execution state for ActivityResultItem.

Bug: 77695691
Test: ActivityLifecycleTests
Change-Id: Id8c02e9b49f9758aac616e37948570722d802de8
parent c2120a10
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -759,6 +759,7 @@ public class Activity extends ContextThemeWrapper
    private static final int LOG_AM_ON_STOP_CALLED = 30049;
    private static final int LOG_AM_ON_RESTART_CALLED = 30058;
    private static final int LOG_AM_ON_DESTROY_CALLED = 30060;
    private static final int LOG_AM_ON_ACTIVITY_RESULT_CALLED = 30062;

    private static class ManagedDialog {
        Dialog mDialog;
@@ -7438,8 +7439,8 @@ public class Activity extends ContextThemeWrapper
        }
    }

    void dispatchActivityResult(String who, int requestCode,
        int resultCode, Intent data) {
    void dispatchActivityResult(String who, int requestCode, int resultCode, Intent data,
            String reason) {
        if (false) Log.v(
            TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode
            + ", resCode=" + resultCode + ", data=" + data);
@@ -7475,6 +7476,7 @@ public class Activity extends ContextThemeWrapper
                frag.onActivityResult(requestCode, resultCode, data);
            }
        }
        writeEventLog(LOG_AM_ON_ACTIVITY_RESULT_CALLED, reason);
    }

    /**
+4 −4
Original line number Diff line number Diff line
@@ -16,11 +16,11 @@

package android.app;

import java.util.HashMap;

import android.content.Intent;
import android.os.Bundle;

import java.util.HashMap;

/**
 * A screen that contains and runs multiple embedded activities.
 *
@@ -109,7 +109,7 @@ public class ActivityGroup extends Activity {

    @Override
    void dispatchActivityResult(String who, int requestCode, int resultCode,
            Intent data) {
            Intent data, String reason) {
        if (who != null) {
            Activity act = mLocalActivityManager.getActivity(who);
            /*
@@ -123,7 +123,7 @@ public class ActivityGroup extends Activity {
                return;
            }
        }
        super.dispatchActivityResult(who, requestCode, resultCode, data);
        super.dispatchActivityResult(who, requestCode, resultCode, data, reason);
    }
}

+6 −6
Original line number Diff line number Diff line
@@ -3730,7 +3730,7 @@ public final class ActivityThread extends ClientTransactionHandler {
                r.pendingIntents = null;
            }
            if (r.pendingResults != null) {
                deliverResults(r, r.pendingResults);
                deliverResults(r, r.pendingResults, reason);
                r.pendingResults = null;
            }
            r.activity.performResume(r.startsNotResumed, reason);
@@ -4299,7 +4299,7 @@ public final class ActivityThread extends ClientTransactionHandler {
        WindowManagerGlobal.getInstance().reportNewConfiguration(mConfiguration);
    }

    private void deliverResults(ActivityClientRecord r, List<ResultInfo> results) {
    private void deliverResults(ActivityClientRecord r, List<ResultInfo> results, String reason) {
        final int N = results.size();
        for (int i=0; i<N; i++) {
            ResultInfo ri = results.get(i);
@@ -4311,7 +4311,7 @@ public final class ActivityThread extends ClientTransactionHandler {
                if (DEBUG_RESULTS) Slog.v(TAG,
                        "Delivering result to activity " + r + " : " + ri);
                r.activity.dispatchActivityResult(ri.mResultWho,
                        ri.mRequestCode, ri.mResultCode, ri.mData);
                        ri.mRequestCode, ri.mResultCode, ri.mData, reason);
            } catch (Exception e) {
                if (!mInstrumentation.onException(r.activity, e)) {
                    throw new RuntimeException(
@@ -4324,7 +4324,7 @@ public final class ActivityThread extends ClientTransactionHandler {
    }

    @Override
    public void handleSendResult(IBinder token, List<ResultInfo> results) {
    public void handleSendResult(IBinder token, List<ResultInfo> results, String reason) {
        ActivityClientRecord r = mActivities.get(token);
        if (DEBUG_RESULTS) Slog.v(TAG, "Handling send result to " + r);
        if (r != null) {
@@ -4359,9 +4359,9 @@ public final class ActivityThread extends ClientTransactionHandler {
                }
            }
            checkAndBlockForNetworkAccess();
            deliverResults(r, results);
            deliverResults(r, results, reason);
            if (resumed) {
                r.activity.performResume(false, "handleSendResult");
                r.activity.performResume(false, reason);
                r.activity.mTemporaryPause = false;
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ public abstract class ClientTransactionHandler {
            Configuration overrideConfig, int displayId);

    /** Deliver result from another activity. */
    public abstract void handleSendResult(IBinder token, List<ResultInfo> results);
    public abstract void handleSendResult(IBinder token, List<ResultInfo> results, String reason);

    /** Deliver multi-window mode change notification. */
    public abstract void handleMultiWindowModeChanged(IBinder token, boolean isInMultiWindowMode,
+3 −3
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package android.app.servertransaction;

import static android.app.servertransaction.ActivityLifecycleItem.ON_RESUME;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;

import android.app.ClientTransactionHandler;
@@ -37,16 +36,17 @@ public class ActivityResultItem extends ClientTransactionItem {

    private List<ResultInfo> mResultInfoList;

    /* TODO(b/78294732)
    @Override
    public int getPostExecutionState() {
        return ON_RESUME;
    }
    }*/

    @Override
    public void execute(ClientTransactionHandler client, IBinder token,
            PendingTransactionActions pendingActions) {
        Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityDeliverResult");
        client.handleSendResult(token, mResultInfoList);
        client.handleSendResult(token, mResultInfoList, "ACTIVITY_RESULT");
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }

Loading