• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.wallpaper.holospiral;
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.service.wallpaper.WallpaperService;
26 import android.view.Surface;
27 import android.view.SurfaceHolder;
28 
29 public class HoloSpiralWallpaper extends WallpaperService {
30 
31     @Override
onCreateEngine()32     public Engine onCreateEngine() {
33         return new RenderScriptEngine();
34     }
35 
36     private class RenderScriptEngine extends Engine {
37         private RenderScriptGL mRenderScript = null;
38         private HoloSpiralRS mWallpaperRS = null;
39 
40         @Override
onCreate(SurfaceHolder surfaceHolder)41         public void onCreate(SurfaceHolder surfaceHolder) {
42             super.onCreate(surfaceHolder);
43             setTouchEventsEnabled(true);
44             surfaceHolder.setSizeFromLayout();
45             surfaceHolder.setFormat(PixelFormat.RGBA_8888);
46         }
47 
48         @Override
onDestroy()49         public void onDestroy() {
50             super.onDestroy();
51             destroyRenderer();
52         }
53 
destroyRenderer()54         public void destroyRenderer() {
55             if (mWallpaperRS != null) {
56                 mWallpaperRS.stop();
57                 mWallpaperRS = null;
58             }
59 
60             if (mRenderScript != null) {
61                 mRenderScript.setSurface(null, 0, 0);
62                 mRenderScript.destroy();
63                 mRenderScript = null;
64             }
65         }
66 
67         @Override
onSurfaceCreated(SurfaceHolder surfaceHolder)68         public void onSurfaceCreated(SurfaceHolder surfaceHolder) {
69             super.onSurfaceCreated(surfaceHolder);
70 
71             RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
72             mRenderScript = new RenderScriptGL(HoloSpiralWallpaper.this, sc);
73             mRenderScript.setPriority(RenderScript.Priority.LOW);
74         }
75 
76         @Override
onSurfaceDestroyed(SurfaceHolder surfaceHolder)77         public void onSurfaceDestroyed(SurfaceHolder surfaceHolder) {
78             super.onSurfaceDestroyed(surfaceHolder);
79             destroyRenderer();
80         }
81 
82         @Override
onSurfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height)83         public void onSurfaceChanged(SurfaceHolder surfaceHolder, int format,
84                 int width, int height) {
85             super.onSurfaceChanged(surfaceHolder, format, width, height);
86 
87             if (mRenderScript != null) {
88                 mRenderScript.setSurface(surfaceHolder, width, height);
89             }
90 
91             if (mWallpaperRS == null) {
92                 mWallpaperRS = new HoloSpiralRS(mRenderScript, getResources());
93                 mWallpaperRS.start();
94             }
95 
96             mWallpaperRS.resize(width, height);
97         }
98 
99         @Override
onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested)100         public Bundle onCommand(String action, int x, int y, int z, Bundle extras,
101                 boolean resultRequested) {
102             if (mWallpaperRS != null) {
103                 return mWallpaperRS.onCommand(action, x, y, z, extras, resultRequested);
104             }
105             return null;
106         }
107 
108         @Override
onVisibilityChanged(boolean visible)109         public void onVisibilityChanged(boolean visible) {
110             super.onVisibilityChanged(visible);
111             if (mWallpaperRS != null) {
112                 if (visible) {
113                     mWallpaperRS.start();
114                 } else {
115                     mWallpaperRS.stop();
116                 }
117             }
118         }
119 
120         @Override
onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset)121         public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,
122                 float yOffsetStep, int xPixelOffset, int yPixelOffset) {
123             mWallpaperRS.setOffset(xOffset, yOffset, xPixelOffset, yPixelOffset);
124         }
125     }
126 }
127