Add Activity.isTopOfTask() method
Used by scene transition to determine if an activity has launched the
next activity into its own task or into another task.
Fixes bug 15771895.
Change-Id: I6d350350dcf27509296d55d7b75be90a01694ac9
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 1b2b08f..ce36fd8 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1546,6 +1546,15 @@
return true;
}
+ case IS_TOP_OF_TASK_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder token = data.readStrongBinder();
+ final boolean isTopOfTask = isTopOfTask(token);
+ reply.writeNoException();
+ reply.writeInt(isTopOfTask ? 1 : 0);
+ return true;
+ }
+
case CONVERT_FROM_TRANSLUCENT_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
IBinder token = data.readStrongBinder();
@@ -2129,7 +2138,7 @@
return true;
}
- case START_LOCK_TASK_BY_CURRENT: {
+ case START_LOCK_TASK_BY_CURRENT_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
startLockTaskModeOnCurrent();
reply.writeNoException();
@@ -2143,7 +2152,7 @@
return true;
}
- case STOP_LOCK_TASK_BY_CURRENT: {
+ case STOP_LOCK_TASK_BY_CURRENT_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
stopLockTaskModeOnCurrent();
reply.writeNoException();
@@ -4182,6 +4191,19 @@
return res;
}
+ public boolean isTopOfTask(IBinder token) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
+ reply.readException();
+ boolean res = reply.readInt() == 1;
+ data.recycle();
+ reply.recycle();
+ return res;
+ }
+
public boolean isTopActivityImmersive()
throws RemoteException {
Parcel data = Parcel.obtain();
@@ -4930,7 +4952,7 @@
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
- mRemote.transact(START_LOCK_TASK_BY_CURRENT, data, reply, 0);
+ mRemote.transact(START_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
reply.recycle();
@@ -4952,7 +4974,7 @@
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
- mRemote.transact(STOP_LOCK_TASK_BY_CURRENT, data, reply, 0);
+ mRemote.transact(STOP_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
reply.recycle();