165b04b617f7250927a1b3a4c200a768055435ffdChris Craik/* 265b04b617f7250927a1b3a4c200a768055435ffdChris Craik * Copyright (C) 2015 The Android Open Source Project 365b04b617f7250927a1b3a4c200a768055435ffdChris Craik * 465b04b617f7250927a1b3a4c200a768055435ffdChris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 565b04b617f7250927a1b3a4c200a768055435ffdChris Craik * you may not use this file except in compliance with the License. 665b04b617f7250927a1b3a4c200a768055435ffdChris Craik * You may obtain a copy of the License at 765b04b617f7250927a1b3a4c200a768055435ffdChris Craik * 865b04b617f7250927a1b3a4c200a768055435ffdChris Craik * http://www.apache.org/licenses/LICENSE-2.0 965b04b617f7250927a1b3a4c200a768055435ffdChris Craik * 1065b04b617f7250927a1b3a4c200a768055435ffdChris Craik * Unless required by applicable law or agreed to in writing, software 1165b04b617f7250927a1b3a4c200a768055435ffdChris Craik * distributed under the License is distributed on an "AS IS" BASIS, 1265b04b617f7250927a1b3a4c200a768055435ffdChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365b04b617f7250927a1b3a4c200a768055435ffdChris Craik * See the License for the specific language governing permissions and 1465b04b617f7250927a1b3a4c200a768055435ffdChris Craik * limitations under the License. 1565b04b617f7250927a1b3a4c200a768055435ffdChris Craik */ 1665b04b617f7250927a1b3a4c200a768055435ffdChris Craikpackage com.android.test.uibench; 1765b04b617f7250927a1b3a4c200a768055435ffdChris Craik 1865b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.animation.ObjectAnimator; 1965b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.animation.ValueAnimator; 2065b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.content.Context; 2165b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.graphics.Canvas; 222ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reckimport android.graphics.ColorFilter; 232ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reckimport android.graphics.PixelFormat; 2465b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.graphics.Color; 2565b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.graphics.Paint; 262ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reckimport android.graphics.drawable.Drawable; 2765b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.os.Bundle; 2865b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.support.v7.app.AppCompatActivity; 2965b04b617f7250927a1b3a4c200a768055435ffdChris Craikimport android.view.View; 3065b04b617f7250927a1b3a4c200a768055435ffdChris Craik 3165b04b617f7250927a1b3a4c200a768055435ffdChris Craik/** 3265b04b617f7250927a1b3a4c200a768055435ffdChris Craik * Draws hundreds of levels of overdraw over the content area. 3365b04b617f7250927a1b3a4c200a768055435ffdChris Craik * 3465b04b617f7250927a1b3a4c200a768055435ffdChris Craik * This should all be optimized out by the renderer. 3565b04b617f7250927a1b3a4c200a768055435ffdChris Craik */ 3665b04b617f7250927a1b3a4c200a768055435ffdChris Craikpublic class FullscreenOverdrawActivity extends AppCompatActivity { 372ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck private class OverdrawDrawable extends Drawable { 3865b04b617f7250927a1b3a4c200a768055435ffdChris Craik Paint paint = new Paint(); 3965b04b617f7250927a1b3a4c200a768055435ffdChris Craik int mColorValue = 0; 4065b04b617f7250927a1b3a4c200a768055435ffdChris Craik 4165b04b617f7250927a1b3a4c200a768055435ffdChris Craik @SuppressWarnings("unused") 4265b04b617f7250927a1b3a4c200a768055435ffdChris Craik public void setColorValue(int colorValue) { 4365b04b617f7250927a1b3a4c200a768055435ffdChris Craik mColorValue = colorValue; 442ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck invalidateSelf(); 4565b04b617f7250927a1b3a4c200a768055435ffdChris Craik } 4665b04b617f7250927a1b3a4c200a768055435ffdChris Craik 4765b04b617f7250927a1b3a4c200a768055435ffdChris Craik @Override 482ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck public void draw(Canvas canvas) { 4965b04b617f7250927a1b3a4c200a768055435ffdChris Craik paint.setColor(Color.rgb(mColorValue, 255 - mColorValue, 255)); 5065b04b617f7250927a1b3a4c200a768055435ffdChris Craik 5165b04b617f7250927a1b3a4c200a768055435ffdChris Craik for (int i = 0; i < 400; i++) { 522ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck canvas.drawRect(getBounds(), paint); 5365b04b617f7250927a1b3a4c200a768055435ffdChris Craik } 5465b04b617f7250927a1b3a4c200a768055435ffdChris Craik } 552ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck 562ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck @Override 572ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck public void setAlpha(int alpha) { 582ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck } 592ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck 602ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck @Override 612ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck public void setColorFilter(ColorFilter colorFilter) { 622ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck } 632ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck 642ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck @Override 652ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck public int getOpacity() { 662ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck return PixelFormat.OPAQUE; 672ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck } 6865b04b617f7250927a1b3a4c200a768055435ffdChris Craik } 6965b04b617f7250927a1b3a4c200a768055435ffdChris Craik @Override 7065b04b617f7250927a1b3a4c200a768055435ffdChris Craik protected void onCreate(Bundle savedInstanceState) { 7165b04b617f7250927a1b3a4c200a768055435ffdChris Craik super.onCreate(savedInstanceState); 7265b04b617f7250927a1b3a4c200a768055435ffdChris Craik 732ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck OverdrawDrawable overdraw = new OverdrawDrawable(); 742ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck getWindow().setBackgroundDrawable(overdraw); 752ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck 762ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck setContentView(new View(this)); 7765b04b617f7250927a1b3a4c200a768055435ffdChris Craik 782ccaf6a448408d3504a4b1cd4c47a9a2b66499cfJohn Reck ObjectAnimator objectAnimator = ObjectAnimator.ofInt(overdraw, "colorValue", 0, 255); 7965b04b617f7250927a1b3a4c200a768055435ffdChris Craik objectAnimator.setRepeatMode(ValueAnimator.REVERSE); 8065b04b617f7250927a1b3a4c200a768055435ffdChris Craik objectAnimator.setRepeatCount(ValueAnimator.INFINITE); 8165b04b617f7250927a1b3a4c200a768055435ffdChris Craik objectAnimator.start(); 8265b04b617f7250927a1b3a4c200a768055435ffdChris Craik } 8365b04b617f7250927a1b3a4c200a768055435ffdChris Craik} 84