summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Activity.java6
-rw-r--r--core/java/android/app/ActivityGroup.java8
-rw-r--r--core/java/android/app/ActivityThread.java12
-rw-r--r--core/java/android/app/ClientTransactionHandler.java2
-rw-r--r--core/java/android/app/servertransaction/ActivityResultItem.java6
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java58
-rw-r--r--services/core/java/com/android/server/am/EventLogTags.logtags2
7 files changed, 75 insertions, 19 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 20149dec4dad..b456b72d8bf7 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -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);
}
/**
diff --git a/core/java/android/app/ActivityGroup.java b/core/java/android/app/ActivityGroup.java
index 78a4dfd47b40..228067c3bf75 100644
--- a/core/java/android/app/ActivityGroup.java
+++ b/core/java/android/app/ActivityGroup.java
@@ -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);
}
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index a41da0eb1ee1..037a87b7b54e 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -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;
}
}
diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java
index e26d989f09ef..ea0d703a30e3 100644
--- a/core/java/android/app/ClientTransactionHandler.java
+++ b/core/java/android/app/ClientTransactionHandler.java
@@ -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,
diff --git a/core/java/android/app/servertransaction/ActivityResultItem.java b/core/java/android/app/servertransaction/ActivityResultItem.java
index 545463c124bb..e57f585d2022 100644
--- a/core/java/android/app/servertransaction/ActivityResultItem.java
+++ b/core/java/android/app/servertransaction/ActivityResultItem.java
@@ -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);
}
diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java
index 3eefc362ab86..fe58116002f2 100644
--- a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java
@@ -40,7 +40,10 @@ import static org.mockito.Mockito.when;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
+import android.app.servertransaction.ActivityLifecycleItem.LifecycleState;
import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.platform.test.annotations.Presubmit;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -50,7 +53,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -231,12 +233,12 @@ public class TransactionExecutorTests {
@Test
public void testActivityResultRequiredStateResolution() {
- ActivityResultItem activityResultItem = ActivityResultItem.obtain(new ArrayList<>());
+ PostExecItem postExecItem = new PostExecItem(ON_RESUME);
IBinder token = mock(IBinder.class);
ClientTransaction transaction = ClientTransaction.obtain(null /* client */,
token /* activityToken */);
- transaction.addCallback(activityResultItem);
+ transaction.addCallback(postExecItem);
// Verify resolution that should get to onPause
mClientRecord.setState(ON_RESUME);
@@ -395,4 +397,54 @@ public class TransactionExecutorTests {
return mExecutorHelper.getLifecyclePath(mClientRecord.getLifecycleState(), finish,
true /* excludeLastState */).toArray();
}
+
+ /** A transaction item that requires some specific post-execution state. */
+ private static class PostExecItem extends StubItem {
+
+ @LifecycleState
+ private int mPostExecutionState;
+
+ PostExecItem(@LifecycleState int state) {
+ mPostExecutionState = state;
+ }
+
+ @Override
+ public int getPostExecutionState() {
+ return mPostExecutionState;
+ }
+ }
+
+ /** Stub implementation of a transaction item that works as a base class for items in tests. */
+ private static class StubItem extends ClientTransactionItem {
+
+ private StubItem() {
+ }
+
+ private StubItem(Parcel in) {
+ }
+
+ @Override
+ public void execute(ClientTransactionHandler client, IBinder token,
+ PendingTransactionActions pendingActions) {
+ }
+
+ @Override
+ public void recycle() {
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ }
+
+ public static final Parcelable.Creator<StubItem> CREATOR =
+ new Parcelable.Creator<StubItem>() {
+ public StubItem createFromParcel(Parcel in) {
+ return new StubItem(in);
+ }
+
+ public StubItem[] newArray(int size) {
+ return new StubItem[size];
+ }
+ };
+ }
}
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index 40b9e4fde874..ed891dfb0e70 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -134,6 +134,8 @@ option java_package com.android.server.am
30059 am_on_start_called (User|1|5),(Component Name|3),(Reason|3)
# The activity's onDestroy has been called.
30060 am_on_destroy_called (User|1|5),(Component Name|3),(Reason|3)
+# The activity's onActivityResult has been called.
+30062 am_on_activity_result_called (User|1|5),(Component Name|3),(Reason|3)
# The task is being removed from its parent stack
30061 am_remove_task (Task ID|1|5), (Stack ID|1|5) \ No newline at end of file