1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.galaxy4; 18 19 import android.graphics.PixelFormat; 20 import android.os.Bundle; 21 import android.os.Handler; 22 import android.os.Message; 23 import android.renderscript.RenderScript; 24 import android.renderscript.RenderScriptGL; 25 import android.util.DisplayMetrics; 26 import android.service.wallpaper.WallpaperService; 27 import android.view.Surface; 28 import android.view.SurfaceHolder; 29 import android.view.WindowManager; 30 import android.app.Service; 31 32 public class Galaxy4Wallpaper extends WallpaperService { 33 34 @Override 35 public Engine onCreateEngine() { 36 return new RenderScriptEngine(); 37 } 38 39 private class RenderScriptEngine extends Engine { 40 private RenderScriptGL mRenderScript = null; 41 private GalaxyRS mWallpaperRS = null; 42 private int mDensityDPI; 43 44 @Override 45 public void onCreate(SurfaceHolder surfaceHolder) { 46 super.onCreate(surfaceHolder); 47 setTouchEventsEnabled(true); 48 surfaceHolder.setSizeFromLayout(); 49 surfaceHolder.setFormat(PixelFormat.RGBA_8888); 50 51 DisplayMetrics metrics = new DisplayMetrics(); 52 ((WindowManager) getApplication().getSystemService(Service.WINDOW_SERVICE)) 53 .getDefaultDisplay().getMetrics(metrics); 54 mDensityDPI = metrics.densityDpi; 55 } 56 57 @Override 58 public void onDestroy() { 59 super.onDestroy(); 60 destroyRenderer(); 61 } 62 63 public void destroyRenderer() { 64 if (mWallpaperRS != null) { 65 mWallpaperRS.stop(); 66 mWallpaperRS = null; 67 } 68 69 if (mRenderScript != null) { 70 mRenderScript.setSurface(null, 0, 0); 71 mRenderScript.destroy(); 72 mRenderScript = null; 73 } 74 } 75 76 @Override 77 public void onSurfaceCreated(SurfaceHolder surfaceHolder) { 78 super.onSurfaceCreated(surfaceHolder); 79 80 RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 81 mRenderScript = new RenderScriptGL(Galaxy4Wallpaper.this, sc); 82 mRenderScript.setPriority(RenderScript.Priority.LOW); 83 } 84 85 @Override 86 public void onSurfaceDestroyed(SurfaceHolder surfaceHolder) { 87 super.onSurfaceDestroyed(surfaceHolder); 88 destroyRenderer(); 89 } 90 91 @Override 92 public void onSurfaceChanged(SurfaceHolder surfaceHolder, 93 int format, int width, int height) { 94 super.onSurfaceChanged(surfaceHolder, format, width, height); 95 96 if (mRenderScript != null) { 97 mRenderScript.setSurface(surfaceHolder, width, height); 98 } 99 100 if (mWallpaperRS == null) { 101 mWallpaperRS = new GalaxyRS(); 102 mWallpaperRS.init(mDensityDPI, mRenderScript, getResources(), width, height); 103 mWallpaperRS.start(); 104 } else { 105 mWallpaperRS.resize(width, height); 106 } 107 108 } 109 110 @Override 111 public Bundle onCommand(String action, int x, int y, int z, Bundle extras, 112 boolean resultRequested) { 113 if (mWallpaperRS != null) { 114 // return mWallpaperRS.onCommand(action, x, y, z, extras, resultRequested); 115 } 116 return null; 117 } 118 119 @Override 120 public void onVisibilityChanged(boolean visible) { 121 super.onVisibilityChanged(visible); 122 if (mWallpaperRS != null) { 123 if (visible) { 124 mWallpaperRS.start(); 125 } else { 126 mWallpaperRS.stop(); 127 } 128 } 129 } 130 } 131 }