screenshots could stop working after camera was used
once a secure window is put on screen the display
would retain its "secure" flag forever, preventing
screenshots from being taken.
Bug: 6933967
Change-Id: I5be8355145ca7d580d84552311642f8fa912fe6a
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index e3655f8..cdc8a9f 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -244,6 +244,7 @@
void DisplayDevice::setVisibleLayersSortedByZ(const Vector< sp<LayerBase> >& layers) {
mVisibleLayersSortedByZ = layers;
+ mSecureLayerVisible = false;
size_t count = layers.size();
for (size_t i=0 ; i<count ; i++) {
if (layers[i]->isSecure()) {
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index e7923be..ac3fb90 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2095,6 +2095,7 @@
// only one display supported for now
if (CC_UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT)) {
+ ALOGE("invalid display %d", dpy);
return BAD_VALUE;
}
@@ -2109,10 +2110,12 @@
// if we have secure windows on this display, never allow the screen capture
if (hw->getSecureLayerVisible()) {
+ ALOGW("FB is protected: PERMISSION_DENIED");
return PERMISSION_DENIED;
}
if ((sw > hw_w) || (sh > hw_h)) {
+ ALOGE("size mismatch (%d, %d) > (%d, %d)", sw, sh, hw_w, hw_h);
return BAD_VALUE;
}
@@ -2121,8 +2124,8 @@
const size_t size = sw * sh * 4;
const bool filtering = sw != hw_w || sh != hw_h;
- //ALOGD("screenshot: sw=%d, sh=%d, minZ=%d, maxZ=%d",
- // sw, sh, minLayerZ, maxLayerZ);
+// ALOGD("screenshot: sw=%d, sh=%d, minZ=%d, maxZ=%d",
+// sw, sh, minLayerZ, maxLayerZ);
// make sure to clear all GL error flags
while ( glGetError() != GL_NO_ERROR ) ;
@@ -2209,7 +2212,7 @@
hw->compositionComplete();
- // ALOGD("screenshot: result = %s", result<0 ? strerror(result) : "OK");
+// ALOGD("screenshot: result = %s", result<0 ? strerror(result) : "OK");
return result;
}