1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/*
2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project
3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase *
4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License");
5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License.
6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at
7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase *
8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase *      http://www.apache.org/licenses/LICENSE-2.0
9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase *
10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software
11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS,
12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and
14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License.
15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */
16faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepackage com.android.transitiontests;
17faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.app.Activity;
19faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.content.Context;
20faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.graphics.Canvas;
21faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.graphics.Color;
22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.graphics.SurfaceTexture;
23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.os.Bundle;
24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.util.AttributeSet;
25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.SurfaceHolder;
26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.SurfaceView;
27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.TextureView;
28faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.View;
29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup;
30d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Crossfade;
31d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.ChangeBounds;
32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Scene;
33d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.TransitionSet;
34d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.TransitionManager;
35faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.widget.Button;
36faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
37faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport static android.widget.LinearLayout.LayoutParams;
38faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
39faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class SurfaceAndTextureViews extends Activity {
40faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
41faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    SimpleView mView;
42faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    SimpleSurfaceView mSurfaceView;
43faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    SimpleTextureView mTextureView;
44faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    private static final int SMALL_SIZE = 200;
45faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
46faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    @Override
47faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    public void onCreate(Bundle savedInstanceState) {
48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        super.onCreate(savedInstanceState);
49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        setContentView(R.layout.surface_texture_views);
50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        final ViewGroup container = (ViewGroup) findViewById(R.id.container);
52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        Button toggleButton = (Button) findViewById(R.id.toggleButton);
53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
54faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mView = new SimpleView(this);
55faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mView.setId(0);
56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        container.addView(mView);
58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mSurfaceView = new SimpleSurfaceView(this);
60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mSurfaceView.setId(1);
61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
62faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        container.addView(mSurfaceView);
63faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mTextureView = new SimpleTextureView(this);
65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mTextureView.setId(2);
66faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        container.addView(mTextureView);
68faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
69d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase        final TransitionSet transition = new TransitionSet();
70ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase        transition.addTransition(new ChangeBounds()).addTransition(new Crossfade().addTarget(0).
71ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase                addTarget(1).addTarget(2));
72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
73faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        toggleButton.setOnClickListener(new View.OnClickListener() {
74faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            @Override
75faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            public void onClick(View v) {
76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                Scene newScene = new Scene(container);
77faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                newScene.setEnterAction(new Runnable() {
78faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                    @Override
79faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                    public void run() {
80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                        if (mView.getWidth() <= SMALL_SIZE) {
81faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
82faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
83faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
84faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mView.mColor = SimpleView.LARGE_COLOR;
85faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mSurfaceView.mColor = SimpleSurfaceView.LARGE_COLOR;
86faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mTextureView.mColor = SimpleTextureView.LARGE_COLOR;
87faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                        } else {
88faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
89faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
90faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
91faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mView.mColor = SimpleView.SMALL_COLOR;
92faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mSurfaceView.mColor = SimpleSurfaceView.SMALL_COLOR;
93faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                            mTextureView.mColor = SimpleTextureView.SMALL_COLOR;
94faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                        }
95faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                    }
96faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                });
97faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                TransitionManager.go(newScene, transition);
98faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            }
99faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        });
100faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
101faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
102faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
103faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    static private class SimpleView extends View {
104faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int SMALL_COLOR = Color.BLUE;
105faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int LARGE_COLOR = Color.YELLOW;
106faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        int mColor = SMALL_COLOR;
107faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
108faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        private SimpleView(Context context) {
109faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            super(context);
110faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
111faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
112faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
113faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        protected void onDraw(Canvas canvas) {
114faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            canvas.drawColor(mColor);
115faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
116faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
117faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
118faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    static private class SimpleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
119faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
120faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int SMALL_COLOR = Color.GREEN;
121faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int LARGE_COLOR = Color.GRAY;
122faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        int mColor = SMALL_COLOR;
123faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        SurfaceHolder mHolder = null;
124faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
125faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        private SimpleSurfaceView(Context context) {
126faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            super(context);
127faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            SurfaceHolder holder = getHolder();
128faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            holder.addCallback(this);
129faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
130faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
131faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
132faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
133faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void surfaceCreated(SurfaceHolder holder) {
134faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("surfaceCreated");
135faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
136faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
137faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
138faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
139faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("surfaceChanged: w h = " + width + ", " + height);
140faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            Canvas canvas = holder.lockCanvas();
141faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            canvas.drawColor(mColor);
142faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            holder.unlockCanvasAndPost(canvas);
143faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
144faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
145faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
146faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void surfaceDestroyed(SurfaceHolder holder) {
147faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("surfaceDestroyed");
148faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
149faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
150faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
151faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    static private class SimpleTextureView extends TextureView implements TextureView.SurfaceTextureListener {
152faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
153faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int SMALL_COLOR = Color.RED;
154faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        static final int LARGE_COLOR = Color.CYAN;
155faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        int mColor = SMALL_COLOR;
156faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
157faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        private SimpleTextureView(Context context) {
158faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            super(context);
159faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            setSurfaceTextureListener(this);
160faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
161faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
162faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        private SimpleTextureView(Context context, AttributeSet attrs) {
163faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            super(context, attrs);
164faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            setSurfaceTextureListener(this);
165faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
166faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
167faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        private SimpleTextureView(Context context, AttributeSet attrs, int defStyle) {
168faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            super(context, attrs, defStyle);
169faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            setSurfaceTextureListener(this);
170faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
171faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
172faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
173faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
174faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("SurfaceTexture available");
175faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
176faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
177faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
178faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
179faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("SurfaceTexture size changed to " + width + ", " + height);
180faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            Canvas canvas = lockCanvas();
181faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            canvas.drawColor(mColor);
182faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            unlockCanvasAndPost(canvas);
183faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
184faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
185faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
186faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
187faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            return false;
188faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
189faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
190faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        @Override
191faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        public void onSurfaceTextureUpdated(SurfaceTexture surface) {
192faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            System.out.println("SurfaceTexture updated");
193faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
194faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
195faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase}
196