1/*
2 * Copyright (C) 2008-2012 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 android.renderscript;
18
19import java.io.Writer;
20import java.util.ArrayList;
21import java.util.concurrent.Semaphore;
22
23import android.content.Context;
24import android.os.Handler;
25import android.os.Message;
26import android.util.AttributeSet;
27import android.util.Log;
28import android.view.Surface;
29import android.view.SurfaceHolder;
30import android.view.SurfaceView;
31
32/**
33 * @hide
34 * @deprecated in API 16
35 * The Surface View for a graphics renderscript (RenderScriptGL) to draw on.
36 *
37 * <div class="special reference">
38 * <h3>Developer Guides</h3>
39 * <p>For more information about creating an application that uses RenderScript, read the
40 * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
41 * </div>
42 */
43public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
44    private SurfaceHolder mSurfaceHolder;
45    private RenderScriptGL mRS;
46
47    /**
48     * @deprecated in API 16
49     * Standard View constructor. In order to render something, you
50     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
51     * register a renderer.
52     */
53    public RSSurfaceView(Context context) {
54        super(context);
55        init();
56        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
57    }
58
59    /**
60     * @deprecated in API 16
61     * Standard View constructor. In order to render something, you
62     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
63     * register a renderer.
64     */
65    public RSSurfaceView(Context context, AttributeSet attrs) {
66        super(context, attrs);
67        init();
68        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
69    }
70
71    private void init() {
72        // Install a SurfaceHolder.Callback so we get notified when the
73        // underlying surface is created and destroyed
74        SurfaceHolder holder = getHolder();
75        holder.addCallback(this);
76    }
77
78    /**
79     * @deprecated in API 16
80     * This method is part of the SurfaceHolder.Callback interface, and is
81     * not normally called or subclassed by clients of RSSurfaceView.
82     */
83    public void surfaceCreated(SurfaceHolder holder) {
84        mSurfaceHolder = holder;
85    }
86
87    /**
88     * @deprecated in API 16
89     * This method is part of the SurfaceHolder.Callback interface, and is
90     * not normally called or subclassed by clients of RSSurfaceView.
91     */
92    public void surfaceDestroyed(SurfaceHolder holder) {
93        synchronized (this) {
94            // Surface will be destroyed when we return
95            if (mRS != null) {
96                mRS.setSurface(null, 0, 0);
97            }
98        }
99    }
100
101    /**
102     * @deprecated in API 16
103     * This method is part of the SurfaceHolder.Callback interface, and is
104     * not normally called or subclassed by clients of RSSurfaceView.
105     */
106    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
107        synchronized (this) {
108            if (mRS != null) {
109                mRS.setSurface(holder, w, h);
110            }
111        }
112    }
113
114   /**
115     * @deprecated in API 16
116     * Inform the view that the activity is paused. The owner of this view must
117     * call this method when the activity is paused. Calling this method will
118     * pause the rendering thread.
119     * Must not be called before a renderer has been set.
120     */
121    public void pause() {
122        if(mRS != null) {
123            mRS.pause();
124        }
125    }
126
127    /**
128     * @deprecated in API 16
129     * Inform the view that the activity is resumed. The owner of this view must
130     * call this method when the activity is resumed. Calling this method will
131     * recreate the OpenGL display and resume the rendering
132     * thread.
133     * Must not be called before a renderer has been set.
134     */
135    public void resume() {
136        if(mRS != null) {
137            mRS.resume();
138        }
139    }
140
141    /**
142     * @deprecated in API 16
143     **/
144    public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) {
145      RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc);
146        setRenderScriptGL(rs);
147        return rs;
148    }
149
150    /**
151     * @deprecated in API 16
152     **/
153    public void destroyRenderScriptGL() {
154        synchronized (this) {
155            mRS.destroy();
156            mRS = null;
157        }
158    }
159
160    /**
161     * @deprecated in API 16
162     **/
163    public void setRenderScriptGL(RenderScriptGL rs) {
164        mRS = rs;
165    }
166
167    /**
168     * @deprecated in API 16
169     **/
170    public RenderScriptGL getRenderScriptGL() {
171        return mRS;
172    }
173}
174