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