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
17package com.android.galaxy4;
18
19import android.graphics.PixelFormat;
20import android.os.Bundle;
21import android.os.Handler;
22import android.os.Message;
23import android.renderscript.RenderScript;
24import android.renderscript.RenderScriptGL;
25import android.util.DisplayMetrics;
26import android.service.wallpaper.WallpaperService;
27import android.view.Surface;
28import android.view.SurfaceHolder;
29import android.view.WindowManager;
30import android.app.Service;
31
32public 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}