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