Loading core/java/android/app/ActivityManagerNative.java +21 −0 Original line number Diff line number Diff line Loading @@ -2036,6 +2036,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case DELETE_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IActivityContainer activityContainer = IActivityContainer.Stub.asInterface(data.readStrongBinder()); deleteActivityContainer(activityContainer); reply.writeNoException(); return true; } case GET_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder activityToken = data.readStrongBinder(); Loading Loading @@ -4692,6 +4701,18 @@ class ActivityManagerProxy implements IActivityManager return res; } public void deleteActivityContainer(IActivityContainer activityContainer) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(activityContainer.asBinder()); mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Parcel data = Parcel.obtain(); Loading core/java/android/app/ActivityView.java +5 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; /** @hide */ public class ActivityView extends ViewGroup { private final String TAG = "ActivityView"; private final boolean DEBUG = false; Loading Loading @@ -107,6 +108,10 @@ public class ActivityView extends ViewGroup { super.onDetachedFromWindow(); if (mActivityContainer != null) { detach(); try { ActivityManagerNative.getDefault().deleteActivityContainer(mActivityContainer); } catch (RemoteException e) { } mActivityContainer = null; } } Loading @@ -122,7 +127,6 @@ public class ActivityView extends ViewGroup { case View.INVISIBLE: break; case View.GONE: detach(); break; } } Loading core/java/android/app/IActivityManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -407,9 +407,13 @@ public interface IActivityManager extends IInterface { public void performIdleMaintenance() throws RemoteException; /** @hide */ public IActivityContainer createActivityContainer(IBinder parentActivityToken, IActivityContainerCallback callback) throws RemoteException; /** @hide */ public void deleteActivityContainer(IActivityContainer container) throws RemoteException; public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException; Loading Loading @@ -703,4 +707,5 @@ public interface IActivityManager extends IInterface { int APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+182; int GET_HOME_ACTIVITY_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+183; int GET_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+184; int DELETE_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+185; } services/core/java/com/android/server/am/ActivityManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -7081,6 +7081,15 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public void deleteActivityContainer(IActivityContainer container) throws RemoteException { enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS, "deleteActivityContainer()"); synchronized (this) { mStackSupervisor.deleteActivityContainer(container); } } @Override public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +17 −1 Original line number Diff line number Diff line Loading @@ -2179,13 +2179,28 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityRecord top = stack.topRunningNonDelayedActivityLocked(null); if (top != null) { // TODO: Make sure the next activity doesn't start up when top is destroyed. stack.destroyActivityLocked(top, true, true, "stack removal"); stack.destroyActivityLocked(top, true, true, "stack parent destroyed"); } mActivityContainers.removeAt(ndx); container.detachLocked(); } } void deleteActivityContainer(IActivityContainer container) { ActivityContainer activityContainer = (ActivityContainer)container; if (activityContainer != null) { activityContainer.mStack.destroyActivitiesLocked(null, true, "deleteActivityContainer"); final ActivityRecord parent = activityContainer.mParentActivity; if (parent != null) { parent.mChildContainers.remove(activityContainer); } final int stackId = activityContainer.mStackId; mActivityContainers.remove(stackId); mWindowManager.removeStack(stackId); } } private int createStackOnDisplay(ActivityRecord parentActivity, int stackId, int displayId) { ActivityDisplay activityDisplay = mActivityDisplays.get(displayId); if (activityDisplay == null) { Loading Loading @@ -2556,6 +2571,7 @@ public final class ActivityStackSupervisor implements DisplayListener { pw.print(prefix); pw.println("mSleepTimeout=" + mSleepTimeout); pw.print(prefix); pw.println("mCurTaskId=" + mCurTaskId); pw.print(prefix); pw.println("mUserStackInFront=" + mUserStackInFront); pw.print(prefix); pw.println("mActivityContainers=" + mActivityContainers); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { Loading Loading
core/java/android/app/ActivityManagerNative.java +21 −0 Original line number Diff line number Diff line Loading @@ -2036,6 +2036,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case DELETE_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IActivityContainer activityContainer = IActivityContainer.Stub.asInterface(data.readStrongBinder()); deleteActivityContainer(activityContainer); reply.writeNoException(); return true; } case GET_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder activityToken = data.readStrongBinder(); Loading Loading @@ -4692,6 +4701,18 @@ class ActivityManagerProxy implements IActivityManager return res; } public void deleteActivityContainer(IActivityContainer activityContainer) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(activityContainer.asBinder()); mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Parcel data = Parcel.obtain(); Loading
core/java/android/app/ActivityView.java +5 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; /** @hide */ public class ActivityView extends ViewGroup { private final String TAG = "ActivityView"; private final boolean DEBUG = false; Loading Loading @@ -107,6 +108,10 @@ public class ActivityView extends ViewGroup { super.onDetachedFromWindow(); if (mActivityContainer != null) { detach(); try { ActivityManagerNative.getDefault().deleteActivityContainer(mActivityContainer); } catch (RemoteException e) { } mActivityContainer = null; } } Loading @@ -122,7 +127,6 @@ public class ActivityView extends ViewGroup { case View.INVISIBLE: break; case View.GONE: detach(); break; } } Loading
core/java/android/app/IActivityManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -407,9 +407,13 @@ public interface IActivityManager extends IInterface { public void performIdleMaintenance() throws RemoteException; /** @hide */ public IActivityContainer createActivityContainer(IBinder parentActivityToken, IActivityContainerCallback callback) throws RemoteException; /** @hide */ public void deleteActivityContainer(IActivityContainer container) throws RemoteException; public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException; Loading Loading @@ -703,4 +707,5 @@ public interface IActivityManager extends IInterface { int APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+182; int GET_HOME_ACTIVITY_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+183; int GET_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+184; int DELETE_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+185; }
services/core/java/com/android/server/am/ActivityManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -7081,6 +7081,15 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public void deleteActivityContainer(IActivityContainer container) throws RemoteException { enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS, "deleteActivityContainer()"); synchronized (this) { mStackSupervisor.deleteActivityContainer(container); } } @Override public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +17 −1 Original line number Diff line number Diff line Loading @@ -2179,13 +2179,28 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityRecord top = stack.topRunningNonDelayedActivityLocked(null); if (top != null) { // TODO: Make sure the next activity doesn't start up when top is destroyed. stack.destroyActivityLocked(top, true, true, "stack removal"); stack.destroyActivityLocked(top, true, true, "stack parent destroyed"); } mActivityContainers.removeAt(ndx); container.detachLocked(); } } void deleteActivityContainer(IActivityContainer container) { ActivityContainer activityContainer = (ActivityContainer)container; if (activityContainer != null) { activityContainer.mStack.destroyActivitiesLocked(null, true, "deleteActivityContainer"); final ActivityRecord parent = activityContainer.mParentActivity; if (parent != null) { parent.mChildContainers.remove(activityContainer); } final int stackId = activityContainer.mStackId; mActivityContainers.remove(stackId); mWindowManager.removeStack(stackId); } } private int createStackOnDisplay(ActivityRecord parentActivity, int stackId, int displayId) { ActivityDisplay activityDisplay = mActivityDisplays.get(displayId); if (activityDisplay == null) { Loading Loading @@ -2556,6 +2571,7 @@ public final class ActivityStackSupervisor implements DisplayListener { pw.print(prefix); pw.println("mSleepTimeout=" + mSleepTimeout); pw.print(prefix); pw.println("mCurTaskId=" + mCurTaskId); pw.print(prefix); pw.println("mUserStackInFront=" + mUserStackInFront); pw.print(prefix); pw.println("mActivityContainers=" + mActivityContainers); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { Loading