summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityManagerNative.java32
-rw-r--r--core/java/android/app/ActivityThread.java3
2 files changed, 28 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 3bc2ee6..7b81713 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2027,7 +2027,12 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
IActivityContainer activityContainer =
createActivityContainer(parentActivityToken, callback);
reply.writeNoException();
- reply.writeStrongBinder(activityContainer.asBinder());
+ if (activityContainer != null) {
+ reply.writeInt(1);
+ reply.writeStrongBinder(activityContainer.asBinder());
+ } else {
+ reply.writeInt(0);
+ }
return true;
}
@@ -2036,7 +2041,12 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
IBinder activityToken = data.readStrongBinder();
IActivityContainer activityContainer = getEnclosingActivityContainer(activityToken);
reply.writeNoException();
- reply.writeStrongBinder(activityContainer.asBinder());
+ if (activityContainer != null) {
+ reply.writeInt(1);
+ reply.writeStrongBinder(activityContainer.asBinder());
+ } else {
+ reply.writeInt(0);
+ }
return true;
}
@@ -4670,8 +4680,13 @@ class ActivityManagerProxy implements IActivityManager
data.writeStrongBinder((IBinder)callback);
mRemote.transact(CREATE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
reply.readException();
- IActivityContainer res =
- IActivityContainer.Stub.asInterface(reply.readStrongBinder());
+ final int result = reply.readInt();
+ final IActivityContainer res;
+ if (result == 1) {
+ res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
+ } else {
+ res = null;
+ }
data.recycle();
reply.recycle();
return res;
@@ -4685,8 +4700,13 @@ class ActivityManagerProxy implements IActivityManager
data.writeStrongBinder(activityToken);
mRemote.transact(GET_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
reply.readException();
- IActivityContainer res =
- IActivityContainer.Stub.asInterface(reply.readStrongBinder());
+ final int result = reply.readInt();
+ final IActivityContainer res;
+ if (result == 1) {
+ res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
+ } else {
+ res = null;
+ }
data.recycle();
reply.recycle();
return res;
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 9ae2543..9f21a36 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -2225,7 +2225,8 @@ public final class ActivityThread {
try {
IActivityContainer container =
ActivityManagerNative.getDefault().getEnclosingActivityContainer(r.token);
- final int displayId = container.getDisplayId();
+ final int displayId =
+ container == null ? Display.DEFAULT_DISPLAY : container.getDisplayId();
if (displayId > Display.DEFAULT_DISPLAY) {
Display display = dm.getRealDisplay(displayId, r.token);
baseContext = appContext.createDisplayContext(display);