14fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui/* 24fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * Copyright (C) 2015 The Android Open Source Project 34fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * 44fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * Licensed under the Apache License, Version 2.0 (the "License"); 54fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * you may not use this file except in compliance with the License. 64fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * You may obtain a copy of the License at 74fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * 84fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * http://www.apache.org/licenses/LICENSE-2.0 94fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * 104fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * Unless required by applicable law or agreed to in writing, software 114fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * distributed under the License is distributed on an "AS IS" BASIS, 124fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * See the License for the specific language governing permissions and 144fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui * limitations under the License. 154fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui */ 164fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 174fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuipackage android.support.test.vectordrawable; 184fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 194fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.app.Activity; 204fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.content.res.Resources; 214fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.graphics.PorterDuff.Mode; 224fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.graphics.drawable.Drawable.ConstantState; 234fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.os.Bundle; 244fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.support.graphics.drawable.VectorDrawableCompat; 254fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.widget.Button; 264fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.widget.LinearLayout; 274fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.widget.ScrollView; 284fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport android.widget.TextView; 294fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 304fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuiimport java.text.DecimalFormat; 314fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 324fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghuipublic class TestActivity extends Activity { 334fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui private static final String LOG_TAG = "TestActivity"; 344fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 354fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui private static final String LOGCAT = "VectorDrawable1"; 364fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui protected int[] icon = { 374fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable01, 384fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable02, 394fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable03, 404fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable04, 414fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable05, 424fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable06, 434fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable07, 444fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable08, 454fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable09, 464fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable10, 474fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable11, 484fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable12, 494fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable13, 504fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable14, 514fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable15, 524fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable16, 534fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable17, 544fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable18, 554fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable19, 564fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable20, 574fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable21, 584fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable22, 594fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable23, 604fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable24, 614fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable25, 624fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable26, 634fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable27, 644fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable28, 654fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable29, 664fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui R.drawable.vector_drawable30, 674fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui }; 684fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 694fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui private static final int EXTRA_TESTS = 2; 704fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 714fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui @Override 724fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui protected void onCreate(Bundle savedInstanceState) { 734fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui super.onCreate(savedInstanceState); 744fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui ScrollView scrollView = new ScrollView(this); 754fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui LinearLayout container = new LinearLayout(this); 764fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui scrollView.addView(container); 774fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui container.setOrientation(LinearLayout.VERTICAL); 784fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui Resources res = this.getResources(); 794fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui container.setBackgroundColor(0xFF888888); 804fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui VectorDrawableCompat []d = new VectorDrawableCompat[icon.length]; 814fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui long time = android.os.SystemClock.currentThreadTimeMillis(); 824fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui for (int i = 0; i < icon.length; i++) { 834fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui d[i] = VectorDrawableCompat.create(res, icon[i], getTheme()); 844fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui } 854fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui time = android.os.SystemClock.currentThreadTimeMillis()-time; 864fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 874fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // Testing Tint on one particular case. 884fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui d[3].setTint(0x8000FF00); 894fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui d[3].setTintMode(Mode.MULTIPLY); 904fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 914fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // Testing Constant State like operation by creating the first 2 icons 924fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // from the 3rd one's constant state. 934fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui VectorDrawableCompat []extras = new VectorDrawableCompat[EXTRA_TESTS]; 944fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui ConstantState state = d[0].getConstantState(); 954fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui extras[0] = (VectorDrawableCompat) state.newDrawable(); 964fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui extras[1] = (VectorDrawableCompat) state.newDrawable(); 974fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 984fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // This alpha change is expected to affect both extra 0, 1, and d0. 994fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui extras[0].setAlpha(128); 1004fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1014fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui d[0].mutate(); 1024fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui d[0].setAlpha(255); 1034fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1044fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // Just show the average create time as the first view. 1054fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui TextView t = new TextView(this); 1064fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui DecimalFormat df = new DecimalFormat("#.##"); 1074fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui t.setText("avgL=" + df.format(time / (icon.length)) + " ms"); 1084fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui container.addView(t); 1094fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1104fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui addDrawableButtons(container, extras); 1114fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1124fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui addDrawableButtons(container, d); 1134fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1144fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui setContentView(scrollView); 1154fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui } 1164fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui 1174fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui private void addDrawableButtons(LinearLayout container, VectorDrawableCompat[] d) { 1184fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // Add the VD into consequent views. 1194fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui for (int i = 0; i < d.length; i++) { 1204fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui Button button = new Button(this); 1214fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui button.setWidth(200); 1224fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // Note that setBackgroundResource() will fail b/c createFromXmlInner() failed 1234fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui // to recognize <vector> pre-L. 1244fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui button.setBackgroundDrawable(d[i]); 1254fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui container.addView(button); 1264fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui } 1274fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui } 1284fcaa70c2362e58a3fb30d140f0a0eeda8e35b44ztenghui} 129