diff options
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 32 | ||||
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 3 |
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); |
