APIs for activity to know when its windowing/pip modes change
Added APIs that allow activities to ask the system if they are currently
in multi-window or picture-in-picture mode and also get notified when
their modes change.
Bug: 25509834
Bug: 25683717
Change-Id: I4b8c316a49940bd6a8b31a93b345f9fd725a4721
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index c05d5e8..ee2efcc 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2733,6 +2733,22 @@
reply.writeInt(res);
return true;
}
+ case IN_MULTI_WINDOW_MODE_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ final IBinder token = data.readStrongBinder();
+ final boolean multiWindowMode = inMultiWindowMode(token);
+ reply.writeNoException();
+ reply.writeInt(multiWindowMode ? 1 : 0);
+ return true;
+ }
+ case IN_PICTURE_IN_PICTURE_MODE_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ final IBinder token = data.readStrongBinder();
+ final boolean pipMode = inPictureInPictureMode(token);
+ reply.writeNoException();
+ reply.writeInt(pipMode ? 1 : 0);
+ return true;
+ }
}
return super.onTransact(code, data, reply, flags);
@@ -6366,5 +6382,33 @@
return res;
}
+ @Override
+ public boolean inMultiWindowMode(IBinder token) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(IN_MULTI_WINDOW_MODE_TRANSACTION, data, reply, 0);
+ reply.readException();
+ final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
+ data.recycle();
+ reply.recycle();
+ return multiWindowMode;
+ }
+
+ @Override
+ public boolean inPictureInPictureMode(IBinder token) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(IN_PICTURE_IN_PICTURE_MODE_TRANSACTION, data, reply, 0);
+ reply.readException();
+ final boolean pipMode = reply.readInt() == 1 ? true : false;
+ data.recycle();
+ reply.recycle();
+ return pipMode;
+ }
+
private IBinder mRemote;
}