• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2009, The Android Open Source Project
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 package com.android.sampleplugin;
26 
27 import android.content.Context;
28 import android.graphics.PixelFormat;
29 import android.view.SurfaceHolder;
30 import android.view.SurfaceView;
31 import android.view.SurfaceHolder.Callback;
32 
33 public class PaintSurface extends SurfaceView {
34 
35     static {
36         //needed for jni calls
37         System.loadLibrary("sampleplugin");
38     }
39 
40     private final int npp;
41 
42     private boolean validNPP = true;
43     private Object nppLock = new Object();
44 
PaintSurface(Context context, int NPP, int width, int height)45     public PaintSurface(Context context, int NPP, int width, int height) {
46         super(context);
47 
48         this.npp = NPP;
49 
50         this.getHolder().setFormat(PixelFormat.RGBA_8888);
51         this.getHolder().addCallback(new Callback() {
52 
53             public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
54                 synchronized (nppLock) {
55                     if (validNPP) {
56                         nativeSurfaceChanged(npp, format, width, height);
57                     }
58                 }
59             }
60 
61             public void surfaceCreated(SurfaceHolder holder) {
62                 synchronized (nppLock) {
63                     if (validNPP) {
64                         nativeSurfaceCreated(npp);
65                     }
66                 }
67             }
68 
69             public void surfaceDestroyed(SurfaceHolder holder) {
70                 synchronized (nppLock) {
71                     if (validNPP) {
72                         nativeSurfaceDestroyed(npp);
73                     }
74                 }
75             }
76         });
77 
78         // sets the plugin's surface to a fixed size
79         this.getHolder().setFixedSize(width, height);
80 
81         // ensure that the view system is aware that we will be drawing
82         this.setWillNotDraw(false);
83     }
84 
85     // called by JNI
invalidateNPP()86     private void invalidateNPP() {
87         synchronized (nppLock) {
88             validNPP = false;
89         }
90     }
91 
nativeSurfaceCreated(int npp)92     private native void nativeSurfaceCreated(int npp);
nativeSurfaceChanged(int npp, int format, int width, int height)93     private native void nativeSurfaceChanged(int npp, int format, int width, int height);
nativeSurfaceDestroyed(int npp)94     private native void nativeSurfaceDestroyed(int npp);
95 }
96