Merge "Fix crash with OpenGL wallpaper Bug #5216751"
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 049a284..492f3c2 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -300,7 +300,9 @@
}
if (mIsHwAccelerated) {
- drawWallpaperWithOpenGL(sh, availw, availh, xPixels, yPixels);
+ if (!drawWallpaperWithOpenGL(sh, availw, availh, xPixels, yPixels)) {
+ drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
+ }
} else {
drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
}
@@ -367,8 +369,8 @@
}
}
- private void drawWallpaperWithOpenGL(SurfaceHolder sh, int w, int h, int left, int top) {
- initGL(sh);
+ private boolean drawWallpaperWithOpenGL(SurfaceHolder sh, int w, int h, int left, int top) {
+ if (!initGL(sh)) return false;
final float right = left + mBackgroundWidth;
final float bottom = top + mBackgroundHeight;
@@ -423,6 +425,8 @@
checkEglError();
finishGL();
+
+ return true;
}
private FloatBuffer createMesh(int left, int top, float right, float bottom) {
@@ -533,11 +537,12 @@
}
private void finishGL() {
- mEgl.eglDestroyContext(mEglDisplay, mEglContext);
+ mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
mEgl.eglDestroySurface(mEglDisplay, mEglSurface);
+ mEgl.eglDestroyContext(mEglDisplay, mEglContext);
}
- private void initGL(SurfaceHolder surfaceHolder) {
+ private boolean initGL(SurfaceHolder surfaceHolder) {
mEgl = (EGL10) EGLContext.getEGL();
mEglDisplay = mEgl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
@@ -565,7 +570,7 @@
int error = mEgl.eglGetError();
if (error == EGL_BAD_NATIVE_WINDOW) {
Log.e(GL_LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
- return;
+ return false;
}
throw new RuntimeException("createWindowSurface failed " +
GLUtils.getEGLErrorString(error));
@@ -577,6 +582,8 @@
}
mGL = mEglContext.getGL();
+
+ return true;
}