1849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy/*
2849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Copyright (C) 2011 The Android Open Source Project
3849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy *
4849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * you may not use this file except in compliance with the License.
6849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * You may obtain a copy of the License at
7849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy *
8849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy *
10849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Unless required by applicable law or agreed to in writing, software
11849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * See the License for the specific language governing permissions and
14849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * limitations under the License.
15849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy */
16849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
17849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guypackage com.android.test.hwui;
18849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
19849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.app.Activity;
20849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.content.Context;
21849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.content.res.Resources;
222055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.graphics.Canvas;
23849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.Paint;
242055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.graphics.Path;
25849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.PorterDuff;
26849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.PorterDuffColorFilter;
27849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.os.Bundle;
282055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.util.AttributeSet;
29849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.util.DisplayMetrics;
30849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.view.View;
31849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.view.ViewGroup;
32849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.ArrayAdapter;
332055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.widget.FrameLayout;
34849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.ListView;
35849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.TextView;
36849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
37849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy@SuppressWarnings({"UnusedDeclaration"})
38849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guypublic class ViewLayersActivity5 extends Activity {
39ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    private final Paint mPaint = new Paint();
40ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka
41849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    @Override
42849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    protected void onCreate(Bundle savedInstanceState) {
43849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        super.onCreate(savedInstanceState);
442055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
452055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        init();
462055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
47849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        setContentView(R.layout.view_layers_5);
482055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        setupList(R.id.list1);
492055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    }
502055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
512055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    public static class ClipFrameLayout extends FrameLayout {
522055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        private final Path mClipPath = new Path();
532055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        private boolean mClipEnabled;
542055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
552055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        public ClipFrameLayout(Context context, AttributeSet attrs) {
562055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            super(context, attrs);
572055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        }
582055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
592055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        public ClipFrameLayout(Context context, AttributeSet attrs, int defStyle) {
602055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            super(context, attrs, defStyle);
612055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        }
622055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
632055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        public boolean isClipEnabled() {
642055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            return mClipEnabled;
652055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        }
66849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
672055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        public void setClipEnabled(boolean clipEnabled) {
682055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            mClipEnabled = clipEnabled;
692055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            invalidate();
702055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        }
712055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
722055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        @Override
732055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        protected void dispatchDraw(Canvas canvas) {
742055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            if (mClipEnabled) {
752055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy                mClipPath.reset();
762055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy                mClipPath.addCircle(getWidth() / 2.0f, getHeight() / 2.0f,
772055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy                        Math.min(getWidth(), getHeight()) / 3.0f, Path.Direction.CW);
782055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
792055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy                canvas.clipPath(mClipPath);
802055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            }
812055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy            super.dispatchDraw(canvas);
822055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        }
832055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    }
842055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
852055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    private void init() {
86ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka        mPaint.setColorFilter(new PorterDuffColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY));
872055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    }
88ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka
892055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    public void enableClip(View v) {
902055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        ((ClipFrameLayout) findViewById(R.id.container)).setClipEnabled(true);
912055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    }
922055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy
932055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy    public void disableClip(View v) {
942055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        ((ClipFrameLayout) findViewById(R.id.container)).setClipEnabled(false);
95849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    }
96849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
97ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    public void enableLayer(View v) {
982055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).setLayerType(View.LAYER_TYPE_HARDWARE, mPaint);
99ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    }
100ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka
101ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    public void disableLayer(View v) {
1022055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).setLayerType(View.LAYER_TYPE_NONE, null);
103849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    }
104849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
105ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    public void growLayer(View v) {
1062055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
1072055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).requestLayout();
108ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    }
109ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka
110ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka    public void shrinkLayer(View v) {
1112055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).getLayoutParams().height = 300;
1122055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy        findViewById(R.id.container).requestLayout();
113849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    }
114849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
115849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    private void setupList(int listId) {
116849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        final ListView list = (ListView) findViewById(listId);
117849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        list.setAdapter(new SimpleListAdapter(this));
118849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    }
119849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
120849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    private static class SimpleListAdapter extends ArrayAdapter<String> {
121849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        public SimpleListAdapter(Context context) {
122849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            super(context, android.R.layout.simple_list_item_1, DATA_LIST);
123849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        }
124849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
125849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        @Override
126849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        public View getView(int position, View convertView, ViewGroup parent) {
127849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            TextView v = (TextView) super.getView(position, convertView, parent);
128849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            final Resources r = getContext().getResources();
129849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            final DisplayMetrics metrics = r.getDisplayMetrics();
130849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            v.setCompoundDrawablePadding((int) (6 * metrics.density + 0.5f));
131849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            v.setCompoundDrawablesWithIntrinsicBounds(r.getDrawable(R.drawable.icon),
132849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy                    null, null, null);
133849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            return v;
134849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy        }
135849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    }
136849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy
137849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    private static final String[] DATA_LIST = {
138849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
139849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
140849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
141849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
142849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
143849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil",
144849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "British Indian Ocean Territory", "British Virgin Islands", "Brunei", "Bulgaria",
145849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Burkina Faso", "Burundi", "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
146849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
147849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
148849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
149849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
150849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
151849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
152849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
153849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
154849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
155849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
156849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
157849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
158849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
159849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
160849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
161849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
162849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
163849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
164849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
165849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
166849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
167849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
168849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
169849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
170849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
171849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
172849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
173849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
174849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
175849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Ukraine", "United Arab Emirates", "United Kingdom",
176849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
177849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
178849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy            "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
179849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy    };
180849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy}
181