Added IWindowInfosChangedListener interface
Added WindowInfosChangedListener interface and the ability to
register a WindowInfosChangedListener in SCC. Also added the
SurfaceFlinger code where the WindowInfosChangedListener gets
registered and reports to the listeners.
Test: Existing tests pass
Bug: 188792659
Change-Id: If7b93df0afd71a88ea703d2113e68bfb549368af
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 0d7795e..2a980bd 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -44,6 +44,7 @@
namespace android {
+using gui::IWindowInfosListener;
using ui::ColorMode;
class BpSurfaceComposer : public BpInterface<ISurfaceComposer>
@@ -1227,6 +1228,22 @@
return reply.readInt32(buffers);
}
+
+ status_t addWindowInfosListener(
+ const sp<IWindowInfosListener>& windowInfosListener) const override {
+ Parcel data, reply;
+ SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor());
+ SAFE_PARCEL(data.writeStrongBinder, IInterface::asBinder(windowInfosListener));
+ return remote()->transact(BnSurfaceComposer::ADD_WINDOW_INFOS_LISTENER, data, &reply);
+ }
+
+ status_t removeWindowInfosListener(
+ const sp<IWindowInfosListener>& windowInfosListener) const override {
+ Parcel data, reply;
+ SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor());
+ SAFE_PARCEL(data.writeStrongBinder, IInterface::asBinder(windowInfosListener));
+ return remote()->transact(BnSurfaceComposer::REMOVE_WINDOW_INFOS_LISTENER, data, &reply);
+ }
};
// Out-of-line virtual method definition to trigger vtable emission in this
@@ -2107,6 +2124,20 @@
SAFE_PARCEL(reply->writeBool, success);
return err;
}
+ case ADD_WINDOW_INFOS_LISTENER: {
+ CHECK_INTERFACE(ISurfaceComposer, data, reply);
+ sp<IWindowInfosListener> listener;
+ SAFE_PARCEL(data.readStrongBinder, &listener);
+
+ return addWindowInfosListener(listener);
+ }
+ case REMOVE_WINDOW_INFOS_LISTENER: {
+ CHECK_INTERFACE(ISurfaceComposer, data, reply);
+ sp<IWindowInfosListener> listener;
+ SAFE_PARCEL(data.readStrongBinder, &listener);
+
+ return removeWindowInfosListener(listener);
+ }
default: {
return BBinder::onTransact(code, data, reply, flags);
}