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
This commit is contained in:
parent
748f3df66f
commit
ef7b9c7eac
@ -244,6 +244,7 @@ void DisplayDevice::makeCurrent(const sp<const DisplayDevice>& hw, EGLContext ct
|
|||||||
|
|
||||||
void DisplayDevice::setVisibleLayersSortedByZ(const Vector< sp<LayerBase> >& layers) {
|
void DisplayDevice::setVisibleLayersSortedByZ(const Vector< sp<LayerBase> >& layers) {
|
||||||
mVisibleLayersSortedByZ = layers;
|
mVisibleLayersSortedByZ = layers;
|
||||||
|
mSecureLayerVisible = false;
|
||||||
size_t count = layers.size();
|
size_t count = layers.size();
|
||||||
for (size_t i=0 ; i<count ; i++) {
|
for (size_t i=0 ; i<count ; i++) {
|
||||||
if (layers[i]->isSecure()) {
|
if (layers[i]->isSecure()) {
|
||||||
|
@ -2095,6 +2095,7 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
|
|||||||
|
|
||||||
// only one display supported for now
|
// only one display supported for now
|
||||||
if (CC_UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT)) {
|
if (CC_UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT)) {
|
||||||
|
ALOGE("invalid display %d", dpy);
|
||||||
return BAD_VALUE;
|
return BAD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2109,10 +2110,12 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
|
|||||||
|
|
||||||
// if we have secure windows on this display, never allow the screen capture
|
// if we have secure windows on this display, never allow the screen capture
|
||||||
if (hw->getSecureLayerVisible()) {
|
if (hw->getSecureLayerVisible()) {
|
||||||
|
ALOGW("FB is protected: PERMISSION_DENIED");
|
||||||
return PERMISSION_DENIED;
|
return PERMISSION_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sw > hw_w) || (sh > hw_h)) {
|
if ((sw > hw_w) || (sh > hw_h)) {
|
||||||
|
ALOGE("size mismatch (%d, %d) > (%d, %d)", sw, sh, hw_w, hw_h);
|
||||||
return BAD_VALUE;
|
return BAD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2121,8 +2124,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
|
|||||||
const size_t size = sw * sh * 4;
|
const size_t size = sw * sh * 4;
|
||||||
const bool filtering = sw != hw_w || sh != hw_h;
|
const bool filtering = sw != hw_w || sh != hw_h;
|
||||||
|
|
||||||
//ALOGD("screenshot: sw=%d, sh=%d, minZ=%d, maxZ=%d",
|
// ALOGD("screenshot: sw=%d, sh=%d, minZ=%d, maxZ=%d",
|
||||||
// sw, sh, minLayerZ, maxLayerZ);
|
// sw, sh, minLayerZ, maxLayerZ);
|
||||||
|
|
||||||
// make sure to clear all GL error flags
|
// make sure to clear all GL error flags
|
||||||
while ( glGetError() != GL_NO_ERROR ) ;
|
while ( glGetError() != GL_NO_ERROR ) ;
|
||||||
@ -2209,7 +2212,7 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
|
|||||||
|
|
||||||
hw->compositionComplete();
|
hw->compositionComplete();
|
||||||
|
|
||||||
// ALOGD("screenshot: result = %s", result<0 ? strerror(result) : "OK");
|
// ALOGD("screenshot: result = %s", result<0 ? strerror(result) : "OK");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user