1505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren/* 2505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * Copyright (C) 2011 The Android Open Source Project 3505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * 4505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * Licensed under the Apache License, Version 2.0 (the "License"); 5505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * you may not use this file except in compliance with the License. 6505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * You may obtain a copy of the License at 7505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * 8505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * http://www.apache.org/licenses/LICENSE-2.0 9505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * 10505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * Unless required by applicable law or agreed to in writing, software 11505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * distributed under the License is distributed on an "AS IS" BASIS, 12505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * See the License for the specific language governing permissions and 14505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * limitations under the License. 15505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren */ 16505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 17505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenpackage android.view; 18505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 19505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.content.Context; 20505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.graphics.Canvas; 21505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.graphics.Color; 22505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.os.SystemClock; 23505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.util.AttributeSet; 24505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.util.Log; 25505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenimport android.view.View; 26505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 27505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren/** 28505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * A View that will throw a RuntimeException if onAttachedToWindow and 29505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren * onDetachedFromWindow is called in the wrong order for ViewAttachTest 30505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren */ 31505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgrenpublic class ViewAttachView extends View { 32505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren public static final String TAG = "OnAttachedTest"; 33505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren private boolean attached; 34505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 35505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren public ViewAttachView(Context context, AttributeSet attrs, int defStyle) { 36505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super(context, attrs, defStyle); 37505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren init(attrs, defStyle); 38505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 39505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 40505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren public ViewAttachView(Context context, AttributeSet attrs) { 41505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super(context, attrs); 42505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren init(attrs, 0); 43505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 44505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 45505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren public ViewAttachView(Context context) { 46505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super(context); 47505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren init(null, 0); 48505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 49505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 50505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren private void init(AttributeSet attrs, int defStyle) { 51505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren SystemClock.sleep(2000); 52505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 53505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 54505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren @Override 55505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren protected void onAttachedToWindow() { 56505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren Log.d(TAG, "onAttachedToWindow"); 57505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super.onAttachedToWindow(); 58505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren if (attached) { 59505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren throw new RuntimeException("OnAttachedToWindow called more than once in a row"); 60505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 61505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren attached = true; 62505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 63505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 64505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren @Override 65505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren protected void onDetachedFromWindow() { 66505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren Log.d(TAG, "onDetachedFromWindow"); 67505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super.onDetachedFromWindow(); 68505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren if (!attached) { 69505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren throw new RuntimeException( 70505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren "onDetachedFromWindowcalled without prior call to OnAttachedToWindow"); 71505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 72505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren attached = false; 73505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 74505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren 75505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren @Override 76505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren protected void onDraw(Canvas canvas) { 77505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren super.onDraw(canvas); 78505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren canvas.drawColor(Color.BLUE); 79505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren } 80505bd0d60d26811ac1e61d2c39a2d5a995d2254dMartin Wallgren} 81