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/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index c52c644..8547739 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -19,6 +19,7 @@
#include <stdint.h>
#include <sys/types.h>
+#include <android/gui/IWindowInfosListener.h>
#include <utils/Errors.h>
#include <utils/Log.h>
#include <utils/SortedVector.h>
@@ -54,6 +55,7 @@
using gui::FocusRequest;
using gui::WindowInfo;
using gui::WindowInfoHandle;
+using gui::WindowInfosListener;
using ui::ColorMode;
// ---------------------------------------------------------------------------
@@ -95,6 +97,7 @@
if (instance.mComposerService == nullptr) {
if (ComposerService::getInstance().connectLocked()) {
ALOGD("ComposerService reconnected");
+ WindowInfosListenerReporter::getInstance()->reconnect(instance.mComposerService);
}
}
return instance.mComposerService;
@@ -1768,15 +1771,10 @@
// ---------------------------------------------------------------------------
-SurfaceComposerClient::SurfaceComposerClient()
- : mStatus(NO_INIT)
-{
-}
+SurfaceComposerClient::SurfaceComposerClient() : mStatus(NO_INIT) {}
SurfaceComposerClient::SurfaceComposerClient(const sp<ISurfaceComposerClient>& client)
- : mStatus(NO_ERROR), mClient(client)
-{
-}
+ : mStatus(NO_ERROR), mClient(client) {}
void SurfaceComposerClient::onFirstRef() {
sp<ISurfaceComposer> sf(ComposerService::getComposerService());
@@ -2142,6 +2140,18 @@
return ComposerService::getComposerService()->getGPUContextPriority();
}
+status_t SurfaceComposerClient::addWindowInfosListener(
+ const sp<WindowInfosListener>& windowInfosListener) {
+ return WindowInfosListenerReporter::getInstance()
+ ->addWindowInfosListener(windowInfosListener, ComposerService::getComposerService());
+}
+
+status_t SurfaceComposerClient::removeWindowInfosListener(
+ const sp<WindowInfosListener>& windowInfosListener) {
+ return WindowInfosListenerReporter::getInstance()
+ ->removeWindowInfosListener(windowInfosListener, ComposerService::getComposerService());
+}
+
// ----------------------------------------------------------------------------
status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs,