114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung/* 214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * Copyright (C) 2010 The Android Open Source Project 314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * 414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * you may not use this file except in compliance with the License. 614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * You may obtain a copy of the License at 714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * 814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * http://www.apache.org/licenses/LICENSE-2.0 914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * 1014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * Unless required by applicable law or agreed to in writing, software 1114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * distributed under the License is distributed on an "AS IS" BASIS, 1214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * See the License for the specific language governing permissions and 1414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung * limitations under the License. 1514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung */ 1614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 1714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungpackage com.android.galaxy4; 1814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 1914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.graphics.PixelFormat; 2014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.os.Bundle; 2114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.os.Handler; 2214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.os.Message; 2314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.renderscript.RenderScript; 2414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.renderscript.RenderScriptGL; 25a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hongimport android.util.DisplayMetrics; 2614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.service.wallpaper.WallpaperService; 2714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.view.Surface; 2814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungimport android.view.SurfaceHolder; 29a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hongimport android.view.WindowManager; 30a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hongimport android.app.Service; 3114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 3214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chungpublic class Galaxy4Wallpaper extends WallpaperService { 3314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 3414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 3514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public Engine onCreateEngine() { 3614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung return new RenderScriptEngine(); 3714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 3814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 3914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung private class RenderScriptEngine extends Engine { 4014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung private RenderScriptGL mRenderScript = null; 4114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung private GalaxyRS mWallpaperRS = null; 42a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong private int mDensityDPI; 4314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 4414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 4514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void onCreate(SurfaceHolder surfaceHolder) { 4614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onCreate(surfaceHolder); 4714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung setTouchEventsEnabled(true); 4814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung surfaceHolder.setSizeFromLayout(); 4914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung surfaceHolder.setFormat(PixelFormat.RGBA_8888); 50a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong 51a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong DisplayMetrics metrics = new DisplayMetrics(); 52a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong ((WindowManager) getApplication().getSystemService(Service.WINDOW_SERVICE)) 53a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong .getDefaultDisplay().getMetrics(metrics); 54a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong mDensityDPI = metrics.densityDpi; 5514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 5614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 5714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 5814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void onDestroy() { 5914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onDestroy(); 6014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung destroyRenderer(); 6114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 6214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 6314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void destroyRenderer() { 6414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mWallpaperRS != null) { 6514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS.stop(); 6614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS = null; 6714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 6814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 6914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mRenderScript != null) { 7014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript.setSurface(null, 0, 0); 7114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript.destroy(); 7214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript = null; 7314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 7414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 7514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 7614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 7714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void onSurfaceCreated(SurfaceHolder surfaceHolder) { 7814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onSurfaceCreated(surfaceHolder); 7914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 8014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 8114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript = new RenderScriptGL(Galaxy4Wallpaper.this, sc); 8214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript.setPriority(RenderScript.Priority.LOW); 8314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 8414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 8514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 8614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void onSurfaceDestroyed(SurfaceHolder surfaceHolder) { 8714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onSurfaceDestroyed(surfaceHolder); 8814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung destroyRenderer(); 8914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 9014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 9114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 92a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong public void onSurfaceChanged(SurfaceHolder surfaceHolder, 93a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong int format, int width, int height) { 9414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onSurfaceChanged(surfaceHolder, format, width, height); 9514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 9614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mRenderScript != null) { 9714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mRenderScript.setSurface(surfaceHolder, width, height); 9814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 9914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 10014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mWallpaperRS == null) { 10114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS = new GalaxyRS(); 102a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong mWallpaperRS.init(mDensityDPI, mRenderScript, getResources(), width, height); 10314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS.start(); 104a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong } else { 105a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong mWallpaperRS.resize(width, height); 10614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 10714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 10814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 10914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 11014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 11114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public Bundle onCommand(String action, int x, int y, int z, Bundle extras, 11214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung boolean resultRequested) { 11314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mWallpaperRS != null) { 11414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung // return mWallpaperRS.onCommand(action, x, y, z, extras, resultRequested); 11514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 11614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung return null; 11714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 11814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung 11914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung @Override 12014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung public void onVisibilityChanged(boolean visible) { 12114d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung super.onVisibilityChanged(visible); 12214d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (mWallpaperRS != null) { 12314d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung if (visible) { 12414d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS.start(); 12514d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } else { 12614d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung mWallpaperRS.stop(); 12714d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 12814d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 12914d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 13014d79ccc9f72e86d9119faa979923cc191a8ca25Winson Chung } 131a5a0fb88861b6ada41bad777f42421cbebd193fdLeon Hong}