1d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck/*
2d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * Copyright (C) 2014 The Android Open Source Project
3d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck *
4d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * Licensed under the Apache License, Version 2.0 (the "License");
5d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * you may not use this file except in compliance with the License.
6d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * You may obtain a copy of the License at
7d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck *
8d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck *      http://www.apache.org/licenses/LICENSE-2.0
9d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck *
10d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * Unless required by applicable law or agreed to in writing, software
11d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * distributed under the License is distributed on an "AS IS" BASIS,
12d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * See the License for the specific language governing permissions and
14d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck * limitations under the License.
15d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck */
16d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
17d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckpackage com.android.test.hwui;
18d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
19c01bd1167a1b08d59557f214ddc48cf24d3b8d0aJohn Reckimport android.animation.Animator;
20c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reckimport android.animation.Animator.AnimatorListener;
21f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reckimport android.animation.AnimatorSet;
22d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.app.Activity;
23d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.content.Context;
24d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.graphics.Canvas;
25d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.graphics.Color;
26d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.os.Bundle;
27c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reckimport android.util.Log;
28d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.view.View;
29d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.view.View.OnClickListener;
30d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.view.ViewAnimationUtils;
31d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.widget.LinearLayout;
32d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.widget.LinearLayout.LayoutParams;
33d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckimport android.widget.ProgressBar;
34d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
35d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reckpublic class RevealActivity extends Activity implements OnClickListener {
36d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
37d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    private static final int DURATION = 800;
38d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
39d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    private boolean mShouldBlock;
40f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck    private int mIteration = 0;
41d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
42c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck    private AnimatorListener mListener = new AnimatorListener() {
43c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck
44c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        @Override
45c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        public void onAnimationStart(Animator animation) {
46c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck            Log.d("Reveal", "onAnimatorStart " + animation);
47c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        }
48c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck
49c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        @Override
50c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        public void onAnimationRepeat(Animator animation) {
51c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck            Log.d("Reveal", "onAnimationRepeat " + animation);
52c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        }
53c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck
54c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        @Override
55c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        public void onAnimationEnd(Animator animation) {
56c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck            Log.d("Reveal", "onAnimationEnd " + animation);
57c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        }
58c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck
59c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        @Override
60c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        public void onAnimationCancel(Animator animation) {
61c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck            Log.d("Reveal", "onAnimationCancel " + animation);
62c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        }
63c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck    };
64c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck
65d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    @Override
66d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    protected void onCreate(Bundle savedInstanceState) {
67d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        super.onCreate(savedInstanceState);
68d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
69d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        final LinearLayout layout = new LinearLayout(this);
70d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        layout.setOrientation(LinearLayout.VERTICAL);
71d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
72d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        ProgressBar spinner = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge);
73d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        layout.addView(spinner, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
74d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        View revealView = new MyView(this);
75d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        layout.addView(revealView,
76d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck                new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
77d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        setContentView(layout);
78d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
79d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        revealView.setOnClickListener(this);
80d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    }
81d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
82d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    @Override
83d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    public void onClick(View view) {
84c01bd1167a1b08d59557f214ddc48cf24d3b8d0aJohn Reck        Animator animator = ViewAnimationUtils.createCircularReveal(view,
85d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck                view.getWidth() / 2, view.getHeight() / 2,
86d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck                0, Math.max(view.getWidth(), view.getHeight()));
87c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        Log.d("Reveal", "Calling start...");
88c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck        animator.addListener(mListener);
89f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck        if (mIteration < 2) {
90f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            animator.setDuration(DURATION);
91f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            animator.start();
92f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck        } else {
93f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            AnimatorSet set = new AnimatorSet();
94f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            set.playTogether(animator);
95f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            set.setDuration(DURATION);
96c47c98be04d602f331e0ea9704d2c11f8c53852dJohn Reck            set.addListener(mListener);
97f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck            set.start();
98f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck        }
99d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
100f5945a0c8bb868f978d9d0d22043a8b44464a86eJohn Reck        mIteration = (mIteration + 1) % 4;
101d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        mShouldBlock = !mShouldBlock;
102d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        if (mShouldBlock) {
103d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            view.post(sBlockThread);
104d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        }
105d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    }
106d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
107d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    private final static Runnable sBlockThread = new Runnable() {
108d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        @Override
109d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        public void run() {
110d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            try {
111d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck                Thread.sleep(DURATION);
112d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            } catch (InterruptedException e) {
113d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            }
114d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        }
115d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    };
116d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
117d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    static class MyView extends View {
118d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
119d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        public MyView(Context context) {
120d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            super(context);
121d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        }
122d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
123d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        @Override
124d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        protected void onDraw(Canvas canvas) {
125d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck            canvas.drawColor(Color.RED);
126d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck        }
127d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    }
128d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck}
129