1e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui/*
2e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Copyright (C) 2014 The Android Open Source Project
3e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui *
4e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * in compliance with the License. You may obtain a copy of the License at
6e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui *
7e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * http://www.apache.org/licenses/LICENSE-2.0
8e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui *
9e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Unless required by applicable law or agreed to in writing, software distributed under the License
10e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * or implied. See the License for the specific language governing permissions and limitations under
12e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * the License.
13e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui */
14e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui
15e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuipackage com.android.test.dynamic;
16e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui
17e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.app.Activity;
1883a52031fd5c277d0c6e75da50bf8013e8a70399ztenghuiimport android.graphics.drawable.Animatable2;
19e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.graphics.drawable.AnimatedVectorDrawable;
2083a52031fd5c277d0c6e75da50bf8013e8a70399ztenghuiimport android.graphics.drawable.Drawable;
21e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.os.Bundle;
221588f0ff54b88240b55eeaba97e67f0f1dee5f92ztenghuiimport android.util.Log;
23e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.view.View;
24e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.widget.Button;
251c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghuiimport android.widget.GridLayout;
261c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghuiimport android.widget.ScrollView;
279ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhuimport android.widget.TextView;
28e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui
295eb5cde467081d1af628e5463ba55f110265a86fztenghuipublic class AnimatedVectorDrawableTest extends Activity implements View.OnClickListener {
301c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    private static final String LOGCAT = "AnimatedVectorDrawableTest";
311c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui
321c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    protected int[] icon = {
335339428d22fb477c79348fde7c1288a7b22e6113Teng-Hui Zhu            R.drawable.btn_radio_on_to_off_bundle,
346eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui            R.drawable.ic_rotate_2_portrait_v2_animation,
356eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui            R.drawable.ic_signal_airplane_v2_animation,
366eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui            R.drawable.ic_hourglass_animation,
375eb5cde467081d1af628e5463ba55f110265a86fztenghui            R.drawable.animation_vector_linear_progress_bar,
381c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui            R.drawable.animation_vector_drawable_grouping_1,
391c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui            R.drawable.animation_vector_progress_bar,
401c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui            R.drawable.animation_vector_drawable_favorite,
411c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui            R.drawable.animation_vector_drawable01,
428490354dc651dd8f25036ef0dda7917fb33013edztenghui            // Duplicate to test constant state.
438490354dc651dd8f25036ef0dda7917fb33013edztenghui            R.drawable.animation_vector_drawable01,
441c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    };
45e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui
46e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui    @Override
47e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui    protected void onCreate(Bundle savedInstanceState) {
4806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu        final int[] layerTypes = {View.LAYER_TYPE_SOFTWARE, View.LAYER_TYPE_HARDWARE};
499ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu        final boolean[] forceOnUi = {false, true};
50e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui        super.onCreate(savedInstanceState);
51e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui
521c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        ScrollView scrollView = new ScrollView(this);
531c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        GridLayout container = new GridLayout(this);
541c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        scrollView.addView(container);
559ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu        container.setColumnCount(layerTypes.length * forceOnUi.length);
561c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui
579ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu        for (int j = 0; j < layerTypes.length; j++) {
589ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu            for (int k = 0; k < forceOnUi.length; k++) {
599ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                TextView textView = new TextView(this);
609ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                String category = "Layer:"
619ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        + (layerTypes[j] == View.LAYER_TYPE_SOFTWARE ? "SW" : "HW")
629ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        + (forceOnUi[k] == true ? ",forceUI" : "");
639ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                textView.setText(category);
649ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                container.addView(textView);
659ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu            }
669ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu        }
671c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        for (int i = 0; i < icon.length; i++) {
6806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu            for (int j = 0; j < layerTypes.length; j++) {
699ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                for (int k = 0; k < forceOnUi.length; k++) {
709ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    Button button = new Button(this);
719ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    button.setWidth(300);
729ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    button.setHeight(300);
739ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    button.setLayerType(layerTypes[j], null);
749ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    button.setBackgroundResource(icon[i]);
759ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    AnimatedVectorDrawable d = (AnimatedVectorDrawable) button.getBackground();
769ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    if (forceOnUi[k] == true) {
779ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        d.forceAnimationOnUI();
7806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu                    }
799ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    d.registerAnimationCallback(new Animatable2.AnimationCallback() {
809ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        @Override
819ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        public void onAnimationStart(Drawable drawable) {
829ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                            Log.v(LOGCAT, "Animator start");
839ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        }
8483a52031fd5c277d0c6e75da50bf8013e8a70399ztenghui
859ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        @Override
869ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        public void onAnimationEnd(Drawable drawable) {
879ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                            Log.v(LOGCAT, "Animator end");
889ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                        }
899ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    });
901588f0ff54b88240b55eeaba97e67f0f1dee5f92ztenghui
919ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    container.addView(button);
929ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                    button.setOnClickListener(this);
939ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu                }
9406a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu            }
951c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        }
961c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui
971c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        setContentView(scrollView);
981c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    }
991c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui
1001c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    @Override
1011c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui    public void onClick(View v) {
1021c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        AnimatedVectorDrawable d = (AnimatedVectorDrawable) v.getBackground();
1031c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui        d.start();
104e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui    }
105e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui}
106