/* * Copyright (C) Winson Chiu * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cw.kop.autobackground; import android.content.Context; import android.opengl.GLSurfaceView; import android.service.wallpaper.WallpaperService; import android.view.SurfaceHolder; public abstract class GLWallpaperService extends WallpaperService { public class GLEngine extends Engine { private WallpaperGLSurfaceView glSurfaceView; private boolean rendererHasBeenSet; @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); glSurfaceView = new WallpaperGLSurfaceView(GLWallpaperService.this); } @Override public void onDestroy() { super.onDestroy(); glSurfaceView.onDestroy(); } protected void setRenderer(GLSurfaceView.Renderer renderer) { glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); glSurfaceView.setRenderer(renderer); rendererHasBeenSet = true; } protected void setRendererMode(int mode) { glSurfaceView.setRenderMode(mode); } protected void render() { glSurfaceView.requestRender(); } protected void addEvent(Runnable runnable) { glSurfaceView.queueEvent(runnable); } protected void setEGLContextClientVersion(int version) { glSurfaceView.setEGLContextClientVersion(version); } protected void setPreserveEGLContextOnPause(boolean preserve) { glSurfaceView.setPreserveEGLContextOnPause(preserve); } public void pause() { if (rendererHasBeenSet) { glSurfaceView.onPause(); } } public void resume() { if (rendererHasBeenSet) { glSurfaceView.onResume(); } } class WallpaperGLSurfaceView extends GLSurfaceView { WallpaperGLSurfaceView(Context context) { super(context); } @Override public SurfaceHolder getHolder() { return getSurfaceHolder(); } public void onDestroy() { super.onDetachedFromWindow(); } } } }